**
1.Map
**
V put(K key,V value)
Map<Integer,Integer> map = new HashMap<>();
map.put(1,2);
map.put(2,3);
map.put(3,6);
Integer f= map.put(3,5);
System.out.println(f);//6
System.out.println(map);
put操作可以执行添加和覆盖操作。
如果添加的键值不存在,则将键值对加入,返回null
如果存在,则返回被覆盖的value。
判断是否包含
bool containsValue(V value)
bool containsKey(K key)
Map<Integer,Integer> map = new HashMap<>();
map.put(1,2);
map.put(2,3);
map.put(3,6);
Set<Integer> set = map.keySet();
for(Integer a:set){
System.out.println(map.get(a));
}
Iterator<Integer> it = set.iterator();
while(it.hasNext()){
int a = it.next();
System.out.println(map.get(a));
}
set.forEach(a-> System.out.println(map.get(a)));
for(Map.Entry<Integer,Integer> entry : map.entrySet()){
System.out.println(entry.getKey()+"="+entry.getValue());
}
Iterator<Map.Entry<Integer,Integer>> it2 = map.entrySet().iterator();
while(it2.hasNext()){
Map.Entry<Integer,Integer> temp = it2.next();
System.out.println(temp.getKey()+"="+temp.getValue());
}
map.entrySet().forEach(entry->System.out.println(entry.getKey()+"="+entry.getValue()));
map.forEach(new BiConsumer<Integer, Integer>() {
@Override
public void accept(Integer integer, Integer integer2) {
System.out.println(integer+"="+integer2);
}
});
map.forEach((Integer integer, Integer integer2)->System.out.println(integer+"="+integer2));
**
HashMap
**
底层原理
(1)创建一个默认长度为16,默认加载因子为0.75的数组(当数组中元素大于16*0.75时,数组长度变为原来两倍)
(2)根据Key的哈希值和数组长度计算出应存入的位置index
index = (数组长度-1)&哈希值
(3)判断当前位置是否为null,null则直接存入
(4)如果不为null,则调用equals方法比较Key
(5)如果链表上存在Key相同,用当前待插入的value替代与这个Key相同的键值对的value;否则,存入对应index位置的链表或者红黑树中。新元素挂在老元素下面,如果链表长度大于8且数组长度大于等于64,自动转换为红黑树。
PS:当集合存储的是自定义对象,必须要重写hashCode和equals方法。因为如果不重写,hashCode和equals默认计算和比较地址值,而大多数情况我们需要根据属性值来计算和比较。
**
TreeMap
**
和TreeSet差不多,按照Key进行排序,当然自己也可以重写。
TreeMap添加元素的时候,键是否需要重写hashCode和equals方法?
不用,根本没有用到key
HashMap是哈希表结构,JDK8开始由数组,链表,红黑树组成。既然有红黑树,HashMap的键值是否需要实现Comparable接口或者传递比较器对象呢?
不用,系统默认用hash值进行比较
TreeMap和HashMap谁的效率更高?
不一定,一般来说HashMap效率高,极端情况下TreeMap好一点
Map集合中,java会提供一个键值重复,不会覆盖的put方法吗?
会。
三种双列集合该如何选择?
默认HashMap,如果要求存取有序就用LinkedHashMap,如果要求有序就TreeMap。