Java基础 Day18

发布于:2025-05-23 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、集合的分类

1、单列集合

一次添加一个元素,实现了 Collection 接口

(1)List 接口的实现类

存取有序、有索引、可以存储重复的

(2)Set 接口的实现类

存取无序、没有索引、不可以存储重复的

2、双列集合

一次添加一对元素,实现了 Map 接口

二、Collection 接口的使用

public boolean add (E e)

把给定的对象添加到当前集合中

public void clear ()

清除集合中的所有元素

public boolean remove (E e)

把给定的对象在集合中删除

public boolean contains (Object obj)

判断当前集合中是否存在给定的对象

public boolean isEmpty ()

判断当前集合是否为空

public int size ()

返回当前集合的元素个数 / 集合长度

Tips:remove 和 contains 方法依赖 E 类的 equals 方法

如果集合里装的是自定义类的对象,注意是否重写了 equals 方法

三、集合的通用遍历方式

1、迭代器遍历

Collection<Student> stu = new ArrayList<Student>();
stu.add(new Student("aaa",21));
stu.add(new Student("bbb",22));
stu.add(new Student("ccc",23));

// 获取迭代器对象
Iterator<Student> it = stu.iterator();
// 进行遍历
while (it.hasNext()) {
    System.out.println(it.next());
}

Tips:next 方法会将元素取出,并将指针后移一位

2、增强for循环(JDK5)

for (Student s : stu) {
    System.out.println(s);
}

增强for循环的底层也是迭代器

3、forEach 方法

// 匿名内部类
stu.forEach(new Consumer<Student>() {
    @Override
    public void accept(Student student) {
        System.out.println(student);
    }
});
// Lambda 表达式
stu.forEach(student -> System.out.println(student));

forEach方法的底层也是迭代器

四、List 接口

1、特点

存取有序、有索引、可以存储重复的

2、和索引相关的方法

void add(int index,E element)

在此集合中的指定位置插入指定的元素

remove(int index)

删除指定索引处的元素,返回被删除的元素

set(int index,E element)

修改指定索引处的元素,返回被修改的元素

get(int index)

返回指定索引处的元素

如果存储类型是整数,如果想传入元素进行 remove,需要手动装箱

List 还可以用普通for循环或者ListIterator(List特有的迭代器)进行遍历

3、并发修改异常

ConcurrentModificationException

使用迭代器遍历集合的过程中,调用了集合对象添加或删除方法,就会出现此异常

解决方法:调用迭代器的添加或删除方法

普通的迭代器有删除方法但没有添加方法

List特有的迭代器有添加方法

五、ArrayList 类

ArrayList 底层是数组,查询相对快,增删相对慢

如果初始添加了元素,那么初始长度为10

如果初始没有添加元素,那么初始长度为0

当数组满了之后,自动扩容为1.5倍

六、LinkedList 类

LinkedList 底层是双向链表,增删相对快,查询相对慢

增删首尾元素非常快

LinkedList 也有 get 方法,表面看起来是根据索引获取值

其底层会判断离头部近还是离尾部近,然后一个个找