可能大家也会知道那些事Java基础中的重点,不错,你才得没错,重点的部分也是面试中的重点:
下面的就是集合框架的知识点
一.集合的作用:
1.我们之前存储大量数据,可以使用数组:
数组的弊端:
1).要先期指定长度;
2).一旦指定长度,其长度不能改变;
2.Java为我们提供了大量的"集合类",供我们程序员使用;
3.这些"集合类"内部使用了不同的"数据结构"来存储对象;
它们有些:查询快;增删慢;
有些:查询慢;增删快;
有些:查询快;增删快;但是无序的;
要根据我们的需要选择不同的集合类;
二.集合框架的层次结构:
Collection(顶层接口):
|--List(接口):
|--ArrayList(类):数组实现;线程不安全的,效率高;
|--Vector(类):数组实现;线程安全的,效率低;
|--LinkedList(类):链表实现;线程不安全的,效率高;
|--Set(接口):
|--HashSet(类):哈希表;无序的;线程不安全的,效率高;
|--TreeSet(类): 红黑树;排序的;线程不安全的,效率高;
比较的两种方式:
1.存储的对象要实现:Comparable接口,重写compareTo()方法;
2.使用"比较器"实例化TreeSet:Comparator接口,重写compare()方法;
|--LinkedHashSet(类):链表,哈希表;由链表保证有序,由哈希保证唯一。线程不安全的,效率高;
Map(顶层接口):
|--HashMap(类);哈希表实现的图:无序的。线程不安全的,效率高;
|--LinkedHashMap(类):链表哈希表实现;有序的。线程不安全的。
|--TreeMap(类):红黑树实现;排序的(基于自然排序或比较器)。线程不安全的。
|--Hashtable(类):哈希表实现;无序的。线程安全的,效率低;
三.数据结构:
1.数组:随机获取元素快;增、删慢;
2.链表:查找慢;增、删快;
3.哈希表:结合了数组和链表的优点,查找、增、删都很快;
4.树:对元素排序的。
四.各种集合的遍历方式:
使用多态时:
Collection:
|--toArray():获取一个Object数组,然后再遍历数组;
|--iterator()迭代器:Iterator it = col.iterator();
while(it.hasNext()){
Object obj = it.next();
}
|--增强for
List:
|--Collection的所有方式;
|--结合Collection的size()和List的get()方法,使用for()循环;
Set:
|--Collection的所有方式;
Map:
|--获取所有键的集合keySet(),之后再遍历Set(使用Collection的方式)
|--获取所有"键值对"对象entrySet(),之后遍历Set(使用Collection的方式)
五.怎么选择哪种集合:
根据需要:
是否需要"键值对"的形式:
是:Map
是否需要"有序":
是:LinkeHashMap
否:HashMap
如果需要"排序":
是:TreeMap
否:Collection:
是否"有序","允许重复":
是:List
对元素内容,经常的查询,但很少的增、删:选择数组;
对元素内容,经常的增删,很少获取元素:选择链表;
否:Set
是否需要排序:
是:TreeSet
否:HashSet
对于三种集合,常用:ArrayList,HashSet,HashMap |
|