Map 存放键值对(和python字典一样)

HashMap
1. 采用 hash算法
2. 初始化容量 16
3. 最大容量 2^31
4. 装载因子 0.75
5. key和value都可以为null,但key只能有一个null
TreeMap
1.key和value都可以为null,但key只能有一个null
2.存储的数据需要实现 comparable 接口 或者 new TreeMap时指定排序规则
3.存进去的元素会自动排序
Hashtable
1.HashTable的初始容量是11,扩容策略是翻倍加1,即当前容量 capacity * 2 + 1。
2.key和value不能为null
map遍历
1.调用keySet方法返回一个 key set集合,拿到键然后 迭代 调用get方法
2.调用forEach方法 map.forEach((k,v)-> System.out.println(k+"=="+v));
3.调用entrySet方法返回一个set,迭代里面的值
Set<Map.Entry<String, Object>> en = map.entrySet();
for (Map.Entry<String, Object> s : en) {
System.out.println(s);
}

知识点
1. ArrayList 和 LinkedList 的区别
1)ArrayList 底层基于数组存储,而LinkedList底层基于双向链表存储
2)ArrayList 查询效率高,增删效率不高,LinkedList 增删效率高,查询效率不高
2. ArrayList 和 Vector 的区别
1)Vector 是线程安全的,效率不如ArrayList
2)当Vector或ArrayList中的元素超过它的初始大小时,
Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。
3. HashSet 是如何 实现 值的去重的
1)首先是重写的hashCode()。如果在该方法中,两个对象通过
重写后计算出来的哈希码是不同的,那么就直接判定这两个对象不
是同一个对象,即可以同时存放进HashSet集合。
2)当两个对象通过重写后计算出来的哈希码是相同的,那么调
用重写后的equals方法。如果返回false,说明这两个对象不同,
即可以同时存放进HashSet集合,反之则不可以。
4. TreeSet 在使用的时候,需要注意什么事项
1)存储的数据需要实现 comparable 接口 或者 new TreeMap时指定排序规则
5. HashMap 和 Hashtable 有什么区别
1)Hashtable 是线程安全的,效率比较低