包含键值对的Map属性的初始化⽅式
严格来讲,map的初始化只包含new的操作。但在这⾥,因为是包含数据的map,所以我们把map的初始化分两步:
1. new的操作,我们这⾥称为初步初始化
why notfloaters2. put数据的操作,成为数据填充
高考播音培训
两步合起来,称为包含键值对(数据)的map的初始化。
我喜欢你英文以下给出了这种map初始化的两种⽅式,我原来都是⽤第⼀种⽅式。第⼆种⽅式是今天第⼀次见,很新颖,也很简洁;全部初始化动作在⼀条语句内完成。
1. 先初步初始化后填充
public final Map<Integer, String> RESULT_MESSAGE = new HashMap<Integer, String>();
RESULT_MESSAGE.put(RESULT_CODE_OK, "ok");
update rvice
RESULT_MESSAGE.put(RESULT_CODE_BADREQUEST, "bad request");
RESULT_MESSAGE.put(RESULT_CODE_UNAUTHORIZED, "unauthorized");
RESULT_MESSAGE.put(RESULT_CODE_FORBIDDEN, "forbidden");
RESULT_MESSAGE.put(RESULT_CODE_TOOMANYREQUEST, "too many request");
posted
RESULT_MESSAGE.put(RESULT_CODE_INTERNALSERVERERROR, "Internal Server Error");
2. 匿名内部类
public final /*static*/ Map<Integer, String> RESULT_MESSAGE = new HashMap<Integer, String>(){
{
put(RESULT_CODE_OK, "ok");
put(RESULT_CODE_BADREQUEST, "bad request");
put(RESULT_CODE_UNAUTHORIZED, "unauthorized");
put(RESULT_CODE_FORBIDDEN, "forbidden");
put(RESULT_CODE_TOOMANYREQUEST, "too many request");
put(RESULT_CODE_INTERNALSERVERERROR, "Internal Server Error");
barium}
};
那么究竟两种⽅法各有什么优劣呢?以下是我的思考,不⼀定正确。
内部类
火锅英语*优:*map的初始化和数据填充是强⾏在⼀体的,代码简洁,阅读性好。
考研准考证号查询*劣:*内部类会产⽣新的class⽂件,HashMap的⼦类,虽然是匿名的。所以可能性能并不是太好。我们讲⼦类⼀般都是对⽗类的扩展,在这⾥⼦类并没有对⽗类进⾏功能性上的扩展(复写),只是在内部填充了数据⽽已
先初步初始化后填充
优:不会使⽤⼦类,⽤的就是HashMap本⾝。不产⽣新的class⽂件
汉博学院
劣:Map的初步初始化和数据填充两部是分离的,不是被强⾏绑定在⼀起的。所以就有可能在初步初始化和数据填充中间夹塞许多代码,不易阅读
建议:建议使⽤先初步初始化后填充这种⽅式,因为不会产⽣新的类型。虽然不是被强⾏绑定在⼀起的,但是这是可⼈为控制
的。只要写代码的时候注意⼀些,两步操作先后紧挨着放在⼀起,就会好多了