一、三大集合有哪些
Map、Set、List,其中Set、List是Collection的子类。
二、Java中常见的集合
1、Map和Collection是所有集合接口的父类接口;
2、Collection包括Set与List集合;
3、Map集合有:HashMap,TreeMap,HashTable,currentHashMap;
4、Set集合有:HashSet,TreeSet,LinkedHashSet;
5、List集合有:ArrayList,LinkedList,vector
三、HashMap和HashTable区别
1、HashMap是线程不安全的;HashTable是线程安全的,使用了锁;
2、HashMap的key、value都可以为null,而HashTable不可以;
四、HashMap为什么说是线程不安全的
1、HashMap线程不安全主要是考虑到了多线程环境下进行扩容可能会出现HashMap死循环;
2、HashTable是在给put、remove方法中加入了synchronized锁,由此我们也能看出,在多线程操作HashTable中的一个方法时,线程是安全的;但是当线程同时调用两个方法,则就是不安全的;
五、HashMap的存储原理
当调用put()方法,首先会调hashCode()方法,返回一个HashCode值,然后通过hashcode找到hashcode桶,将Entry实例存入桶中;当发生hash冲突,则会在桶后面添加链表。hashMap在1.8前的结构是数组+链表的形式,在1.8后为数组+链表+红黑树,为什么会是这样呢,因为在hashmap容量太大的情况下,检索起来会很慢,因此在1.8后加入了红黑树,提高教唆效率。
六、ConcurrentHashMap和Hashtable的区别
1、ConcurrentHashMap:当对Map进行多线程操作时,只会锁上操作的buket;但是Hashtable在每次同步执行时都要锁住整个结构。
七、ArrayList和LinkedList有哪些区别
1、ArrayList底层使用了动态数组实现,实际上就是一个动态数组;
2、LinkedList底层通过链表实现;
3、ArrayList在随机存储上效率更高;
4、LinkedList在增删上效率更高;
5、ArrayList需要预留一些空间;
6、LinkedList的开销是必须存储节点的信息以及节点的指针信息;
八、HashSet和TreeSet有哪些区别
1、HashSet:底层通过hash算法来实现,保证了元素的唯一性;
2、TreeSet底层以红黑树来实现;保证元素唯一性是通过Comparable或者Comparator接口实现;
九、List和Set的区别
1、List是有序,可重复的链表;
2、Set是无序,且不可重复的链表;
有无序,指的是存入和取出顺序是否相同;
十、Collection和Collections有什么区别
1、collection是集合的一个顶层接口,包含了集合体系的共性;
2、collections是一个工具类,用于操作collection的方法;
网友评论