- 定义:用于存放对象的引用的容器。
- 分类:Set(列),List(集),Map(映射)。
- 与数组的区别:(1)数组在定义的时候需声明长度,集合的长度可动态增长;(2)数组只能存放基本数据类型,也可存放引用数据类型,集合只能存放引用数据类型;(3)数组存放的元素必须为同一数据类型,集合存放的对象可不为同一数据类型。
- Collection接口:Set接口(HashSet(数组+链表(红黑树),线程安全),LinkedHashSet(Hash表+链表),TreeSet(红黑树)..)和List接口(ArrayList(数组结构,非线程安全性),LinkedList(链表,非线程安全),Stack(栈,线程安全),Vector(线程安全)...)
- Map接口:HashMap,Hashtable,TreeMap,ConcurrentHashMap,Properties....
- List,Set,Map三者区别?(1)List(有序,可重复,可插入多个null),Set(无序,唯一,只可放入一个null),Map(双列集合,Key无序且唯一)。
- TreeSet(),TreeMap(有序,唯一)
- HashMap:底层数组+链表,初始容量为16,加载因子为0.75,当链表长度达到8,且数组长度达64,链表变红黑二叉树
- 集合的快速失败机制fail-fast:java集合的一种错误检测机制,当多个线程对集合进行结构上的改变操作事,可能会触发。解决方式:遍历过程中对操作共享变量的代码块加锁;拷贝性复制。
- 迭代器iterator:Collection接口的实现,用于遍历任何Collection的接口,hasnext()判断是否还有对象,只能单向遍历,更加安全,边遍历编修改,用迭代器的remove()。
- Collection接口的子类遍历方式:(1)for循环遍历;(2)迭代器遍历;(3)foreach遍历(内部用到迭代器的方式,不能在遍历过程中,对集合进行操作)
- 数组和list的转换:(1)数组转List:Arrays.asList(array);(2)list转数组:List.toArray()
- Arraylist和Linkedlist区别:(1)数据结构实现:ArrayList采用动态数组,Linkedlist采用双向链表;(2)随机访问效率:ArrayList效率高于LinkedList;(3)增加和删除效率:在非首尾的增删效率Linked List高于Array List;(4)内存利用率:ArrayList的内存空间利用率高于LinkedList,因为LinkedList需存储一个前驱和一个后驱引用。
- ArrayList和Vector区别:(1)线程安全性:Vector使用Synchornize加锁实现线程同步,而ArrayList是非线程安全的;(2)扩容:Vector每次的扩容量是ArrayList的2倍
- HashSet和HashMap区别:(1)实现接口:HashSet实现Set接口,HashMap实现Map接口;(2)储存:HashSet储存对象,HashMap储存键值对;(3)添加元素:hashset调用add()方法,hashmap调用put()方法(4)hashcode:hashSet利用对象计算哈希值,hashmap利用key计算哈希值;(5)性能:hahsmap较高于hashset
|