Map接口
Map类似y(x)=x;这样的函数(key对应x,value对应y)
Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value
Map 中的 key 和 value 都可以是任何引用类型的数据
Map 中的 key 用Set来存放,不允许重复,即同一个 Map 对象所对应的类,须重写hashCode()和equals()方法。
常用String类作为Map的“键”。
key 和 value 之间存在单向一对一关系,即通过指定的 key 总能找到唯一的、确定的 value。
Map接口
java" id="highlighter_789034">
1
2
3
4
5
6
7
8
|
丨---------HashMap:Map的主要实现类
丨---------TreeMap:按照添加进Map中的元素的key的指定属性进行排序,要求:key必须是同一个类的对象!针对key:自然排序 vs 定制排序
丨---------Hashtable:是一个古老的实现类,线程安全,与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来存放的,不可重复,value是用Collection来存放的,可重复
* 一个key-value对,是一个Entry,所有的Entry是用Set存放的,也是不可重复的。
*2.向HashMap中添加元素时,会调用key所在类的equals()方法,判断两个key是否相同,若相同则只能够添加进一个,则只能添加进后加的那个元素
*
*/
//两个put的key相同,输出结果为后加进去的那个,所以输出是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
面试题:区分Collection和Collections
reverse(List):反转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当src来复制list集合则会报错,出现数组越界,以为新定义的集合长度是0,而源集合长度是5,塞不进去
List list1 = Arrays.asList( new Object[list.size()]); //将数组作为list长度直接取
Collections.copy(list1,list); //调用工具类不用返回值
-----------------同步控制
synchronized ()方法
//通过如下的方法保证list的线程安全性。安全性高了但是效率低啊!
List list2 = Collections.synchronizedList(list);
System.out.println(list2);
|
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
原文链接:http://blog.csdn.net/s740556472/article/details/56489629