为什么使用集合:
集合存储数据时是没有长度限制的,是可以动态扩展的。集合容器因为内部的数据结构不同,有多种不同的容器对象。这些容器对象不断的向上抽取,就形成了集合框架。
1.ArrayList
特点:
- 实现了List接口
- 可以动态扩容(我们只管存,长度不够,底层会自动的扩容)
- 通过下标可以快速访问数据
- 查找快,插入删除慢
- ArrayList底层是数组,对数组做了封装
- 可以存储任意类型的数据,包括null
- 数据按照存储次序排列
- 数据可以重复
- 多线程访问时不安全
1.1ArrayList创建
ArrayList是一个类,要实现里面的功能,需要创建对象。有三种创建方式。
List和ArrayList方式性质一样,但是Collection不能实现关于下标的功能。
1.2ArrayList集合的功能
1.2.1添加操作
关键字 集合名.add();
add的四个功能:
1.2.2添加功能的实现
1.3.1 ArrayList删除功能,关键字remove:有三种方式
1.3.2 remove功能的例子
1.4.1 更改集合中的元素 关键字(get)
1.5.1 查询元素 关键字(get)
1.3 遍历集合
2.1. LinkedList 集合
特点:跟ArrayList差不多,添加元素的时候多了在头部添加元素 关键字(addFirst),在集合最后添加元素(addLast)。
3.Set接口
特点:
- Set接口是无序的
- Set接口中的数据不允许重复
- Set接口无法通过下标访问数据
- 查找慢,插入删除快(底层数据结构是哈希表和红黑树)
- Set集合使用equals()和hashCode()方法实现元素去重
3.1HashSet集合
继承了Set接口
特点:
- HashSet是Set接口的实现类
- 线程不安全
- 因为没有下标,所以没有查询功能(失去了关于下标的功能)
- 有自己排序方式(根据Hash或值得下标,有可能获得下标相同)
3.2 HashSet集合创建
有三种创建方式 两个接口变量,一个类对象
3.2.1 add添加元素
3.2.2 删除 关键字(remove)
例子
3.3HashSet遍历
遍历有两种foreach和迭代器遍历
4.1TreeSet集合
特点:元素不可重复,需要自己定义排序方式(1.对象类实现Comparable接口进行排序 2.自定义排序类实现Comparator接口进行排序)
- 有序
- 不重复
- 添加、删除、判断元素存在性效率比较高
- 线程不安全
-
1) 如果是基本数据类型和String类型,无需其它操作,可以直接进行排序。
2) 对象类型元素排序,需要实现Comparable接口,并覆盖其compareTo方法。
3) 自己定义实现了Comparator接口的排序类,并将其传给TreeSet,实现自定义的排序规则。
4.2 TreeSet集合实现
功能跟HashSet集合的功能差不多,多了一个排序方式。可以自己定义排序方式。添加对象元素时需要自己定义排序方式。