概述

集合类的特点:提供一种存储空间可变的存储类型,存储的数据容量可以发生改变
集合类有很多,目前先学ArrayList

ArrayList

ArrayList:
可调整大小的数组实现
:是一种特殊的数据类型,称之为泛型
使用方法:
在出现E的地方引用数据类型替换即可
列如:ArrayList, ArrayList

ArrayListst构造方法和添加方法

ArrayList构造方法

public ArrayList():创建一个空的集合对象
image.png

ArrayList添加方法

public boolean add(E e):将指定的元素追加到此集合的末尾
public void add(int index (索引) ,E element (元素)):在此集合中的指定位置插入指定的元素

在序号为1处插入,原本的元素被挤到后面去
索引=原本元素个数==在最后一个元素后面插入新元素
索引>原本元素个数==索引越界,出现异常
eg1: image.png
eg2: image.png

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 返回集合中的元素的个数
image.png
代码实例
image.png

Collection

集合类体系结构

image.png

Collection集合概述和使用

概述

  • 是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
  • JDK 不提供此接口的任何直接实现, 它提供更具体的子接口(如Set和List)实现

创建Collection集合的对象

  • 多态的方式
  • 具体的实现类ArrayList

image.png

Collection集合的常用方法

Collection集合常用方法:
boolean add(E e):添加元素
boolean remove(Object o):从集合中移除指定的元素
void clear():清空集合中的元素
boolean contains(Object o):判断集合中是否存在指定的元素
boolean isEmpty():判断集合是否为空
int size():集合的长度,也就是集合中元素的个数
image.png

Collection集合的遍历

Iterator:迭代器,集合的专用遍历方式
image.png

  • Iterator iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到
  • 迭代器是通过集合的Iterator()方法得到的,所以说它是依赖于集合存在的

Iterator中的常用方法

  • E next():返回迭代中的下一个元素
  • boolean hasNext():如果迭代具有更多的元素,则返回true

    集合的使用步骤

    image.png

    哈希值

    image.png
    对象的哈希值特点:
    同一个对象多次调用hashCode()方法返回的哈希值是相同的
    默认情况下,不同对象的哈希值是不同的。但重写hashCode()方法,可以实现让不同的对象的哈希值相同(比如String类)
    image.png

    哈希表

    依次比较哈希值和内容,其中有一个不同就能存取进来
    image.png

    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):将指定的元素插入列表

image.png image.png
区别:

  • 迭代器不能直接用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);
}
image.png

三种遍历方式

image.png

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():从此列表中删除并返回最后一个元素
image.png

Set

HashSet

  • 此类实现Set接口,由哈希表(实际为HashMap实例)支持。对集合的迭代次序不作任何保证

image.png
image.png
image.png
需要比较内容时,需重写方法
image.png
image.png
image.png
image.png
image.png

泛型

MAP

Map集合概述和使用

Map集合概述
Interface Map K: 键的类型; V: 值的类型
将键映射到值的对象;不能包含重复的键; 每个键可以映射到最多个值
(相当于键是索引,值是内容,索引不能重复)根据键找值

创建Map集合的对象
多态的方式
具体的实现类HashMap
image.png

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() 集合的长度,也就是集合中键值对的个数
image.png

Map集合的获取功能

V get(Object key) 根据键获取值,如果此映射不包含该键的映射,返回null
default V getOrDefault(Object key,V defaultValue) 根据键获取值,如果此映射不包含该键的映射,返回defaultValue
Set keySet() 获取所有键的集合
Collection values() 获取所有值的集合
image.png

Map集合的遍历(方式1)

  • 获取所有键的集合。用keySet()方法实现
  • 遍历键的集合,获取到每一个键。用增强for实现
  • 根据键去找值。用get(Object key)方法实现

image.png

Map集合的遍历(方式2)

  • 获取所有键值对对象的集合,得到每一个键值对对象

Set> entrySet():获取所有键值对对象的集合

  • 遍历键值对对象的集合,得到每一个键值对对象

用增强for语句实现,得到每一个Map.Entry

  • 根据键值对对象获取键和值

用getKey()得到键
用getValue()得到值
image.png
练习:键是Student,值是String
image.png

Collections

CoLLections类的概述
是针对集合操作的工具类
CoLLections类的常用方法

  • public static super_T>> void_sort (List List):将指定的列表按升序排序
  • public static void reverse (List

    List):反转指定列表中元素的顺序

  • pubLic static void shuffLe (List<2> List):使用默认的随机源随机排列指定的列表