概述
集合类的特点:提供一种存储空间可变的存储类型,存储的数据容量可以发生改变
集合类有很多,目前先学ArrayList
ArrayList
ArrayList
可调整大小的数组实现
使用方法:
在出现E的地方引用数据类型替换即可
列如:ArrayList
ArrayListst构造方法和添加方法
ArrayList构造方法
ArrayList添加方法
public boolean add(E e):将指定的元素追加到此集合的末尾
public void add(int index (索引) ,E element (元素)):在此集合中的指定位置插入指定的元素
在序号为1处插入,原本的元素被挤到后面去
索引=原本元素个数==在最后一个元素后面插入新元素
索引>原本元素个数==索引越界,出现异常
eg1:
eg2:
ArrayList常用方法
public boolean remove(Object o) 删除指定的元素,返回删除是否成功
public E remove(int index) 删除指定索引处的元素,返回被删除的元素
public E set(int index,Eelement) 修改指定索引处的元素,返回被修改的元素
public E get(int index) 返回指定索引处的元素
public int size0 返回集合中的元素的个数
代码实例
Collection
集合类体系结构
Collection集合概述和使用
概述
- 是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
- JDK 不提供此接口的任何直接实现, 它提供更具体的子接口(如Set和List)实现
创建Collection集合的对象
- 多态的方式
- 具体的实现类ArrayList
Collection集合的常用方法
Collection集合常用方法:
boolean add(E e):添加元素
boolean remove(Object o):从集合中移除指定的元素
void clear():清空集合中的元素
boolean contains(Object o):判断集合中是否存在指定的元素
boolean isEmpty():判断集合是否为空
int size():集合的长度,也就是集合中元素的个数
Collection集合的遍历
Iterator:迭代器,集合的专用遍历方式
- Iterator
iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到 - 迭代器是通过集合的Iterator()方法得到的,所以说它是依赖于集合存在的
Iterator中的常用方法
- E next():返回迭代中的下一个元素
boolean hasNext():如果迭代具有更多的元素,则返回true
集合的使用步骤
哈希值
对象的哈希值特点:
同一个对象多次调用hashCode()方法返回的哈希值是相同的
默认情况下,不同对象的哈希值是不同的。但重写hashCode()方法,可以实现让不同的对象的哈希值相同(比如String类)
哈希表
List
List集合概述和特点
List集合概述
有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素
- 与Set集合不同,列表通常允许重复的元素
List集合的特点
- 有序:存储和去除的元素顺序一致
- 可重复:存储的元素可以重复
并发修改异常
并发修改异常 ConcurrentModificationException
产生原因
迭代器遍历的过程中,通过集合对象修改了集合中元素的长度,造成了迭代器获取元素中判断预期修改值和实际修改值不一致
解决方案
用fou循环遍历,然后用集合对象做对应的操作即可
Listlterator:列表迭代器
Listlterator:列表迭代器
- 通过List集合的listlterator()方法得到,所以说它是List集合特有的迭代器
- 用于允许程序员沿任一方向遍历列表的列表送代器,在送代期间修改列表,并获取列表中迭代器的当前位置
Listlterator中的常用方法
- E next():返回迭代中的下一个元素
- boolean hasNext():如果迭代具有更多元素,则返回 true
- E previous():返回列表中的上一个元素
- boolean hasPrevious():如果此列表迭代器在相反方向遍历列表时具有更多元素,则返回 true
- void add(E e):将指定的元素插入列表
区别:
- 迭代器不能直接用add添加元素(迭代器遍历的过程中,通过集合对象修改了集合中元素的长度,造成了迭代器获取元素中判断预期修改值和实际修改值不一致),添加元素要用for循环遍历
- 列表迭代器则可以(列表迭代器遍历的过程中,预期修改值和实际修改值一直相等)
增强for循环
增强for
作用:简化数组和Collection集合的遍历
- 实现Iterable接口的类允许其对象成为增强型for语句的目标
它是JDK5之后出现的,其内部原理是一个Iterator迭代器
增强for的格式
格式:
for(元素数据类型 变量名:数组或者Collection集合){
//在此处使用变量即可,该变量就是元素
}
- 范例:
int[] arr = {1,2,3,4,5};
for(int i : arr) {
System.out.println(i);
}
三种遍历方式
List集合子类特点
List集合常用子类:ArrayList, LinkedList
- ArrayList:底层数据结构是数组, 查询快, 增删慢
- LinkedList:底层数据结构是链表,查询慢,增删快
LinkedList集合的特有功能
LinkedList集合的特有功能:
public void addFirst(E e):在该列表开头插入指定的元素
public void addLast(E e):将指定的元素追加到此列表的末尾
pubLic E getFirst():返回此列表中的第一个元素
public E getLast():返回此列表中的最后一个元素
public E removeFirst():从此列表中删除并返回第一个元素
public E removeLast():从此列表中删除并返回最后一个元素
Set
HashSet
- 此类实现Set接口,由哈希表(实际为HashMap实例)支持。对集合的迭代次序不作任何保证
泛型
MAP
Map集合概述和使用
Map集合概述
Interface Map
将键映射到值的对象;不能包含重复的键; 每个键可以映射到最多个值
(相当于键是索引,值是内容,索引不能重复)根据键找值
MAP基本功能
V put(K key,V value) 添加元素
V remove(Object key) 根据键删除键值对元素
void clear0 移除所有的键值对元素
boolean containsKey(Object key) 判断集合是否包含指定的键
boolean containsValue(Object value) 判断集合是否包含指定的值
boolean isEmpty0 判断集合是否为空
int size() 集合的长度,也就是集合中键值对的个数
Map集合的获取功能
V get(Object key) 根据键获取值,如果此映射不包含该键的映射,返回null
default V getOrDefault(Object key,V defaultValue) 根据键获取值,如果此映射不包含该键的映射,返回defaultValue
Set
Collection
Map集合的遍历(方式1)
- 获取所有键的集合。用keySet()方法实现
- 遍历键的集合,获取到每一个键。用增强for实现
- 根据键去找值。用get(Object key)方法实现
Map集合的遍历(方式2)
- 获取所有键值对对象的集合,得到每一个键值对对象
Set
- 遍历键值对对象的集合,得到每一个键值对对象
用增强for语句实现,得到每一个Map.Entry
- 根据键值对对象获取键和值
用getKey()得到键
用getValue()得到值
练习:键是Student,值是String
Collections
CoLLections类的概述
是针对集合操作的工具类
CoLLections类的常用方法
- public static
super_T>> void_sort (List List):将指定的列表按升序排序 - public static void reverse (List
List):反转指定列表中元素的顺序
- pubLic static void shuffLe (List<2> List):使用默认的随机源随机排列指定的列表