学习笔记Day33
Vector的源码分析:
jdk7和jdk8中通过Vector()构造器创建对象时,底层都创建了长度为10的数组。在扩容方面,默认扩容为原来的数组长度的2倍。
Set接口中没有额外定义方法,使用的都是Collection中声明过的方法
特别注意:当调用HashSet里的set.remove§时,需要计算p的hashcode,是否存在此值,如果存在此值则remove,如果无此hashcode,则不删除。
Map:双列数据,存储key-value对的数据 ----类似于函数。
面试题:
1.HashMap的底层实现原理?
2.HashMap与Hashtable的区别?
Map结构的理解:
Map的key:无序的,不可重复的,使用Set存储所有的key ----> key所在的类要重写equals()和hashcode() (以hashmap 为例)
Map中的value:无序的,使用collection存储所有value----> value所在类要重写equals().
一个键值对构成了一个entry对象,map中的entry:无序,不可重复的,使用Set存储所有的entry。
LinkedHashMap的底层实现原理:
源码中:
Map中定义的方法:
HashMap中的遍历操作(key使用的set保存,value使用的collection保存,key-value使用的set保存,内部定义的entry):
注意向TreeMap中添加key-value,要求key必须是同一个类创建的对象,因为要按照key进行排序:自然排序和定制排序
Collections:操作Collection(List/Set)、Map的工具类,例如Colelctions.sort(List)
Iterator只能操作Collection,不能操作Map
ArrayList和HashMap都是线程不安全的,如果程序要求线程安全,可使用synchronizedList(List list)和synchronizedMap(Map map)