集合类主要是负责保存、盛装其他数据和引用类型的对象。根接口是collection和map。主要意义是减少编 程工作增加编程速度和质量,减少学习和应用新API的工作,减少设计新API的工作和促进软件的重用。
集合类主要有三种:list、set和map。
list里的元素是有序、可重复的。其中list的实现类有:arraylist、linkedlist和vector。
arraylist的存储结构是数组,默认初始容量是16,扩充大小是原始容量的1.5+1,随机访问比linkedlist效率高。
linkedlist的存储结构是链表,默认初始容量是10,添加、插入和删除比arraylist效率高,查询时从表头开始。
vector是向量,是线程安全的。
Set里的元素是无序、不重复的,set的实现类有:hashset、treeset。hashset是按hash算法来存储元素,因此具有很好的存储哈查询功能。treeset是以二叉树来存储元素的,默认的是升序排序。
Map的存储结构是键值对(Key-Value)的形式进行存储的,Key值唯一。它的实现类有hashmap、treemap和hashtable。
Hashmap允许元素可以是null,而Hashtable则不允许。但hashtable是线程安全的。而treemap是按键升序排列的,key就是treeset,value对应每个key。
Iterator和for each都可以遍历集合。Iterator只能单向遍历,而单独为list创建的linkedIterator可以双向遍历。
Collections和Arrays都是辅助工具类,arrays包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。Collections、主要提供了在collection上进行操作的静态方法.
面试中关于集合的问题:
1.collections和collection有什么区别?
2.list和set的区别?
3.arraylist和linkedlist的区别?
4.hashmap和hashtable的区别?
5.排序有哪些方法?
排序:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序)