Java集合01

概述

面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,java就提供了集合类

数组和集合类的区别

两者同是容器,数组虽然也可以存储对象,但长度是固定的呃;集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象

特点

集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象

Collection接口

概述

Collection层次结构中的根接口。Collection表示一组对象,这些对象也成为collection的元素。一些collection允许有重复的元素,而另一些则不允许。一些collection是有序的,而另一些则是无序的

成员方法

boolean add(E e) 添加一个元素

boolean remove(Object o) 从该集合中删除指定元素的单个实例

void clear() 删除集合中所有的元素

boolean isEmpty() 检查集合是否为空

int size() 返回集合长度

Iterator iterator(); 返回一个迭代器(集合专用的遍历方式)

boolean contains(Object o) 检查集合是否包含指定元素

Object[] toArray() 把集合转成数组,可以实现集合的遍历

boolean addAll(Collection c) 添加一个集合元素

boolean removeAll(Collection c) 删除一个集合中包含的小集合中所有元素

boolean containAll(Collection c) 判断大集合是否包含小集合

boolean retainAll(Collection c) 两个集合求交集(c1对c2做交集,最终的交集的结果保存在c1中,c2不变,返回值表示的是c1是否发生变化,而不是表示是否有包含关系)

Iterator接口

概述

对collection进行迭代的迭代器

依赖于集合而存在

成员方法

boolean hasNext() 判断下一个元素是否为空

E next() 返回迭代中的下一个元素

//迭代器遍历
Iterator iterator=c1.iterator();
while(iterator.hasNext()){
    Object next=iterator.next();
    Student s=(Student)next;
    System.out.println(s.getName()+"--"s.getAge());
}
​
//注意:不能重复调用next()方法,因为每调用一次就会获取下一个元素,指针一直在动
System.out.println(((Student)it.next()).getName()+”---”+((Student)it.next()).getAge());
//这样写就会出现问题
​
​
//Iterator为什么不定义为一个类,而是一个接口?
/*
    假设迭代器是一个类,这样的话就可以通过类创建对象,调用类中的方法区实现集合的遍历。但是呢,java中提供了很多种集合类,这些集合类数据结构是不同的,所以,存储的方式也应该是不同的,进而对应的遍历的方式应该也有所不同,所以,就不应该被设置为一个类
    无论你是使用哪种集合,都应该具备获取元素的操作,而且通过编写代码发现,在啊获取之前最好有一个判断功能,而每隔一种集合他们的数据结构存储方式都不统一,所以判断操作和获取操作的内部实现应该也不是一样的,所以就不能再一开始就具备了具体实现,应该是一个接口。
    那么,具体的方法实现在哪里呢?
    在真正的具体子类中,以内部类的形式实现。实际上,获取到的迭代器对象是new It人()
*/

List接口

概述

有序(存储和取出顺序一致)

有序的collection(也成为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确的控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素

与set不同,列表通常允许重复的元素

成员方法

void add(int index,E element) 将制定的元素插入此列表中的指定位置(索引范围为0~size())

E remove(int index) 删除该列表中指定位置的元素(返回的是被删除的那个元素)

E get(int index) 返回此列表中指定位置的元素

E set(int index,E element) 用指定的元素替换此列表中指定位置的元素(返回的是被修改的元素)

ListIterator listIterator() 返回列表中的列表迭代器(按适当的顺序)

boolean hasPrevious() list中特有的方法,查看上一个元素是否为空

E previous() 返回上一个元素

注意:

ConcurrentModificationException 并发修改异常

在使用迭代器遍历list的情况下,又对list进行增删改等操作,会触发这个异常

原因分析:

迭代器是依赖与集合而存在的,在遍历迭代器中元素的时候,判断成功后,我们往集合中添加一个新元素,但是呢,迭代器并不知道你添加了新元素,所以就报错了

简单概括:在迭代器遍历的时候,不能去通过集合去修改元素

解决:1、使用迭代器自带的增删改等操作 2、不使用迭代器进行遍历

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值