集合:Collection接口(常用方法遍历)

Posted zhai1997

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合:Collection接口(常用方法遍历)相关的知识,希望对你有一定的参考价值。

1、Collection接口

(1)特点

  •  没有直接的实现类,而是提供了子接口
  • 该接口提供了一系列常见的集合操作的方法,例如:增加、删除、查找

(2)常见方法

  • add:单个添加
  • addAll:批量添加
  • remove:删除
  • removeAll:批量删除
  • contains:查找
  • containsAll:批量查找

 

2、Collection接口的常用方法

(1)添加:

add

@Test
    public void test1(){
        Collection collection=new ArrayList();//创建Collection接口对象
        collection.add("zhai");
        collection.add(true);
        collection.add(123);
        System.out.println(collection);
    }
[zhai, true, 123]

addAll

public class DateDemo {
    @Test
    public void test1(){
        Collection collection=new ArrayList();//创建Collection接口对象
        collection.add("zhai");
        collection.add(true);
        collection.add(123);
        System.out.println("collection:"+collection);
        Collection collection1=new ArrayList();
        collection1.add("2020年8月4日20:35:10");
        collection1.add("2020年8月4日20:35:30");
        collection.addAll(collection1);
        System.out.println("批量添加后的collection:"+collection);
    }
}
collection:[zhai, true, 123]
批量添加后的collection:[zhai, true, 123, 2020年8月4日20:35:10, 2020年8月4日20:35:30]

添加自定义类型的对象元素:

@Test
    public void test1(){
        Collection collection=new ArrayList();
        collection.add(new Student("zhai",12));
        collection.add(new Student("zhao",13));
        collection.add(new Student("zhang",14));
        collection.add(new Student("li",12));
        System.out.println(collection);
    }
[Student{sname=‘zhai‘, age=12}, 
Student{sname=‘zhao‘, age=13}, 
Student{sname=‘zhang‘, age=14}, 
Student{sname=‘li‘, age=12}]

(2)删除

remove

 @Test
    public void test1(){
        Collection collection=new ArrayList();//创建Collection接口对象
        collection.add("zhai");
        collection.add(true);
        collection.add(123);
        System.out.println("collection:"+collection);
        collection.remove(123);
        System.out.println("删除后:"+collection);
    }

removeAll

  @Test
    public void test1(){
        Collection collection=new ArrayList();//创建Collection接口对象
        collection.add("zhai");
        collection.add(true);
        collection.add(123);
        System.out.println("collection:"+collection);
        Collection collection1=new ArrayList();
        collection1.add("2020年8月4日20:35:10");
        collection1.add("2020年8月4日20:35:30");
        collection.addAll(collection1);
        System.out.println("批量添加后的collection:"+collection);
        collection.removeAll(collection1);
        System.out.println("批量删除后:"+collection);
    }
collection:[zhai, true, 123]
批量添加后的collection:[zhai, true, 123, 2020年8月4日20:35:10, 2020年8月4日20:35:30]
批量删除后:[zhai, true, 123]

(3)查找

contains

 @Test
    public void test1(){
        Collection collection=new ArrayList();//创建Collection接口对象
        collection.add("zhai");
        collection.add(true);
        collection.add(123);
        System.out.println("collection:"+collection);
        System.out.println(collection.contains("zhai"));
    }
collection:[zhai, true, 123]
true

containsAll

 @Test
    public void test1(){
        Collection collection=new ArrayList();//创建Collection接口对象
        collection.add("zhai");
        collection.add(true);
        collection.add(123);
        System.out.println("collection:"+collection);
        Collection collection1=new ArrayList();
        collection1.add("2020年8月4日20:35:10");
        collection1.add("2020年8月4日20:35:30");
        collection.addAll(collection1);
        System.out.println("批量添加后的collection:"+collection);
        System.out.println(collection.containsAll(collection1));
    }
collection:[zhai, true, 123]
批量添加后的collection:[zhai, true, 123, 2020年8月4日20:35:10, 2020年8月4日20:35:30]
true

(4)获取元素个数

    @Test
    public void test1(){
        Collection collection=new ArrayList();//创建Collection接口对象
        collection.add("zhai");
        collection.add(true);
        collection.add(123);
        System.out.println("collection:"+collection);
        System.out.println(collection.size());
    }
