集合用来存储多个其他对象的对象,不能保存简单的类型。
集合框架结构图为:
主要分为Collection、Map和工具类。
Collection和Map的结构框架:
Collection
┣List
┃ ┣─LinkedList
┃ ┣─ArrayList
┃ ┗─Vector
┗Set
┣─HashSet
┗━TreeSet
Map
┣─HashMap
┗─TreeMap
Collection是一个集合接口,其有两个子接口,分别是List和Set。
List接口
该类集合里的元素是有序的,元素可以重复,该集合体系有索引。
List集合下有三个集合类,分别是ArrayList、LinkedList和Vector。
类 | 数据结构 | 特点 |
---|---|---|
ArrayList | 数组结构 | 查询速度很快,增删稍慢,线程不同步 |
LinkedList | 链表结构 | 增删速度很快,查询稍慢,线程不同步 |
Vector(已过时) | 数组结构 | 线程同步,效率较低 |
List的常用方法
-
增
- add(element / index,element);向集合尾部或指定位置添加元素
- addAll(Collection / index,Collection);将指定集合中的元素添加到该集合的尾部或指定位置 删
- remove(index);移除该集合指定位置的元素 改
- set(index,element);用指定元素替换指定位置的元素 查(获取)
- get(index):返回指定位置的元素
- subList(from,to);返回列表中指定位置之间的部分视图。
- listIterator();返回此列表元素的列表迭代器
- indexOf(obj):获取指定元素的第一次出现的位置。如不存在返回-1。
Set接口
该集合的元素是无序(存入和取出的顺序不一定一致),元素不可以重复,该集合没有索引。
类 | 数据结构 | 特点 | 要求 |
---|---|---|---|
HashSet | 哈希表 | 线程不同步 | 先后通过hashCode()和equal()来判断元素是否相同,可根据需要来覆盖这两个方法 |
TreeSet | 二叉树 | 线程不同步,可对元素进行排序 | 排序方式一:实现Comparable接口,重写compareTo方法。排序方式二:创建比较器,实现Comparator接口,覆盖构造方法compare方法 |
TreeSet排序的两种方式
第一种方式:让元素自身具备比较性。
元素需要实现Comparable接口,覆盖compareTo方法。也种方式也成为元素的自然顺序,或者叫做默认顺序。
第二种排序方式。
当元素自身不具备比较性时,或者具备的比较性不是所需要的。这时就需要让集合自身具备比较性。即:覆盖TreeSet构造函数里的比较方法。定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。在集合初始化时,就有了比较方式。
当两种排序都存在时,以比较器为主。定义一个类,实现Comparator接口,覆盖TreeSet类里的构造compare方法。
记住,排序时,当主要条件相同时,一定判断一下次要条件。还有,compare方法比较的结果只是等于零,小于零,或等于零。并不是1,-1,0,只有自己构造的compare为了方便自己定的是1,-1,0。
迭代器
集合的取出元素的方式。
迭代器是取出方式,会直接访问集合中的元素。所以将迭代器通过内部类的形式来进行描述。通过容器的iterator()方法获取该内部类的对象。
迭代器常用的方法
-
判断
- Boolean hasNext();如果仍有元素可以迭代,则返回 true。 取出
-
String Next();返回迭代的下一个元素。
注意:每当使用该方法,则迭代器会自动迭代。即it.next();使用后,再使用it.next();时就已经是下一个数据了。所以使用it.next();最好将其传给obj,然后对obj进行操作。
删除
- void Remove();从迭代器指向的 collection 中移除迭代器返回的最后一个元素。