欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java 集合框架 Map

程序员文章站 2022-03-30 23:05:56
...

Map接口和collection接口的不同

Map是双列的,Collection是单列的。
HashSet底层依赖的是HashMap,只是隐藏起了第二列。TreeSet底层依赖的是TreeMap。
Java 集合框架 Map
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方法
Java 集合框架 Map
第二种方法:
Java 集合框架 Map
获取键值对遍历的简化方法:

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工具类