1.Map集合的特点:
(1)无序性:添加元素的顺序与输出顺序不一致
(2)以键值对的形式储存元素(Map<key,value>)
(3)键唯一,值不唯一。
(4)与Set集合与List集合不同,它不是Collection的子接口。
2.遍历方式:
由于Map集合的无序性,和没有实现Collection接口的特点,它既不能使用for循环进行遍历,也不能直接调用迭代器,只能使用foreach循环,但是它仍有三种取值方式:
(1)获取所有keys:
Map<String,String> map=new HashMap();
//注意,Map集合使用put()方法添加元素
map.put("pid","1");
map.put("name","李四");
map.put("sex","男");
map.put("addr","长沙");
//获取所有的key值
Set<> keys=map.keySet();
keys.forEach(System.out::println);
(2) 获取所有的value值:
//获取并接收所有的value值
Collection<Object> values=map.values();
//循环遍历
values.forEach(System.out::printnl);
(3)获取所有的键值对
//获取并接收键值对
Set<Map.Entry<String,String>> entry=map.entrySet();
//循环遍历
entry.forEach(a->{
System.out.println(a)
})
3.HashMap与Hashtable的区别:
(1)HashMap允许null值插入,Hashtable不允许。
(2)Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现
(3)HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,在只有一个线程访问的情况下,效率要高于Hashtable。
4.TreeMap:
(1)reverseOrder降序排序
Map<String,Object> map=new TreeMap<>(Comparator.reverseOrder());
map.put("2","ls");
map.put("1","ww");
map.put("4","zs");
map.put("3","xl");
map.forEach((k,v)->{
System.out.println(k+"="+v);
});
(2)Value值排序
Map<String,Object> map=new TreeMap<String,Object>();
map.put("2","ls");
map.put("1","ww");
map.put("4","zs");
map.put("3","xl");
//按照map中的value属性排序
List<Map.Entry<String,Object>> lst=
new ArrayList<Map.Entry<String,Object>>(map.entrySet());
Collections.sort(lst, new Comparator<Map.Entry<String, Object>>() {
@Override
public int compare(Map.Entry<String, Object> o1, Map.Entry<String, Object> o2) {
return -o1.getValue().toString().compareTo(o2.getValue().toString());
}
});
lst.forEach(s->{
System.out.println(s);
});