一、集合的由来?
我们学习Java,可以操作很多对象 ,存储 的容器有数组和StringBuffer,StringBuilder;
而数组的长度固定,所以不适合做变化的需求,Java就提供了集合供我们使用。
二、集合和数组的区别?
A:长度区别
数组固定
集合可变
B:内容区别
数组可以是基本类型,也可以是引用类型
集合只能是引用类型
C:元素内容
数组只能存储同一种类型
集合可以存储不同类型(其实集合一般存储的也是同一种类型)
三、集合的继承体系结构?
由于需求不同,Java就提供了不同的集合类。这多个集合类的数据结构不同,但是它们都是要提供存储和遍历功能的,
我们把它们的共性不断的向上提取,最终就形成了集合的继承体系结构图。
在学习集合类时,我们重点关注四个要点:
1、是否允许为null
2、是否有序(有序:指插入元素时,保持插入的顺序性,也就是先插入的元素优先放入集合的前面部分。 )
3、是否唯一,即是否允许相同数据
4、在多线程下是否安全
四、Collection的功能概述
Collection sc=new Collection();//错误,因为接口不能不能实例化;
Collection sc=new ArrayList();//正确做法;
A:添加功能 boolean add(E e);
B:删除功能 void clear();
C:判断功能 boolean isEmpty();
D:获取功能 boolean retainAll(Collection c);假设有两个集合AB,A对B做交集,最终的结果保存在A,B不变;
返回值表示的是A是否发生改变;
E:长度功能 int size();
F:交 boolean containsAll(Collection c);
G:把集合转数组(了解)Object[] toArray();
五、List的子类特点
ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
(1)List的子类特点
ArrayList:
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
Vector:
底层数据结构是数组,查询快,增删慢
线程安全,效率低
LinkedList:
底层数据结构是链表,查询慢,增删快
线程不安全,效率高
(2)ArrayList
A:没有特有功能需要学习
(3)Vector
A:有特有功能
a:添加
public void addElement(E obj) -- add()
b:获取
public E elementAt(int index) -- get()
public Enumeration<E> elements() -- iterator()
(4)LinkedList
A:有特有功能
a:添加
addFirst()
addLast()
b:删除
removeFirst()
removeLast()
c:获取
getFirst()
getLast()
六、Set 无序,唯一
LinkedHashSet类概述
1、元素有序唯一
2、由链表保证元素有序
3、由哈希表保证元素唯一
HashSet类概述
1、不保证 set 的迭代顺序
2、特别是它不保证该顺序恒久不变。
TreeSet类概述
1、使用元素的自然顺序对元素进行排序
2、或者根据创建 set 时提供的 Comparator 进行排序
3、具体取决于使用的构造方法。
TreeSet是如何保证元素的排序和唯一性的
底层数据结构是红黑树(红黑树是一种自平衡的二叉树)
七、Map
TreeMap
TreeMap实现SortedMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。
TreeMap基于红黑树(Red-Black tree)实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
Hashtable
Hashtable与HashMap类似,Hashtable继承自Dictionary类,实现了Map接口,不同的是它不允许记录的键或者值为空;
和HashMap相比,Hashtable是线程同步的,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。
而且Hashtable可以通过Enumeration去遍历。
LinkedHashMap
LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。也可以在构造时用带参数,按照应用次数排序。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。