JAVA集合框架
名词解释
集合框架:为表示和操作集合而规定的一种统一的标准的体系结构。
容器类库:其实在Java2之前,Java是没有完整的集合框架的。它只有一些简单的可以自扩展的容器类,比如Vector
,Stack,Hashtable等。
自Java1.2之后Java版本统称为Java2,Java2中的容器类库才可以说是一种真正意义上的集合框架的实现
特点:
1:对象封装数据,对象多了也需要存储。集合用于存储对象(引用地址)。
2:对象的个数确定,可以使用数组来存储,如果无法知道对象的个数?
可以用集合。因为集合是可变长度的。
集合和数组的区别:
1:数组是固定长度的;集合可变长度的。
2:数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。
3:数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。
数据结构:就是容器中存储数据的方式。
对于集合容器,有很多种。因为每一个容器的自身特点不同,其实原理在于每个容器的内部数据结构不同。
集合容器在不断向上抽取过程中。出现了集合体系。集合框架
在使用一个体系时,
原则:参阅顶层内容。建立底层对象。
1. Collection
Collection接口提供了一组操作成批对象的方法
2. List
List接口对Collection进行了简单的扩充
它的具体实现类常用的有ArrayList和LinkedList。
List接口:
List本身是Collection接口的子接口,具备了Collection的所有方法。现在学习List体系特有的共性方法,查阅方法
发现List的特有方法都有索引,这是该集合最大的特点。
List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。
|--ArrayList:底层的数据结构是数组,线程不同步,ArrayList替代了Vector,查询元素的速度非常快。
|--LinkedList:底层的数据结构是链表,线程不同步,增删元素的速度非常快。
|--Vector:底层的数据结构就是数组,线程同步的,Vector无论查询和增删都巨慢。
2.1:ArrayList:一个用数组实现的List。能进行快速的随机访问,但是往列表中间插入和删除元素的时候比较慢。
2.2:LinkedList的用途
用LinkedList做一个栈
“栈(stack)”有时也被称为“后进先出”(LIFO)的容器。就是说,最后一个被“压”进栈中的东西,会第一个
“弹”出来
3. Set
Set接口也是Collection的一种扩展,Set接口取出方式只有一种:迭代器。
与List不同的是,在Set中的对象元素不能重复,也就是说你不能把同样的东西两次放入同一个Set容器中
HashSet:底层数据结构是哈希表,线程是不同步的。无序,高效;
如何保证元素唯一性?
是通过元素的两个方法,hahcode和equals来完成的。
如果元素的HashCode值相同,才会判断equals是否true
如果元素的Hashcode值不同,不会调用equals。
3.1 TreeSet:
用于对Set集合进行元素的指定顺序排序,排序需要依据元素自身具备的比较性。
如果元素不具备比较性,在运行时会发生ClassCastException异常。
所以需要元素实现Comparable接口,强制让元素具备比较性,复写compareTo方法。
依据compareTo方法的返回值,确定元素在TreeSet数据结构中的位置。
TreeSet方法保证元素唯一性的方式:就是参考比较方法的结果是否为0,如果return 0,视为两个对象重复,不存。
注意:在进行比较时,如果判断元素不唯一,比如,同姓名,同年龄,才视为同一个人。
在判断时,需要分主要条件和次要条件,当主要条件相同时,再判断次要条件,按照次要条件排序。
TreeSet集合排序有两种方式,Comparable和Comparator
区别:
1:让元素自身具备比较性,需要元素对象实现Comparable接口,覆盖compareTo方法。
2:让集合自身具备比较性,需要定义一个实现了Comparator接口的比较器,并覆盖compare方法,并将该类对象作为
实际参数传递给TreeSet集合的构造函数。
第二种方式较为灵活。
4. Map
Map是一种把键对象和值对象进行关联的容器
一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射。