返回顶部
分享到

Java 集合 Collection介绍及常用方式

java 来源:互联网 作者:佚名 发布时间:2025-05-11 08:00:58 人浏览
摘要

单列集合体系结构 注意: List系列集合添加的元素是有序(存取数据的顺序相同),可重复,有索引的 Set系列集合 添加的元素是无序,不能重复,无索引的 Collection介绍 Collection是单列集合的

单列集合体系结构

注意:

List系列集合添加的元素是有序(存取数据的顺序相同),可重复,有索引的

Set系列集合 添加的元素是无序,不能重复,无索引的

Collection介绍

Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。

常用方法

方法名称 说明
public boolean add(E e) 把给定的对象添加到当前集合中
public void clear() 清空集合中所有的元素
public boolean remove(E e) 把给定的对象在当前集合中删除
public boolean contains(0bject obj) 判断当前集合中是否包含给定的对象
public boolean isEmpty() 判断当前集合是否为空
public int size() 返回集合中元素的个数/集合的长度

代码演示:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

import java.util.ArrayList;

import java.util.Collection;

public class Test1 {

    public static void main(String[] args) {

        //Collection是一个接口,我们不能直接创建他的对象。

        //所以,现在我们学习他的方法时,只能创建他实现类的对象。

        //实现类:ArrayList

        Collection<String> coll = new ArrayList<>();

        //把给定的对象添加到当前集合中

        coll.add("aaa");

        coll.add("bbb");

        System.out.println(coll);//[aaa, bbb]

        //把给定的对象在当前集合中删除

        coll.remove("aaa");

        System.out.println(coll);//[bbb]

        //返回集合中元素的个数/集合的长度

        System.out.println(coll.size());//1

        //判断当前集合是否为空

        System.out.println(coll.isEmpty());//false

        //清空集合中所有的元素

        coll.clear();

        System.out.println(coll);//[]

        System.out.println(coll.isEmpty());//true

        //判断当前集合中是否包含给定的对象

        coll.add("aaa");

        coll.add("bbb");

        coll.add("ccc");

        System.out.println(coll);//[aaa, bbb, ccc]

        System.out.println(coll.contains("bbb"));//true

        System.out.println(coll.contains("ddd"));//false

    }

}

注意:

contains方法在底层依赖equals方法判断对象是否一致
如果存的是自定义对象,没有重写equals方法,那么默认使用Object类中的equals方法进行判断,而object类中equals方法判断的是地址值是否相同,要想判断自定义对象中的内容是否相同,需要在自定义的Javabean类中,重写equals方法
举例:如果同姓名和同年龄,就认为是同一个学生。

代码实现:

测试类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

import java.util.ArrayList;

import java.util.Collection;

public class Test {

    public static void main(String[] args) {

        //举例:如果同姓名和同年龄,就认为是同一个学生。

        Collection<Student> coll = new ArrayList<>();

        Student s1 = new Student("zhangsan", 23);

        coll.add(s1);

        Student s2 = new Student("zhangsan", 23);

        Student s3 = new Student("lisi", 24);

        /* //重写equals方法前比较的是自定义对象的地址值

        //s2和s3是新new出来的,与s1的地址都不同,所以都是false

        System.out.println(coll.contains(s2));//false

        System.out.println(coll.contains(s3));//false*/

        //重写equals方法后,比较的是自定义对象内的属性值

        System.out.println(coll.contains(s2));//true

        System.out.println(coll.contains(s3));//false

    }

}

自定义对象的Javabean类: 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

import java.util.Objects;

public class Student {

    private String name;

    private int age;

    public Student() {

    }

    public Student(String name, int age) {

        this.name = name;

        this.age = age;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

    //重写equals方法

    @Override

    public boolean equals(Object o) {

        if (this == o) return true;

        if (o == null || getClass() != o.getClass()) return false;

        Student student = (Student) o;

        return age == student.age && Objects.equals(name, student.name);

    }

}

Collection的遍历方式

迭代器遍历

说明

迭代器在Java中的类是Iterator,迭代器是集合专用的遍历方式,不依赖索引进行遍历。

Collection集合获取迭代器 

方法名称 说明
Iterator<E> iterator ()

返回迭代器对象

默认指向当前集合的0索引

Iterator中的常用方法

方法名称 说明
boolean hasNext()

判断当前位置是否有元素,

有元素返回true,没有元素返回false

E next () 获取当前位置的元素
并将迭代器对象移向下一个位置。
void remove () 删除获取到的元素

代码演示

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

import java.util.ArrayList;

import java.util.Collection;

import java.util.Iterator;

public class Test2 {

    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()) {

            String str = it.next();

            System.out.println(str);

        }

        //aaa

        //bbb

        //ccc

    }

}

细节注意点

1,迭代器遍历完毕,指针不会复位,重新遍历该集合时需要重新获取该集合的迭代器对象
2,循环中只能用一次next方法,否则前一个next方法将迭代器对象移向下一个位置时该位置没有元素,后一个next方法获取不到元素就会报错(NoSuchElementException)
3,迭代器遍历时,不能用集合的方法进行增加或者删除,可以用迭代器的方法进行删除

增强for遍历

说明

增强for的底层就是迭代器,为了简化迭代器的代码书写的。
它是JDK5之后出现的,其内部原理就是一个Iterator迭代器
所有的单列集合和数组都能用增强for进行遍历。

格式

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

        具体代码;

}

代码演示

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

import java.util.ArrayList;

import java.util.Collection;

public class Test3 {

    public static void main(String[] args) {

        Collection<String> coll = new ArrayList<>();

        coll.add("aaa");

        coll.add("bbb");

        coll.add("ccc");

        for (String s : coll) {

            System.out.println(s);

        }

        //aaa

        //bbb

        //ccc

    }

}

细节注意点 

上述代码中的s是一个第三方变量,依次代表集合中的每一个数据

对s进行操作不会影响集合中的数据

Lambda表达式遍历

说明

得益于JDK 8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。

方法

方法名称 说明
default void forEach(Consumer<? super T> action): 结合lambda遍历集合 

代码演示 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

import java.util.ArrayList;

import java.util.Collection;

import java.util.function.Consumer;

public class Test4 {

    public static void main(String[] args) {

        Collection<String> coll = new ArrayList<>();

        coll.add("aaa");

        coll.add("bbb");

        coll.add("ccc");

        //匿名内部类

        coll.forEach(new Consumer<String>() {

            @Override

            public void accept(String s) {

                System.out.println(s);

            }

        });

        //lambda表达式

        coll.forEach(s -> System.out.println(s));

        //aaa

        //bbb

        //ccc

    }

}


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计