1、数组和集合的区别?
(1)数组存放的元素在定义数组时是固定的,如:type arrayName[] = new type[arraySize];
集合可以通过add()、remove()方法添加、删除元素;
(2)数组存放的数据类型是统一的;
集合存放的数据类型可以不统一;
2、集合类:List和Set比较,各自的子类比较?
List和Set都继承自Collection接口
(1)List:元素有放入顺序,元素可重复;
1)ArrayList
优点:ArrayList是基于动态数组的数据结构,需要一块连续的存储空间,因为地址连续,一旦存储好了,查询操作效率会比较高;
缺点:因为地址连续,ArrayList要移动数据,所以增删慢;非同步,线程不安全;
2)LinkdArrayList
优点:LinkdArrayList是基于链表的数据结构,地址是任意的,所以在开辟内存空间的时候不需要一块连续的地址,对于新增和删除操作比较占优势;
缺点:因为LinkArrayList需要移动指针,所以查询效率比较低;非同步,线程不安全;
3)Vector
优点:基于动态数组实现,同步,线程安全;
缺点:由于线程的同步必然影响性能,所以ArrayList性能比Vector好;当Vector和ArrayList中元素超过初始元素大小时,Vector容量会翻倍,ArrayList只增加50%,有利于节约内存空间;
(2)Set:无序,元素不许重复,重复元素会覆盖掉;
1)HashSet
HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束 。
HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的String对象,hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例。
2)LinkedHashSet
HashSet的子类,存储的元素是有序的,是一个链表;
3)TreeSet
TreeSet 是二叉树实现的,Treeset中的数据是自动排好序的,不允许放入null值 。
3、HashMap的底层实现?
http://www.importnew.com/16301.html
http://blog.youkuaiyun.com/tuke_tuke/article/details/51588156
4、ConcurrentHashMap的底层实现?