一、介绍集合框架List和Set
- List和Set都是接口:我们主要用接口下面实现类
二、List接口(是java.util中的类)( 凡是Iterable的实现类 都能使用增强for遍历)
- 普通for循环
1、实现类:[ArrayList]
- 内部基于数组实现的一个集合类。查询比较快,添加和删除相对比较慢
- 不是同步的(存在线程安全问题)
1.1、基本使用
- 构造方法
| 构造方法 | 描述 |
|---|---|
| ArrayList() | 构造一个初始容量为十的空列表。 |
| ArrayList(int initialCapacity) | 构造具有指定初始容量的空列表。 |
| ArrayList(Collection c) | 构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。 |
- 主要使用方法
| 方法名 | 描述 |
|---|---|
| boolean add(E e) | 增加数据 |
| void clear() | 清除所有元素 |
| boolean contains(Object o) | 如果此列表包含指定的元素,则返回 true |
| E get(int index) | 返回指定位置的元素 |
| E remove(int index) | 删除指定位置的元素 |
| int size() | 返回列表中的元素数 |
1.2、集合的遍历
配合一个方法get 通过索引取值
for(int i=0;i<对象名.size();i++){
System.out.println(对象名.get(i));
}
- 增强for循环
- 迭代器(Iterator)
以正确的顺序返回该列表中的元素的迭代器。 [实际上是实现的Iterable接口里面的方法]
Iterator 单向的迭代器接口,从左到右依次获得数据,判断是否有下一个;获得下一个
| 方法 | 描述 |
|---|---|
| boolean hasNext(); | 判断是否有下一个 如果有返回true |
| E next(); | 返回下一个元素 |
| void remove() | 移除下一个元素 |
2、实现类[LinkedList]
2.1、介绍
- 内部是基于链表结构实现的,插入和删除比较快,查询相对ArrayList比较慢
- 可以充当队列,堆栈
- 不是线程安全的(同步的 )
2.2、基本使用和数组遍历和ArrayList一样
3、 ArrayList和LinkedList的区别
- ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
- 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
- 对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。 这一点要看实际情况的。若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。
三、set接口
无序不重复的集合-->数据的添加顺序
1、HashSet实现类
是无序的集合,储存的内容不存在排序的说法
1.1、构造方法
HashSet (Java Platform SE 8 )
-
-
HashSet()
-
1.2、常用方法(没有get根据索引位置取值的方法,其他都一样)
1.3、遍历(没有普通for循环)
- 增强for
- 迭代器
1.4、如何判断重复的
- 通过添加进去元素的hashCode和equals作为判断数据是否重复的标准(必须要在自定义的类中覆写hashCode和equals)
- 如果两个对象的hashCode相等,并且两个对象调用equals结果为true才确定两个元素重复
判断重复的标准(要用必须覆写Hasret和HashCode)
Hasret和HashCode值相等才重复
2、TreeSet
存储的数据和添加的顺序和添加到顺序不一致【无序】,TreeSet里面存储的内容是有序的
2.1、 注意
不能添加两种类型的输入值,只能对同种类型的数据进行比较排序
添加其他数据就会报错
2.2、遍历方式
- 增强for循环
- 迭代器 set.iterator
2.3、 排序的依据
2.3.1、自然排序:
TreeSet存储的元素必须实现Comparable接口,并且覆写compareTo方法 通过方法的返回值决定 数据是否重复、正序 、倒序
2.3.2、定制排序:
- 自己创建实现类的时候是采用比较器
Comparetor接口,覆写compare方法,得有进行比较的方法,compare(Object o1,Object o2) - 在创建TreeSet对象的时候传入排序的规则,
- 排序的规则:其实就是一个对象
- 构造方法:
2.4判断重复的标准
1、如果采用的是自然排序调用对象的compareTo方法,如果返回0 表示相等;
大于且返回正数,升序排列 => 小于且返回负数,升序排列 对应
大于且返回负数,降序排列 => 小于且返回正数,降序排列 对应
2、如果使用的定制排序(比较器),调用比较器的方法compare 返回0 表示相等;
大于且返回正数,升序排列 => 小于且返回负数,升序排列 对应
大于且返回负数,降序排列 => 小于且返回正数,降序排列 对应