List集合进阶之Collection集合


1. Collection

1.1 数组和集合的区别

  • 相同点
    都是容器,可以存储多个数据。
  • 不同点
    数组的长度是不可变的,集合的长度是可变的。
    数组可以存储基本数据类型和引用数据类型,集合只能存储引用数据类型,如果要存基本数据类型,需要存基本类型所对应的包装类。

1.2 集合类的体系结构

集合类的体系结构

1.3 Collection集合概述和使用

  • Collection集合概述
    是单列集合的顶层接口,他表示一组对象(Collection元素)
    JDK不提供此接口的任何直接实现,它提供了更具体的子接口(如Set和List)实现
  • 创建Collection集合的对象
    多态的方式
    具体的实现类ArrayList
  • 方法介绍
方法名说明
boolean add(E e)添加元素
boolean remove(Object o)boolean remove(Object o)
boolean removeIf(Object o)根据条件进行移除
void clear()清空集合中的元素
boolean contains(Object o)判断集合中是否存在指定的元素
boolean isEmpty()判断集合是否为空
int size()集合的长度,也就是集合中元素的个数
  • 代码演示
 public static void main(String[] args) {
        Collection<String> collection = new ArrayList<>();
        collection.add("四大发明");
        collection.add("造纸术");
        collection.add("印刷术");
        collection.add("火药");
        collection.add("指南针");

        method1(collection);
        method2(collection);
        method3(collection);
        method4(collection);
        method5(collection);
        method6(collection);
    }

    private static void method6(Collection<String> collection) {
        int size = collection.size();
        System.out.println(size);//5
    }

    private static void method5(Collection<String> collection) {
        collection.clear();
        boolean empty = collection.isEmpty();
        System.out.println(empty);//true
    }

    private static void method4(Collection<String> collection) {
        boolean hy = collection.contains("火药");//true
        boolean hy1 = collection.contains("火药1");//false
        System.out.println(hy);
        System.out.println(hy1);
    }

    private static void method3(Collection<String> collection) {
        collection.clear();
        System.out.println(collection);
    }

    private static void method2(Collection<String> collection) {
//        method1(collection);
//        boolean test(T t);
        collection.removeIf((s) -> s.length() == 3);
        System.out.println(collection);
    }

    private static void method1(Collection<String> collection) {
        //删除成功返回true
        boolean remove = collection.remove("四大发明");
        //删除失败返回false
        boolean remove1 = collection.remove("四大发明");
        System.out.println(remove);//true
        System.out.println(remove1);//false
        System.out.println(collection);//[造纸术, 印刷术, 火药, 指南针]
    }

1.4 Collection集合的遍历

  • 什么是迭代器?
    集合专用的遍历方式。
    Iterator iterator(): 返回此集合中元素的迭代器,通过集合对象的iterator()方法得到。
  • Iterator中的常用方法
    boolean hasNext(): 判断当前位置是否有元素可以被取出
    E next(): 获取当前位置的元素,将迭代器对象移到下一个索引的位置。
  • Collection集合的遍历
public static void main(String[] args) {
        Collection<String> list = new ArrayList<>();
        list.add("四大发明");
        list.add("造纸术");
        list.add("印刷术");
        list.add("火药");
        list.add("指南针");

        //1.获取迭代器对象
        //迭代器对象一旦被创建出来,默认指向集合的0索引位置
        Iterator<String> iterator = list.iterator();
        //迭代器相关方法
        // 判断当前位置是否有元素
//        System.out.println(iterator.hasNext());// true
        // 取出当前位置的元素,并且指针后移一位
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());//NoSuchElementException
        System.out.println("---------------");
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

    }
  • 迭代器原理
    迭代器原理示意
  • 删除集合中的元素,对List集合介绍中删除集合中元素的代码进行改进
public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<>();
    list.add("四大发明");
    list.add("造纸术");
    list.add("造纸术");
    list.add("印刷术");
    list.add("火药");
    list.add("指南针");
    Iterator it = list.iterator();
    while(it.hasNext()) {
        String s = (String) it.next();
        if ("造纸术".equals(s)) {
            it.remove();
        }
    }
    System.out.println(list);
}

1.5 增强for循环

  • 介绍
    它是JDK5之后出现的,其内部原理是一个Iterator迭代器
    实现Iterable接口的类才可以使用迭代器和增强for
    简化数组和Collection集合的遍历
  • 格式
    for(集合/数组中元素的数据类型 变量名:集合/数组名){
    }
  • 代码演示
public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<>();
    list.add("四大发明");
    list.add("造纸术");
    list.add("印刷术");
    list.add("火药");
    list.add("指南针");
    for (String s : list) {
        s = "---";//修改第三方变量的值,不会影响到集合中的元素
        System.out.println(s);
    }
    System.out.println(list);//[四大发明, 造纸术, 印刷术, 火药, 指南针]

}

删除元素时的问题

1.6 小结

三种循环的使用场景:

  1. 如果需要操作索引,使用普通for循环
  2. 如果在遍历的过程中需要删除元素请使用迭代器
  3. 如果仅仅想遍历,那么使用增强for

小练习:

public static void main(String[] args) {
    ArrayList<Person> list = new ArrayList<>();
    Person s1 = new Person("四大美女",0000);
    Person s2 = new Person("西施",0.0);
    Person s3 = new Person("貂蝉",0.0);
    Person s4 = new Person("王昭君",33);
    Person s5 = new Person("赵玉环",37);
    list.add(s1);
    list.add(s2);
    list.add(s3);
    list.add(s4);
    list.add(s5);
    Iterator<Person> it = list.iterator();
    while (it.hasNext()) {
        Person next = it.next();
        System.out.println(next);
    }
}

内容有点基础,如果本文对您的学习有用处的话,就请点个赞支持一下把!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值