Java—集合
概述
Java中的集合就像是一个容器,专门用来存储Java对象(实际上是对象的引用,但习惯于成为对象),这些对象可以是任意的数据类型,并且长度可变。其中,这些集合都位于java.util包中,在使用时一定要注意导包的问题,否则会出现异常。
集合按照其存储结构可以分为两大类:单列集合Collection和双列集合Map
Collection
单列集合的根接口,用于存储一系列符合某种规则的元素
Collection接口的主要方法
方法声明 | 功能描述 |
---|---|
boolean add(Object o) | 向集合中添加一个元素 |
boolean addAll(Collection c) | 将指定集合c中的所有元素添加到该集合中 |
void clear() | 删除该集合中的所有元素 |
boolean remove(Object o) | 删除该集合中指定的元素 |
boolean removeAll(Collection c) | 删除该集合中包含指定集合c中的所有元素 |
boolean isEmpty() | 判断该集合是否为空 |
boolean contains(Object o) | 判断该集合是否包含某个元素 |
boolean containsAll(Collection c) | 判断该集合中包含指定集合c中的所有元素 |
Iterator iterator() | 返回在该集合的元素上进行迭代的迭代器(Iterator),用于遍历该集合所有元素 |
int size() | 获取该集合元素个数 |
Stream stream() | 将集合源转换为有序元素的流对象 |
子接口List
- 元素有序(元素的存入顺序和取出顺序一致)、可重复
- 主要实现类:ArrayList和LinkedList
List作为Collection集合的子接口,不但继承了Collection接口中的全部方法,而且还增加了一些操作集合的特有方法
List集合常用方法
方法声明 | 功能描述 |
---|---|
void add(int index,Object element) | 将元素element插入在集合List集合的指定索引位置 |
boolean addAll(int index,Collection c) | 将集合c包含的所有元素插入到List集合的指定索引位置 |
Object get(int index) | 返回集合索引index处的元素 |
Object remove(int index) | 删除索引index处的元素 |
Object set(int index,Object element) | 将索引index处的元素替换成element元素,并将替换后的元素返回 |
int indexOf(Object o) | 返回对象o在List集合首次出现的索引位置 |
int lastindexOf(Object o) | 返回对象o在List集合最后一次出现的索引位置 |
List subList(int fromIndex,int toIndex) | 返回从索引fromIndex(包括)到索引toIndex(不包括)处所有元素组成的子集合 |
Object[] toArray() | 将集合元素转换为数组 |
default void sort(Comparator<? super E> c) | 根据指定的比较器规则对集合元素排序 |
ArrayList
- 在ArrayList内部封装了一个长度可变的数组对象,当存入的元素超过数组的长度时,ArrayList会在内存中分配一个更大的数组来存储这些元素,因此可将ArrayList集合看作是一长度可变的数组。
- 由于ArrayList内部的数据结构形式是数组形式,在增加或删除指定位置的元素时,会创建新的数组,效率比较低,因此不适合做大量的增删操作。
- 数组结构允许程序通过索引的方式来访问元素,因此使用ArrayList集合在遍历和查找元素时显得非常有效。
LinkedList
ArrayList 集合在查询元素时速度很快,但在增删元素时效率较低。为了克服这种局性,可以使用List接口的另一个实现类LinkedList。该集合内部包含有两个 Node类型first和last属性维护一个双向循环链表,链表中的每一个元素都使用引用的方式来记的前一个元素和后一个元素,从而可以将所有的元素彼此连接起来。当插入一个新元素只需要修改元素之间的这种引用关系即可,删除一个节点也是如此。正因为这样的存构,所以LinkedList集合对于元素的增删操作表现出很高的效率。
子接口Set
- 元素无序、不可重复
- 主要实现类:HashSet和TreeSet
HashSet
- 根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能
- 当向HashSet集合中添加一个元素时,首先会调用hashCode()方法来确定元素的存储位置,任何再调用对象的equals()方法来确保该位置没有重复元素。
TreeSet
它内部采用平衡二叉树来存储元素,这样的结构可以保证TreeSet集合没有重复的元素,并且可以对元素进行排序。