1.Map集合的特点
1.1无序
运行的数据和输出的数据是不一致的
Map<String,String> map=new HashMap<>(); map.put("zh","123"); map.put("ss","345"); map.put("hw","456"); System.out.println(map);
1.2以键值对的方式
值唯一,键不唯一(允许添加)
相反键相同,值不同的情况,值就会被后面的覆盖掉
Map<String,String> map=new HashMap<String,String>(); map.put("zh","123"); map.put("ss","345"); map.put("hw","456"); map.put("zs","123"); System.out.println(map);
2.遍历方式
2.1获取所有的Key
Map<String,String> map=new HashMap<String,String>();
map.put("zh","123");
map.put("ss","345");
map.put("hw","456");
Set<String> keys = map.keySet();
for (String key:keys){
System.out.println(key);
}
2.2获取所有的Value
//2获取所有的Value
Map<String,String> map=new HashMap<String,String>();
map.put("zh","123");
map.put("ss","345");
map.put("hw","456");
Collection<String> values = map.values();
for (String v:values){
System.out.println(v);
}
2.3获取所有的键值对entrySet
2.3.1HashMap可以传null值
//HashMap可以传null值,
Map<String,String> map=new HashMap<String,String>();
map.put("zh","123");
map.put("ss","345");
map.put("hw","456");
map.put(null,null);//会被覆盖
map.put(null,null);
//通过entrvSet获取Map集合的键值对
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entry : entries) {
System.out.println(entry.getKey()+"="+entry.getValue());
}
2.3.2Hashtable不可以传null值
//Hashtable不可以传null值
Map<String,String> map=new Hashtable<>();
map.put("zh","123");
map.put("ss","345");
map.put("hw","456");
// 通过entrvSet获取Map集合的键值对
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entry : entries) {
System.out.println(entry.getKey()+"="+entry.getValue());
}
3.TreeMap
3.1根据key值进行升序和降序
默认是由Map集合中的key来进行升序排序的
//默认是由Map集合中的key来进行升序排序的 Map<String,String> map=new TreeMap<>(); map.put("b","100"); map.put("a","80"); map.put("c","90"); // System.out.println(map); map.forEach((k,v)->{ System.out.println(k+"="+v); });
所以会根据key值a,b,c这样排序
降序:如何实现map集合的key来进行降序的
//如何实现map集合的key来进行降序的 Map<String,String> map=new TreeMap<>(Comparator.reverseOrder()); map.put("b","100"); map.put("a","80"); map.put("c","90"); // System.out.println(map); map.forEach((k,v)->{ System.out.println(k+"="+v); });
Comparator.reverseOrder():是倒序的意思
Comparator.comparing(类::属性一).reversed();
Comparator.comparing(类::属性一,Comparator.reverseOrder());
两种排序是完全不一样的,一定要区分开, reversed()是得到排序结果后再排序,Comparator.reverseOrder()是直接进行排序,理解错误很容易出现混淆,相比较而言Comparator.reverseOrder()更好理解。
3.2根据value值进行升序和降序
// 实现map集合的value来进行升序或者降序的
Map<String, User> map=new TreeMap<>();
map.put("k01",new User(3,"bb",80f));
map.put("k03",new User(1,"zs",100f));
map.put("k02",new User(2,"aa",90f));
// map.forEach((k,v)->{
// System.out.println(k+"="+v);
// });
//将当前获取的map集合的entrySet转换成List集合
Set<Map.Entry<String, User>> entries = map.entrySet();
List<Map.Entry<String,User>> list=
new ArrayList<>(entries);
//集合框架的工具类Collections
//请注意:要区分Collection和Collections
//Collection:集合框架的顶层接口
//Collections:集合框架的工具类
Collections.sort(list, new Comparator<Map.Entry<String, User>>() {
@Override
public int compare(Map.Entry<String, User> a, Map.Entry<String, User> b) {
return b.getValue().getUname().hashCode()-a.getValue().getUname().hashCode();
}
});
Collections.sort(list,new NameComparator());
list.forEach(System.out::println);
return b.getValue().getUname().hashCode()-a.getValue().getUname().hashCode();
这串代码关系着你是想要升序还是降序
升序的话,就不变,降序的话,就把a和b调换一下就可以了
那么我们就完成了ヾ(≧▽≦*)o