Java 集合框架 Map
程序员文章站
2022-03-30 23:05:56
...
Map接口和collection接口的不同
Map是双列的,Collection是单列的。
HashSet底层依赖的是HashMap,只是隐藏起了第二列。TreeSet底层依赖的是TreeMap。
Map的键唯一,Collection的子体系Set是唯一的。
Map集合的数据结构值针对键有效,跟值无关Collection集合的数据结构是针对元素有效。
Map的添加put方法、清空clear方法、删除特定键remove方法
HashMap<String,String> hm = new HashMap<>();
String s1 = hm.put("key1","aaa");
String s2 = hm.put("key2","bbb");
String s3 = hm.put("key1","bbb");
System.out.println(hm);
System.out.println(s1);
System.out.println(s3);
运行结果:{key1=bbb, key2=bbb}
null
aaa
字符串key1、key2是Map的键,是唯一的,同样的键不同的值输入以后原先的值会被覆盖,然后被返回。
remove方法删除指定的键,然后返回指定的键值。
Map的判断是否包含键值containsKey、containsValue,判断是否为空isEmpty,
根据键获取值get,获取所有值values,size获取键值对的个数(不是元素的个数)
遍历Map的方法1(keySet键找值)
HashMap<String,Integer> hm = new HashMap<>();
hm.put("key1",11);
hm.put("key2",22);
Set<String> keySet = hm.keySet();
Iterator<String> it= keySet.iterator();
while (it.hasNext()){
String key = it.next();
Integer value = hm.get(key);
System.out.println(value);
}
使用keySet获取集合中所有键的set,然后获取set的遍历器,通过键找到对应的值
遍历Map的方法2(entrySet获取键值对)
HashMap<String,Integer> hm = new HashMap<>();
hm.put("key1",11);
hm.put("key2",22);
Set<Map.Entry<String,Integer>> es = hm.entrySet();
Iterator<Map.Entry<String,Integer>> it= es.iterator();
while (it.hasNext()){
Map.Entry<String,Integer> en = it.next();
String key = en.getKey();
int value = en.getValue();
System.out.println(key+":"+value);
}
运行结果:key1:11
key2:22
使用entrySet获取键值对为元素的set集合,然后用set集合的遍历器遍历,键值对内置了getKey、getValue方法供使用。
遍历Map的两种方法图解
第一种:通过keySet方法
第二种方法:
获取键值对遍历的简化方法:
for (Map.Entry<String,Integer> en:hm.entrySet()) {
System.out.println(en.getKey()+"+"+en.getValue());
}
LinkedHashMap
保证怎么存就怎么取,同时保证元素唯一
TreeMap
比较键,不比较值
HashMap和Hashtable的区别
共同点:都是用哈希算法
不同:
1,Hashtable是JDK1.0版本的,是同步的(线程安全的),效率低
HashMap是JDK1.2版本的,是不同步(线程不安全的),效率高
2,Hashtable不能存null键和null值,HashMap可以存储null键和null值
Collections工具类
上一篇: 机器学习之决策树算法(四)考试训练