Map 集合的特点
能够存储唯一的列数据(唯一,不可重复)set
能够存储可以重复的数据(可重复)list
值的顺序取决于键的顺序
键和值都是可以存储 null 元素的
一个映射不能包含重复的键,每个键最多只能映射一个值
实现类:HashMap ,底层是哈希表结构
特点:
键无序,唯一,类似于Set集合
值有序,可重复,类似于List
底层数据结构是哈希表,保证键唯一
允许键为null,值为null
实现类:LinkedHashMap ,底层是哈希表和链表结构
特点:
键有序,唯一,
值有序,可重复,类似于List
底层数据结构是哈希表和链表,哈希表保证键唯一,链表保证键有序
实现类:TreeMap
具体取决于使用的构造方法。
特点:
键可排序,唯一,
值有序,可重复,类似于List
底层数据结构是自平衡的二叉树,可排序
排序方式类似于TreeSet,分为自然排序和比较器排序,具体取决于使用的构造方法
实现类:TreeMap
以弱键 实现的基于哈希表的 Map。在 WeakHashMap 中,当某个键不再正常使用时,
将自动移除其条目。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,
这就使该键成为可终止的,被终止,然后被回收。
丢弃某个键时,其条目从映射中有效地移除,因此,该类的行为与其他的 Map 实现有所不同。
接口:Dictionary<K,V>
实现类:HashTable
特点:
不允许null键和null值
线程安全,效率低
面试题:HashMap和Hashtable的区别
HashMap是不安全的不同步的效率高的 允许null键和null值
Hashtable是安全的同步的效率低的 不允许null键和null值
底层都是哈希表结构
常用功能:
/*
* 1.添加功能
* V put(K key, V value)
* void putAll(Map<? extends K,? extends V> m)
* 2.删除功能
* V remove(Object key)
* void clear()
* 3.遍历功能
* Set<K> keySet()
* Collection<V> values()
* Set<Map.Entry<K,V>> entrySet()
* 4.获取功能
* V get(Object key)
* 5.判断功能
* boolean containsKey(Object key)
* boolean containsValue(Object value)
* boolean isEmpty()
* 6.修改功能
* V put(K key, V value)
* void putAll(Map<? extends K,? extends V> m)
* 7.长度功能
* int size()
*/
遍历功能:
Set<String> keys = map.keySet();
for(String str : keys){
System.out.println(str);
}
System.out.println("============");
Collection<String> values = map.values();
for(String str : values){
System.out.println(str);
}
System.out.println("============");
Set<Entry<String,String>> keyValue= map.entrySet();
for(Entry<String,String> str : keyValue){
String key = str.getKey();
String value = str.getValue();
System.out.println(key + " = " + value);
}
System.out.println("============");
Set<String> key = map.keySet();
Iterator<String> it = key.iterator();
while(it.hasNext()){
String ikey = it.next();
String ivalue = map.get(ikey);
System.out.println(ikey+" = " + ivalue);
}
System.out.println("============");
Set<Entry<String,String>> keyValues= map.entrySet();
Iterator<Entry<String,String>> iter = keyValues.iterator();
while(iter.hasNext()){
Entry<String,String> ikeyValue = iter.next();
System.out.println(ikeyValue.getKey() + "=" + ikeyValue.getValue());
}