Collection集合-(List集合)

Collection集合体系

 其中蓝色框为接口,红色框为具体实现类

Collection集合概述和使用

Collection是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素

JDK不提供此接口的任何直接实现,它提供更具体的子接口(如list和set)实现

创建Collection集合的对象:多态的方式、具体的实现类为ArrayList

集合使用步骤:

//创建Colleciton集合对象
Collection<Student> = new ArrayList<Student>();
//创建学生对象
Student s1 =  new ("小明");
Student s2 =  new ("老王");
Student s3 =  new ("张总");
//把学生添加到集合
s.add(s1);
s.add(s2);
s.add(s3);
//遍历集合(迭代器方式)
//通过集合对象获取迭代器
Iterator<Student> it = s.iterator();
while(it.hasNext()){
    Student c = it.next();
    //输出
    System.out.println(c.getName());
}

 List集合概述和特点

List集合:有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素。与Set集合不同,列表通常允许重复的元素。

特点:有序--存储和取出的元素顺序一致

         可重复--存储的元素可以重复

因为List继承Collection类,所以List类由两种遍历方式(迭代器方式、for循环方式。迭代器方式和我们上边写的Collection中的大致是一样的)

并发修改异常

我们先了解一下两个变量:

modCount(实际修改集合的次数)和expectModCount(预期修改集合的次数)

出现该异常的原因:上边我们用到了迭代器来对集合进行白能力,当我们通过迭代器获取元素的时候,next()方法每次都会调用checkForComodification方法来比较modCount和expectModCount的值是否相同,如果不同就会报出并发异常。在迭代器遍历过程中,通过集合对象修改了集合中元素的长度(我们调用add方法后会对modCount的值进行增加),这就造成了迭代器获取元素中判断预期修改值和实际修改值不一致。

解决方法:通过for循环的方式进行遍历,get方法获取,add进行添加。(原因:虽然在add方法中还是会对modCount的值进行++,但是get方法不会对两个值进行比较)

列表迭代器

列表迭代器:通过list集合的listIterator方法得到,所以说它是list集合特有的迭代器

用于允许程序员沿任一方向遍历列表的列表迭代器。在迭代期间修改列表,并获取列表中迭代器的当前位置

常用方法:

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

Boolean hasNext():如果迭代具有风多元素,则返回true

E previous():返回列表中的上一个元素

Boolean hasPrevious():如果此列表迭代器在相反方向遍历列表时具有更多元素,则返回true

Void add(E e ):将指定的元素插入列表

上面我们了解到,通过迭代器方法不能向列表中添加元素,所以我们学习列表迭代器方法来添加。成功原理:在ListIterator中,add方法最终会将modCount赋值给expectModCount,所以即便调用next方法,两者值是相等的,就不会发生并发修改异常。

增强for循环

1、简化数组和Collection集合的遍历

2、实现Iterable接口的类允许其对象成为增强型for语句的目标

3、它是JDK5之后出现的,其内部原理是一个Iterator迭代器(也就是把通过集合对象获取迭代器那一步省略了)

格式:for(元素数据类型  变量名:数组或者Collection集合){

                    //在此处使用变量即可,该变量就是元素

}      

上边我们列出了迭代器方式,下面接着写出for循环和增强for循环。

//利用for循环遍历集合
for(int i = 0 ; i<s.size();i++){
    System.out.println(list.get(i));
}

//增强for循环
for(int i : s ){
    System.out.println(i);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值