集合基本知识

Java中,如果一个Java对象可以在内部持有若干其他Java对象,并对外提供访问接口,我们把这种Java对象称为集合,故Java的数组也可以看作是一种集合。集合的原因有两个:一、数组初始化后大小不可变;二、数组只能按索引顺序存取

 

集合总体框架

Java 集合框架为不同类型的集合定义了大量接口,集合有两个基本接口:Collection 和 Map。

Collection

Java标准库自带的java.util包提供了集合类:Collection,它是除Map外所有其他集合类的根接口。Java实现的集合类主要有两个特点,一是实现了接口和实现类相分离,例如,有序表的接口是List,具体的实现类有ArrayList,LinkedList等,二是支持泛型,我们可以限制在一个集合中只能放入同一种数据类型的元素,最后,Java访问集合总是通过迭代器(Iterator)来实现,它最明显的好处在于无需知道集合内部元素是按什么方式存储的。Java的java.util包主要提供了以下三种类型的集合:

 

List:一种有序列表的集合

Set:一种保证没有重复元素的集合

Map:一种通过键值(key-value)查找的映射表集合

此外,由于历史原因,有小部分集合已经不推荐使用了,但是又不能直接从包中删除,因为可能会影响别的基础包,例如:

 

Hashtable:一种线程安全的Map实现;

Vector:一种线程安全的List实现;

Stack:基于Vector实现的LIFO的栈;

为什么不推荐使用呢,线程安全但是性能不佳,重点是这是最初的实现,现在已被java.util.concurrent包里的集合代替了,还有不推荐使用的接口Enumeration<E>:已被Iterator取代,还有一个小细节:链表与泛型集合之间有一个重要的区别,链表是一个有序集合(ordered collection), 每个对象的位置十分重要。

 

List

在集合类中,List是最基础的一种集合:它是一种有序列表。List的行为和数组几乎完全相同,放入元素的先后顺序存放,每个元素都可以通过索引确定自己的位置,List的索引和数组一样,从0开始。也正是因为这些特性,所以List集合也是用的最多的集合;主要接口有:

 

在末尾添加一个元素:void add(E e)

在指定索引添加一个元素:void add(int index, E e)

删除指定索引的元素:int remove(int index)

删除某个元素:int remove(Object e)

获取指定索引的元素:E get(int index)

获取链表大小(包含元素的个数):int size()

List接口有两种实现,一种通过数组实现的ArrayLIst,还有一种是通过链表实现的LinkedList,主要区别是:

 

通常选用ArrayList集合,需要经常查找可用ArrayList集合,经常增删就用LinkedList集合

 

List的特点

List接口允许我们添加重复的元素

允许添加null

List的遍历

我们可以用用for循环根据索引配合get(int)方法遍历,但是不推荐这么使用,原因有两个,一是代码复杂,二是因为get(int)方法只有ArrayList的实现是高效的,换成LinkedList后,索引越大,访问速度越慢。所以,遍历List集合一定要用迭代器Iterator!

 

欢迎大家批评指正,指出问题,谢谢!

posted @ 2021-10-11 22:32  光明^^龙  阅读(130)  评论(0编辑  收藏  举报