Java—集合概述(Collection/Map)

集合简介

  在集合类之前,我们使用数组存储,数组既可以存储基本数据类型的值,也可以存储对象(对象的引用变量),但是集合只能存储对象。
  Java集合类似于一种容器,将同类型的对象(实际为对象引用)存储在一起,就形成一个集合。之前的文章中,我们有介绍到,Java 5后增加了泛型,Java集合可以指定特定的对象类型。
  Java集合类的基本接口是Collection接口和Map接口。该接口有两个基本方法:add()iterator()方法。

public interface Collection<E> {
	boolean add(E element);
	Iterator<E> iterator();
	...
}

其中,add()方法用于向集合添加元素,若添加元素时改变了集合,则返回true;反之,返回false。如该集合中已存在需要添加的元素,再次添加时,返回false。iterator()方法用于返回实现Iterator接口的对象,使用该迭代器对象依次访问集合的元素。

集合体系

Collection集合体系继承树

在这里插入图片描述
Collection体系中,Set代表无序集合;List代表有序集合;Queue代表队列集合。

Map集合体系继承树

在这里插入图片描述
Map体系中,存储的是具有映射关系(key-value)的数据,Map中的key不可重复。

集合分类

  • Set:无序、不可重复的集合;
  • List:有序、重复的集合;
  • Queue:队列集合;
  • Map:有映射关系的集合;

Collection常用方法

  • boolean add(E e):向集合中添加一个元素,若集合改变了,则返回true;反之,返回false。
  • boolean addAll(Collection<? extends E> c):将集合c内的所有元素添加到指定集合中,若集合改变,则返回true;反之,返回false。
  • void clear():清楚集合内的所有元素,集合长度为0。
  • boolean remove(Object o):删除集合中指定元素o,当集合中包含一个或多个元素o时,只删除第一个符合的元素,并返回true。
  • boolean removeAll(Collection<?> c);:从本集合中删除集合c内的所有元素,等于求差集,若删除一个及以上的元素,就返回true。
  • boolean contains(Object o):判断集合内是否存在指定元素o,若存在,则返回true;反之,返回false。
  • boolean containsAll(Collection<?> c):判断集合内是否包含集合c里面的所有元素,若包含,则返回true;反之,返回false。
  • boolean isEmpty():判断集合是否为空,若为空,则返回true;反之,返回false。集合的长度为0,即为空。
  • Iterator iterator():返回一个Iterator对象,遍历集合元素。
  • int size():返回集合内的元素个数;
  • Object[] toArray():将集合转换为一个数组,所有的集合元素变为对应的数组元素。

Lambda表达式遍历集合

   Java 8在Iterator接口中引入了Lambda表达式:forEach(Consumer<? super T> action),调用该方法去遍历集合元素时,集合元素传递给Consumer接口accept(T t)方法,而Consumer是函数式接口,所以这是一种函数式编程
源码如下:

    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }

其中retuireNonNull(T obj)是Object的方法,源码如下:

    public static <T> T requireNonNull(T obj) {
       if (obj == null)
           throw new NullPointerException();
       return obj;
   }

实战示例

public class DemoApplication {

   public static void main(String[] args) {

       Collection collection = new ArrayList();
       // 添加元素
       collection.add("add()方法");
       collection.add(1);
       collection.add(2.7);
       collection.add("value1");
       collection.add("value2");

       System.out.println("collection 集合元素为:" + collection);
       
       //lambda表达式遍历
       collection.forEach(c -> System.out.println("forEach: " + c.toString()));

       // 删除指定元素
       System.out.println("删除指定元素1:" + collection.remove(1));
       System.out.println("删除指定元素2:" + collection.remove(2));

       //判断是否包含指定元素
       System.out.println("是否包含2.7:" + collection.contains(2.7));
       System.out.println("是否包含2:" + collection.contains(2));


       //判断是否包含某个集合
       Collection valueSet = new HashSet();
       valueSet.add("value1");
       valueSet.add("value2");
       System.out.println("是否包含集合: " + collection.containsAll(valueSet));

       //求差集:去除另一个集合的所有元素
       collection.removeAll(valueSet);
       System.out.println("求差集后:" + collection);

       //清空集合元素
       collection.clear();
       System.out.println("清空集合后: " + collection);

       //集合长度
       System.out.println("集合长度: " + collection.size());

       //求交集:只保留另一个集合的元素
       valueSet.retainAll(collection);
       System.out.println("求交集: " + valueSet);
       }
}

运行结果:

collection 集合元素为:[add()方法, 1, 2.7, value1, value2]
forEach: add()方法
forEach: 1
forEach: 2.7
forEach: value1
forEach: value2
删除指定元素1:true
删除指定元素2:false
是否包含2.7:true
是否包含2:false
是否包含集合: true
求差集后:[add()方法, 2.7]
清空集合后: []
集合长度: 0
求交集: []

参考书籍
《疯狂Java》
《Java核心技术卷一》

posted @ 2020-03-22 21:46  Andya_net  阅读(257)  评论(0编辑  收藏  举报