第14天(下)(集合体系结构,Collection集合概述和使用,遍历方式-iterator迭代器和增强for,Lambda表达式遍历

集合和数组的对比小结

  1. 数组的长度是不可变的,集合的长度是可变的。
  2. 数组可以存储基本数据类型和引用数据类型。集合只能存储引用数据类型,如果需要存储基本数据类型,需要存对应的包装类。

集合类体系结构

蓝色表示接口,红色表示实现类

在这里插入图片描述

Collection集合概述和使用

collection概述:

  1. 是单列集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素。
  2. JDK不提供此接口的任何直接实现,他提供更具体的子接口 (如set和list)实现。

创建Collection集合的对象

  1. 多态方式
  2. 具体的实现类ArrayList

Collection集合常用方法

在这里插入图片描述

 public static void main(String[] args) {
        Collection<String> coll=new ArrayList<>();


        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        System.out.println(coll);//[aaa, bbb, ccc]
        //清空
        //coll.clear();
//        删除
        coll.remove("aaa");
        System.out.println(coll);//[bbb, ccc]
     //判断是否存在"aaa"
        boolean result = coll.contains("aaa");
        System.out.println(result);//false
       //判断集合是否为空
        boolean result2 = coll.isEmpty();
        System.out.println(result2);//false
        //获取集合的长度
        int size = coll.size();
        System.out.println(size);//2
    }
 public static void main(String[] args) {
        //创建集合的对象
        Collection<Student> coll=new ArrayList<>();
        //创建三个学生对象
        Student s1 = new Student("zhangsan", 1);
        Student s2 = new Student("lisi", 5);
        Student s3 = new Student("wangwu", 44);
        //把学生添加到集合中
        coll.add(s1);
        coll.add(s2);
        coll.add(s3);
        //判断集合中某一学生对象是否包含
        Student s4 = new Student("lisi", 5);
         //因为contains方法在底层依赖equals方法判断对象是否一致的。
        //如果存在的是自定义对象,没有重写equals方法,那么默认使用Object类中的equals方法进行判断,而Object类中equals方法,依赖地址值进行判断
        //如果同姓名同年龄就认为是同一学生
        //只需要在student类中重写equals方法就可以了
        System.out.println(coll.contains(s4));
    }

Collection的遍历方式

迭代器遍历

迭代器在java中的类是iterator,迭代器是集合专用的遍历方式。

Collection集合获取迭代器

在这里插入图片描述

iterator中常用方法

在这里插入图片描述

public static void main(String[] args) {
    //创建集合并添加元素
    Collection<String>coll = new ArrayList<>();
    coll.add("aaa");
    coll.add("bbb");
    coll.add("ccc");
    //获取迭代器对象
    Iterator<String> it  = coll.iterator();
    //利用集合获取集合每一个元素
    while (it.hasNext()){
        //next获取元素 并移动指针
        String aut = it.next();
        System.out.println(aut);
    }
}
//删除
while (it.hasNext()){
            String str = it.next();
            if ("b".equals(str)){
                it.remove();
            }
        }
        System.out.println(coll);
    }

细节注意点:

1.用next获取元素超出范围,会 报错NoSuchElementException
2.迭代器遍历完毕,指针不会复位
3.循环中只能用一次next方法
4.迭代器遍历时,不能用集合的方法进行增加或者删除

增强 for遍历

增强for的底层就是 迭代器,为了简化迭代器的代码书写的。
所有的单列集合和 数组才能用增强for进行遍历

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

}

快速生成方式:集合名字+for回车

for (String s  : list){
sout(s);
}
  public static void main(String[] args) {
        //1.创建集合并添加元素
        Collection<String> coll = new ArrayList<>();
        coll.add("zhangsan");
        coll.add("lisi");
        coll.add("haha");
        //2.利用 增强for进行 遍历
        for (String s : coll) {
            System.out.println(s);
        }
    }

增强for细节

修改增强for中的变量,不会改变集合中原本的数据。

Lambda表达式遍历

得益于JDK8开始的技术Lambda表达式,提供了一种 更简单,更直接的遍历集合的方式。
在这里插入图片描述

    //Lambda表达式遍历
        //1.利用匿名内部类
        //底层原理
        //其实也会自己遍历集合,依次得到每一个元素
        //把得到的每一个元素,传递给下面的accept方法
        //s依次表示集合中的每一个数据
        coll.forEach(new Consumer<String>() {
            @Override
            //s依次表示集合中的每一个数据
            public void accept(String s) {
                System.out.println(s);
            }
        });
        //lambda表达式
        coll.forEach(s-> System.out.println(s));
    }

总结

  1. Collection是单列集合的顶层接口,所有方法被List和Set系列集合共享
  2. 常见成员方法
    add,clear,remove,contains,isEmpty,size
  3. 三种通用的遍历方式:
    迭代器iterator:在遍历的过程中需要删除元素,请使用迭代器。
    增强for,Lambda:仅仅想遍历,那么使用增强for或Lambda表达式

lection是单列集合的顶层接口,所有方法被List和Set系列集合共享
2. 常见成员方法
add,clear,remove,contains,isEmpty,size
3. 三种通用的遍历方式:
迭代器iterator:在遍历的过程中需要删除元素,请使用迭代器。
增强for,Lambda:仅仅想遍历,那么使用增强for或Lambda表达式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值