Java集合

集合概述
Java集合类是一种特别有用的工具类,可以存储数量不等的对象,并可以实现常用的数据结构。集合和数组的区别在于,数组是可以存放基本类型的,而集合只能存放对象。
集合分类
Java集合类主要由两个接口派生出来的:Collection接口和Map接口。

  • Collection接口
    Collection派生出来三个主要的子接口:Set接口、Queue接口、List接口。Set接口类似一个罐子,当对象添加到Set集合时,Set集合时无法记住这个元素的顺序,所以Set集合元素无法重复。List集合则像一个数组,它可以记住每次添加元素的顺序、且List集合的长度可变。而Queue接口主要是实现一些常用的数据结构。
  • Map接口
  • Map接口用于保存具有映射关系的数据(例如一个人的成绩),Map接口的每项数据都是key-value对。其中key是不可以重复的,其中所有的key可以组成一个Set集合,而value是可以重复的,所有的value又可以组成一个List集合。从实现原理上来看,是先实现了Map,然后让Map的所有value值为null就变成了Set。所以Set其实可以看成一种特殊的Map.
    集合的遍历
    Collection接口是List、Set、Queue接口的父接口。接口的作用就是抽象它们之间的一些共同特性和操作。所以Collection接口定义了一些适用于操作其所有子接口和子类的方法。这些方法包括了一些基本的集合操作,比如添加、删除、清空集合元素等操作。
    集合是用来存放对象的,那么自然少不了对集合元素的访问。对于Set这种集合,是没有办法对它进行单个访问的,所以每次都会整个集合进行一次遍历。然而集合的具体实现类对集合有着不同的实现原理,比如ArrayList底层用的数组实现的方式,而HashSet用的是哈希算法实现。如果要访问集合元素,就要针对不同实现原理,编写相应的访问代码,这样显然是不方便的,所以Java使用了Iterator这个接口来抽象了集合访问,Iterator作为Collection的一个成员变量,这样每个继承了Collection集合的实现类就会带有这个成员变量,然后在自己的类中实现Iterator中的抽象方法,这样具体的集合类都可以通过Iterator这个接口来访问了。这样为每个具体的集合类都提供了统一的访问接口。通过调用同样的方法,就可一访问不同类型的集合,这样也提高了程序的可移植性。
public interface Collection<E> extends Iterable<E> 
Iterator<T> iterator();
boolean hasNext();
E next();

Collection接口继承了Iterable接口,而Iterable接口包含了一个方法可以返回Iterator对象。Iterator则包含了访问集合元素的统一操作。这样不论是访问List还是Set都可以调用Iterator的方法。一个Iterator对象对应一个集合对象。
遍历集合元素还有其他方法:

  • Java8为Iterable接口增加了forEach(Consumer action)默认方法,可以采用Lamda表达式来遍历集合
  • 使用forach循环遍历集合
  • 使用Iterator中的默认方法forEachRemaining(Consumer action)方法,可以采用Lamda表达式来遍历集合。
    集合的其他操作
    Java8为Collection集合新增了一个removeIf(Predicate filter)方法,使用它可以批量删除符合filter的条件的所有元素,而不用通过遍历集合来一个一个的删除。
    使用Stream操作集合,使用Stream操作集合也是极大的方便的对集合元素的操作。Java8为Collection接口提供了一个stream()默认方法,可以返回该集合对应的流,接下来就可以通过stream的方法来对集合进行操作。stream有两种类型的方法,其中中间方法操作完流之后,不会消耗流可以继续调用后续的方法对流进行操作。而末端方法对流进行一次操作之后,流就被消耗了,不能继续调用方法对流进行操作了。

  • 常见中间方法
    filter(Predicate predicate);
    mapToXXX(ToxxxFunction mapper);
    peek(Consumer action);
    sorted();
    limit(long maxSize);
    distinct();

  • 常见末端方法

  • forEach(Consumer action);
  • toArray();
  • reduce();
  • min();
  • max();
  • count();
  • anyMatch(Predicate predicate);
  • allMatch(Predicate predicate);
  • noneMatch(Predicate predicate);
  • findFirst();
  • findAny();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值