Map集合特点;
1,内部存储的都是键key值value对。
2,必须要保证的键的唯一性。
Map常见功能。
1,存储。v put(k,v);
2,获取。v get(k);
3,移除。v remove(k);
4,Set<k> keySet();
Set<String> keyset = map.keySet();//保证唯一性,用set来接受map中所有的键
for(String key:keyset){
System.out.println("key:"+key+" value:"+map.get(key));
}
5,Set<Map.Entry<k,v>> entrySet();
将map集合中映射关系存储到了Set集合中.映射关系:其实就是指键和值的对应关系。映射关系是什么类型的呢? Map.Entry,就是数据类型,其中.是内部的属性
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
//增强For循环
for(Map.Entry<String, Integer> e: entrySet ){
System.out.println("key:"+e.getKey()+" value:"+e.getValue());
}
//使用迭代器
Iterator<Map.Entry<String, String>> it = entrySet.iterator();
//遍历Set中的映射关系对象。
while(it.hasNext()){
Map.Entry<String, String> me = it.next();//取到了映射关系对象。
//获取键。
String key = me.getKey();
//获取值。
String value = me.getValue();
System.out.println(key+"-----"+value);
}
6,Collection<v> values();
总结:
map集合没有迭代器,取出元素的方式:将map集合转成单列结合,在使用单列集合的迭代器就可以了。map集合也不能直接被foreach循环遍历。
关于Map.Entry。实际是map接口中定义了Entry接口
至于为何要定义内部接口,参见内部接口定义原理
Map
- |--Hashtable:数据结构:哈希表。是同步的,不允许null作为键和值。被hashMap替代。
- |--Properties:属性集,键和值都是字符串(无泛型),而且可以结合流进行键值的操作。IO流中频繁使用。
- |--HashMap:数据结构:哈希表。不是同步的,允许null作为键和值。
- |--LinkedHashMap:基于链表+哈希表。可以保证map集合有序(存入和取出的顺序一致)。
- |--TreeMap:数据结构:二叉树。不是同步的。可以对map集合中的键进行排序。
一道题目:
"werertrtyuifgkiryuiop",获取字符串中每一个字母出现的次数。
要求返回结果个格式是 a(1)b(2)d(4)......
char[] chs = str.toCharArray();
Map<Character, Integer> map = new TreeMap<Character, Integer>();
for (Character s : chs) {
Integer value = map.get(s);
int count = 0;
if(value!=null){
count = value;
}
count ++;
map.put(s, count);
}
StringBuilder sb = new StringBuilder();
//2,遍历map集合。
for(Character key : map.keySet()){
Integer value = map.get(key);
sb.append(key+"("+value+")");
}
Collections: 集合框架中的用于操作集合对象 工具类。
* 都是静态的工具方法。
* 1,获取Collection最值。
* 2,对List集合排序,也可以二分查找。
* 3,对排序逆序。
* 4,可以将非同步的集合转成同步的集合。
* Xxx synchronizedXxx(Xxx) List synchronizedList(List)