Map接口
Map類似y(x)=x;這樣的函數(shù)(key對應(yīng)x,value對應(yīng)y)
Map與Collection并列存在。用于保存具有映射關(guān)系的數(shù)據(jù):Key-Value
Map 中的 key 和 value 都可以是任何引用類型的數(shù)據(jù)
Map 中的 key 用Set來存放,不允許重復(fù),即同一個 Map 對象所對應(yīng)的類,須重寫hashCode()和equals()方法。
常用String類作為Map的“鍵”。
key 和 value 之間存在單向一對一關(guān)系,即通過指定的 key 總能找到唯一的、確定的 value。
Map接口
1
2
3
4
5
6
7
8
|
丨---------HashMap:Map的主要實現(xiàn)類 丨---------TreeMap:按照添加進Map中的元素的key的指定屬性進行排序,要求:key必須是同一個類的對象!針對key:自然排序 vs 定制排序 丨---------Hashtable:是一個古老的實現(xiàn)類,線程安全,與HashMap不同,它不允許使用 null 作為key和value(不建議使用)(有多老!看命名就知道,連駝峰命名法都木有用上!哈哈哈哈哈!) 丨---------Properties:常用來處理屬性文件。鍵和值都為String類型的。(這兒你常用的配置文件就是) |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
public class TestMap{ /* * *Object put(Object key,Object value):向Map中添加一個元素 * *Object remove(Object key):按照指定的key刪除此key-value對 * *void putAll(Map t): * *void clear():清空 * *Object get(Object key):獲取指定key的value值,若無此key則返回null * *boolean containsKey(Object key): * *boolean containsValue(Object value) * *int size() * *boolean isEmpty() * *boolean equals(Object obj) * *HashMap: *1.key是用Set來存放的,不可重復(fù),value是用Collection來存放的,可重復(fù) * 一個key-value對,是一個Entry,所有的Entry是用Set存放的,也是不可重復(fù)的。 *2.向HashMap中添加元素時,會調(diào)用key所在類的equals()方法,判斷兩個key是否相同,若相同則只能夠添加進一個,則只能添加進后加的那個元素 * */ //兩個put的key相同,輸出結(jié)果為后加進去的那個,所以輸出是value=87 public void test1(){ Map map = new HashMap(); map.put("AA",213); map.put("BB",456); map.put("BB",45);//與上邊的key相同所以map中是這個 map.put(123,"CC"); map.put(null,null); map.put(new Person("xx",21),89); map.put(new Person("xx",21),87);//與上邊的key相同所以map中是這個 System.out.println(map.size()); map.remove("BB"); System.out.println(map); Object value = map.get(123); System.out.println(value); } /* 如何遍歷Map Set keySet() Collection values() Set entrySet() */ @Test public void test2(){ Map map = new HashMap(); map.put( "AA" , 213 ); map.put( "BB" , 45 ); map.put( 123 , "CC" ); map.put( null , null ); map.put( new Person( "xx" , 21 ), 89 ); //1.遍歷key集.此時打印輸出 null,AA,Person //[name=DD,age=23],BB,123 Set set = map.keySet(); for (Object obj : set){ System.out.println(obj); } //2.遍歷value集.此時打印輸出null,213,89,45,CC Collection values = map.values(); Iterator i = values.iterator(); while (i.hasNext()){ System.out.println(i.next()); } //3.如何遍歷key-value對 //方式一 Set set1 = map.keySet(); for (Object obj1 : set1){ System.out.println(obj + "----->" + map.get(obj)); } //方式二 Set set2 = map.entrySet(); for (Object obj : set2 ){ Map.Entry entry = (Map.Entry)obj; System.out.println(entry.getKey() + "---->" + entry.getValue()); } } @Test public void testLinkedHashMap(){ Map map = new LinkedHashMap(); map.put( "AA" , 213 ); map.put( "BB" , 45 ); map.put( 123 , "CC" ); map.put( null , null ); map.put( new Person( "xx" , 21 ), 89 ); Set set1 = map.keySet(); for (Object obj1 : set1){ System.out.println(obj + "----->" + map.get(obj)); } } @Test public void testTreeMap(){ //自然排序 Map map = new TreeMap(); map.put( new Person( "AA" , 23 ), 89 ); map.put( new Person( "MM" , 22 ), 79 ); map.put( new Person( "BB" , 23 ), 99 ); map.put( new Person( "CC" , 13 ), 69 ); Set set1 = map.keySet(); for (Object obj1 : set1){ System.out.println(obj + "----->" + map.get(obj)); } } @Test public void testProperties(){ Properties pros = new Properties(); pros.load( new FileInputStream( new File(jdbc.properties ))); String user = pros.getProperty( "user" ); String password = pros.getProperty( "password" ); } } |
<下面重點:>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
/* 操作Collection以及Map的工具類:Collections 面試題:區(qū)分Collection和Collections reverse(List):反轉(zhuǎn)List中元素的位置 shuffle(List):對List集合元素進行隨機排序 sort(List): sort(List,Comparator): swap(List,int,int): */ List list = new ArrayList(); list.add( 123 ); list.add( 23 ); list.add( 33 ); list.add( 43 ); list.add( 53 ); List list2 = new ArraysList(); //若用list2當(dāng)src來復(fù)制list集合則會報錯,出現(xiàn)數(shù)組越界,以為新定義的集合長度是0,而源集合長度是5,塞不進去 List list1 = Arrays.asList( new Object[list.size()]); //將數(shù)組作為list長度直接取 Collections.copy(list1,list); //調(diào)用工具類不用返回值 -----------------同步控制 synchronized ()方法 //通過如下的方法保證list的線程安全性。安全性高了但是效率低啊! List list2 = Collections.synchronizedList(list); System.out.println(list2); |
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
原文鏈接:http://blog.csdn.net/s740556472/article/details/56489629