collection:[zhai, true, 123]
3

(5)清除

 @Test
    public void test1(){
        Collection collection=new ArrayList();
        collection.add("zhai");
        collection.add(true);
        collection.add(123);
        System.out.println("collection:"+collection);
        collection.clear();
        System.out.println(collection);
        System.out.println(collection.size());
    }
collection:[zhai, true, 123]
[]
0

(6)判断是否为空

@Test
    public void test1(){
        Collection collection=new ArrayList();
        collection.add("zhai");
        collection.add(true);
        collection.add(123);
        System.out.println(collection.isEmpty());
        System.out.println("collection:"+collection);
        collection.clear();
        System.out.println(collection);
        System.out.println(collection.size());
        System.out.println(collection.isEmpty());
    }
false
collection:[zhai, true, 123]
[]
0
true

集合为空的时候返回true,否则返回false

 

3、遍历

(1)迭代器

流程:

技术图片

 

 

 特点:

每次只能下移一位

只能下移

遍历方式:

public class DateDemo {
    @Test
    public void test1(){
        Collection collection=new ArrayList();
        collection.add(new Student("zhai",12));
        collection.add(new Student("zhao",13));
        collection.add(new Student("zhang",14));
        collection.add(new Student("li",12));
        Iterator iterator=collection.iterator();
        while (iterator.hasNext()){
                System.out.println(iterator.next());
        }
    }
}
Student{sname=‘zhai‘, age=12}
Student{sname=‘zhao‘, age=13}
Student{sname=‘zhang‘, age=14}
Student{sname=‘li‘, age=12}
  • 适合读取元素,进行添加操作
 @Test
    public void test1(){
        Collection collection=new ArrayList();
        collection.add(new Student("zhai",12));
        collection.add(new Student("zhao",13));
        collection.add(new Student("zhang",14));
        collection.add(new Student("li",12));
        Iterator iterator=collection.iterator();
        while (iterator.hasNext()){
            collection.add(new Student("li",10));
            System.out.println(iterator.next());
        }
    }
java.util.ConcurrentModificationException

默认的元素个数是4,每次遍历的时候都会计算元素的个数,只要影响了实际的元素个数就会发生异常(底层存在一个变量存储默认值为0,在创建了迭代器对象之后该变量的值变为集合的大小,每次调用next都会验证当前集合的大小和变量值的大小,不相等会抛出异常),因此,进行添加、删除操作就会抛出异常。能够维护数据的安全性。

修改没有影响元素的个数,不会抛出此异常

一般迭代的时候是不会进行增加操作,删除的时候可以使用迭代器本身的remove方法

 @Test
    public void test1(){
        Collection collection=new ArrayList();
        collection.add(new Student("zhai",12));
        collection.add(new Student("zhao",13));
        collection.add(new Student("zhang",14));
        collection.add(new Student("li",12));
        Iterator iterator=collection.iterator();
        while (iterator.hasNext()){
            Student next= (Student) iterator.next();
            if (next.getAge()<13){
                iterator.remove();
            }
        }
        for (Object s:collection){
            System.out.println(s);
        }
    }

(2)增强for

 @Test
    public void test1(){
        Collection collection=new ArrayList();
        collection.add(new Student("zhai",12));
        collection.add(new Student("zhao",13));
        collection.add(new Student("zhang",14));
        collection.add(new Student("li",12));
        for(Object student:collection){
            System.out.println(student);
        }
    }
Student{sname=‘zhai‘, age=12}
Student{sname=‘zhao‘, age=13}
Student{sname=‘zhang‘, age=14}
Student{sname=‘li‘, age=12}
  • 本质上是迭代器,只是语法简化了

 

以上是关于集合:Collection接口(常用方法遍历)的主要内容,如果未能解决你的问题,请参考以下文章

常用集合类

集合常用类及方法汇总

Java集合专题(超级详细)

Java 单列集合方法解析与应用

Java集合框架--List接口 & List接口的使用 & 列表迭代器ListIterator

7.2 Java 11新增的Collection和Iterator接口