|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在1995年5月23日以“Java”的名称正式发布了。
Map内里利用率最多的,应当是HashMap吧,我们先来看看这个
1.packagecollection.lession12;
2.
3.importjava.util.HashMap;
4.importjava.util.Iterator;
5.importjava.util.Map;
6.
7./**
8.*老紫竹JAVA进步教程(12)-熟悉Map之HashMap<br>
9.*基于哈希表的Map接口的完成。<br>
10.*一个映照不克不及包括反复的键;每一个键最多只能映照到一个值。<br>
11.*<br>
12.*相干API请检察api.java2000.net/Map
13.*
14.*@author老紫竹JAVA世纪网(java2000.net)
15.*/
16.publicclassLession12{
17.
18.publicstaticvoidmain(String[]args){
19.//我们用String做一切的测试
20.HashMap<String,String>map=newHashMap<String,String>();
21.
22.//同意null作为Key.
23.//看看源代码完成就晓得了
24.//if(key==null)
25.//returnputForNullKey(value);
26.map.put(null,"测试null的键");
27.showMap(map);//null=>测试null的键;
28.
29.//固然也同意null的Value了
30.map.put("测试null的值",null);
31.showMap(map);//null=>测试null的键;测试null的值=>null;
32.
33.//对应的都是null
34.//注重这个null交换了后面的"NullKey"字符串的value了
35.//也就是前面的不异的key会交换之前的key对应的value
36.//前往值为之前的值
37.System.out.println("之前的值="+map.put(null,null));//之前的值=测试null的键
38.showMap(map);//null=>null;测试null的值=>null;
39.
40.//别的的和Map不异的操纵就不先容了
41.//这里先容一下Hash的特别的中央
42.//人人利用时必定要注重,实在和HashSet有不异的中央
43.//那就是经由过程Key的Hashcode举行查找
44.
45.Map<MyObject,String>map2=newHashMap<MyObject,String>();
46.MyObjectkey1=newMyObject("第一个对象");
47.MyObjectkey2=newMyObject("第二个对象");
48.MyObjectkey3=newMyObject("第三个对象");
49.map2.put(key1,"111111");
50.map2.put(key2,"222222");
51.
52.//我们来测试读取第一个
53.System.out.println(map2.get(key1));//111111
54.
55.//我们实验修正key1的name
56.key1.setName("第一个对象-修正");
57.
58.//我们再次测试读取第一个
59.//没有找到哦!
60.System.out.println(map2.get(key1));//null
61.
62.//总结
63.//HashSet必定要注重hashCode的成绩
64.//关于String等不成修正类无所谓
65.//但关于一般类,必定要注重其hashCode的完成体例
66.//万万不要让一个类的hashCode任意变化
67.//假如非得更新,应当先删除,后修正
68.map2.remove(key2);
69.key2.setName("第二个对象-修正");
70.map2.put(key2,"2222222---");
71.showMap(map2);//第二个对象-修正=>2222222---;第一个对象-修正=>null;
72.
73.//对Value则没有这个限定
74.}
75.
76.publicstaticvoidshowMap(Mapmap){
77.//迭代Key的操纵
78.Iteratorit=map.keySet().iterator();
79.Objectkey;
80.while(it.hasNext()){
81.key=it.next();
82.System.out.print(key+"=>"+map.get(key)+";");
83.}
84.System.out.println();
85.}
86.}
87.
88.classMyObject{
89.
90.privateStringname;
91.
92.publicStringgetName(){
93.returnname;
94.}
95.
96.publicvoidsetName(Stringname){
97.this.name=name;
98.}
99.
100.MyObject(Stringname){
101.this.name=name;
102.}
103.
104.//注重这里利用name的hashCode作为类的hashCode
105.publicinthashCode(){
106.returnname.hashCode();
107.}
108.
109.publicStringtoString(){
110.returnname;
111.}
112.}
运转了局(已包括在源代码里)
null=>测试null的键;
null=>测试null的键;测试null的值=>null;
之前的值=测试null的键
null=>null;测试null的值=>null;
111111
null
第二个对象-修正=>2222222---;第一个对象-修正=>null;
大型的应用一般不会用这些框架(因为性能考虑);开发人员根据需要选择用一些框架,也可以不选用框架;不用框架并不代表要自己写框架;修改框架的可能性更小。 |
|