集合类
概述:
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就需要对对象进行存储,那么集合就是存储 对象的最常用的一种方式
1.1使用集合类的应用场景:
一讲到集合,我们就要联想到数组;他们都能用来存储多个数据,可为什么实际开发工作中集合的应用要比数组多的多呢?
这是因为数组的长度一旦确定就不可以改变,而实际的开发工作中往往又无法确定数据数量,因此大家就都使用集合了。
1.2 集合框架中的接口结构:
分别有两大接口,Collection和Map。Collection接口Set和List接口;他们的常用实现类有Arraylist和linkedlist;HashSet和TreeSet。Map接口主要的两个实现类分别为HashMap和TreeMap。
(注:不止只有这些接口,它们还有很多接口,只是不常用。)
1.3Collection接口的特点:
a、实现Collection接口的类都必须提供2个标准的构造函数;一个是无参的构造函数用于创建一个空的Collection;另一个数 用于创建一个新的Collection。
b、每个Collection接口都支持一个Iterator()方法用于遍历Collection里面的元素。
1.4 常用集合类之间的区别:
List:集合中允许重复元素,List集合中元素是有序的
LinkedList特点:底层数据结构是链表,查询慢,增删快;线程不安全。
ArrayList特点:底层数据结构是数组,查询快,增删慢;线程不安全。
Vector特点:底层数据结构是数组,查询快,增删慢;线程安全。
Set:集合中不允许重复元素,List集合中元素不是有序的,但TreeSet是有序
HashSet:无序;不可重复;非线程安全的;集合元素允许为 NULL;如果两个对象通过 equals() 方法返回 true,这两个对象的 hashCode 值不一定相同。(解决办法:重写equals方法时请必须重写hashcode,以保证equals方法相等时两个对象hashcode返回相同的值)。
TreeSet:有序;不可重复;非线程安全,底层使用红黑树算法。
map:
HashMap:key不允许重复,value允许;不保证添加先后顺序,非线程安全, key、value都可以为null;
HashTable:线程安全,key、value都不允许为null;
TreeMap:key不允许重复,value允许重复,会按自然或定制顺序排序