Java—一篇读懂java集合(Collection/Map)及Lambda表达式

Faustine ·
更新时间:2024-11-10
· 827 次阅读

集合简介

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

public interface Collection { boolean add(E element); Iterator 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 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 action),调用该方法去遍历集合元素时,集合元素传递给Consumer接口accept(T t)方法,而Consumer是函数式接口,所以这是一种函数式编程
源码如下:

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

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

public static 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核心技术卷一》


作者:Andya_net



java集合 collection lambda表达式 JAVA map lambda

需要 登录 后方可回复, 如果你还没有账号请 注册新账号