Java面向对象系列[v1.0.0][集合]

Java集合就像容器,用于存储数量不等的对象(实际上存的是对象的引用),并可以实现常用的数据结构,除此之外Java集合还可以用于保存具有映射关系的关联数组。Java集合大致分为Set、List、Queue和Map四种体系,其中Set代表无需不可重复的集合;List代表有序可重复的集合;Queue代表一种队列结合;而Map代表具有映射关系的集合。

  • 所有的集合类都位于java.util包下,后来为了处理多线程环境下的并发安全问题,Java5在java.util.concurrent包下提供了一些多线程支持的集合类。
  • 在Java5之前,集合会丢失容器中所有对象的数据类型,把所有对象当成Object类型处理,在Java5之后增加了泛型,集合可以记住容器中对象的数据类型
  • 集合类与数组不一样,数组元素既可以是基本类型的值,也可以是对象的引用变量,而集合类只能保存对象的引用变量
  • Java的集合类主要由两个接口派生而出:Collection和Map,他们是Java集合框架的根接口包含了一些子接口或实现类,如图所示,Set和List接口是Collection接口派生出来的的两个子接口,分别代表了无序集合和有序集合,Queue是Java提供的队列实现
  • Set集合无法记住添加这个元素的顺序,因此Set里的元素不可重复,否则找不到
  • List集合可以记住每次添加元素的顺序,且长度可变
    在这里插入图片描述
  • 所有的Map实现类用于保存具有映射关系的数据,它保存的没想数据都是key-value对,其中key用于标识集合里的每项数据,不可重复,要获取Map中的数据时,总是根据key来获取
    在这里插入图片描述

Collection接口

Collection接口里定义了如下操作集合元素的方法[可用于操作Set集合也可以用于操作List和Queue集合]:

  • boolean add(Object o):该方法用于向集合添加一个元素,如果集合对象被添加操作改变了则返回true
  • boolean addAll(Collection c):该方法把集合c里的所有元素添加到指定集合里,如果集合对象被添加操作改变了,则返回true
  • void clear():清除集合里的所有元素,将集合长度变为0
  • boolean contains(Object o):返回集合里是否包含指定元素
  • boolean containsAll(Collection c):返回集合里是否包含c里的所有元素
  • boolean isEmpty():返回集合是否为空,集合长度额为0时返回true,否则返回false
  • Iterator iterator():返回一个Iterator对象,用于遍历集合里的元素
  • boolean remove(Object o):删除集合中的指定元素o,当集合中包含了一个或多个元素o时,该方法只删除第一个符合条件的元素,则该方法返回true
  • boolean removeAll(Collection c):从集合中删除集合c里所包含的所有元素,相当于减掉集合c,如果删除了一个或者多个元素则返回true
  • boolean retainAll(Collection c): 从集合中删除集合c里不包含的元素,相当于取交集,如果该操作改变了调用该方法的集合,则放回true
  • int size():该方法返回集合里元素的个数
  • Object[] toArray():该方法把集合转换成一个数组,所有的集合元素变成对应的数组元素
package demo;
import java.util.*;
import static java.lang.System.*;

public class CollectionTest
{
    public static void main(String[] args)
    {
        ArrayList c = new ArrayList();
        // 添加元素
        c.add("孙悟空");
        // 虽然集合里不能放基本类型的值,但Java支持自动装箱
        c.add(6);
        // 输出2
        out.println("c集合的元素个数为:" + c.size());
        // 删除指定元素
        c.remove("6");
        // 输出1
        out.println("c集合的元素个数为:" + c.size());
        // 判断是否包含指定字符串
        // 输出true
        out.println("c集合的是否包含\"孙悟空\"字符串:" + c.contains("孙悟空"));
        c.add("我欲乘风归去");
        out.println("c集合的元素:" + c);

        var books = new HashSet();
        books.add("我欲乘风归去");
        books.add("又恐琼楼玉宇");
        // 输出false
        out.println("c集合是否完全包含books集合?" + c.containsAll(books));
        // 用c集合减去books集合里的元素
        c.removeAll(books);
        out.println("c集合的元素:" + c);
        // 删除c集合里所有元素
        c.clear();
        out.println("c集合的元素:" + c);
        // 控制books集合里只剩下c集合里也包含的元素
        books.retainAll(c);
        out.println("books集合的元素:" + books);
        
        // 该Collection使用了泛型,指定它的集合元素都是String
        var strColl = List.of("Java", "Kotlin", "Swift", "Python");
        // toArray()方法参数是一个Lambda表达式,代表IntFunction对象
        // 此时toArray方法的返回值类型是String[],而不是Object[]
        String[] sa = strColl.toArray(String[]::new);
        out.println(Arrays.toString(sa));
    }
}

当使用System.out.println()方法输出结合对象时,将输出[element1, element2, element3....]的形式,显然因为Collection实现类都重写了toString()方法,该方法可以一次性输出集合中的所有元素。

发布了207 篇原创文章 · 获赞 124 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/dawei_yang000000/article/details/105050345