在Java中,有一个叫集合的家伙,它是用来存储数据的。集合不是一个具体的接口和类,而是一组接口和实现类。
本文主要讲述的是Collection接口以及该接口下的实现类。
先来看一下Collection的框架体系结构:
不难看出,Collection接口有两个儿子,五个儿子的儿子。
一、Collection接口
Collection接口的定义:
public interface Collection<E> extends Iterable<E>
该接口支持泛型,继承了Iterable接口,说明了我们可以使用加强for循环来遍历集合中的元素对象。
Collection是一个用于存储数据容器,既然是容器,那么基本上都会具备增删改查的功能。
Collection接口的常用方法:
返回值类型 | 方法 | 功能描述 |
---|---|---|
boolean | add(E e) | 向集合中添加一个元素 |
int | size() | 返回集合中的元素个数 |
boolean | remove(Object o) | 删除集合中的一个对象 |
void | clear() | 删除集合中的全部对象 |
… | … | … |
二、List接口
List接口用于存储一组有序且不唯一的元素对象。
List接口的定义:
public interface List<E> extends Collection<E>
List接口继承Collection接口,也支持泛型。
List接口的常用方法:
返回值类型 | 方法 | 功能描述 |
---|---|---|
void | add(int index,E element) | 添加一个元素到指定位置 |
E | remove(int index) | 删除指定位置上的元素 |
E | set(int index,E element) | 用指定的元素替换集合中指定位置上的元素 |
E | get(int index) | 获取指定位置上的元素 |
… | … | … |
三、List接口的实现类
1、ArrayList类
ArrayList类底层采用的数据结构是数组,允许添加重复的元素,添加的元素是有序的。
线程不同步,在多线程同时访问时,可以提高访问的效率,但会降低访问的安全性。
优点: 遍历元素和随机访问元素的效率比较高
缺点: 添加、删除元素的效率比较低(添加或删除元素需要前后移动元素的位置)
2、Vector类
Vector类底层采用的数据结构是数组,允许添加重复的元素,添加的元素是有序的。
线程同步,当多线程同时访问时,会降低访问的效率,但会提高访问的安全性。
Vector类的底层原理是数组,所以优缺点和ArrayList类是一样的。
3、LinkedList类
LinkedList类底层采用的数据结构是链表,存储的元素可以重复,而且是按添加顺序进行存储的。
优点: 插入和删除元素的效率比较高。
LinkedList类的常用方法:
返回值类型 | 方法 | 功能描述 |
---|---|---|
void | addFirst(E e) | 在列表的开头插入指定元素 |
void | addLast(E e) | 在列表的末尾插入指定元素 |
E | getLast() | 获取列表的最后一个元素 |
E | getFirst() | 获取列表的第一个元素 |
E | removeFirst() | 删除列表的第一个元素 |
E | removeLast() | 删除列表的最后一个元素 |
… | … | … |
四、Set接口
Set接口用于存储一组唯一的元素对象。
Set接口的定义:
public interface Set<E> extends Collection<E>
Set接口继承Collection接口,也支持泛型。所以Collection接口中的方法Set接口都能用。
五、Set接口的实现类
1、HashSet类
HashSet类存储的对象是无序且唯一的,底层数据结构采用的是散列表。
HashSet类的定义:
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
HashSet类实现了Set接口,Set接口又继承继承Collection接口,所以Collection接口中的方法HashSet可以直接用。
2、TreeSet类
TreeSet类存储的对象是有序且唯一的,底层数据结构是红黑树。
优点: 按照升序排序,查询速度比List快
缺点: 按照内容查询,查询速度没有HashSet快
TreeSet类的定义:
public class TreeSet<E> extends AbstractSet<E>
implements NavigableSet<E>, Cloneable, java.io.Serializable
因为Set接口没有拓展自己的独立方法,所以Collection接口的方法TreeSet都适用。
六、总结
以上是我分享给大家的关于Collection集合的一些总结。如果觉得还不错的话,就送我一个赞吧!如果本文对你有用的话,也欢迎收藏哦!