集合collections
最近看到官方文档,写下记录。
1、简介:集合(其实也叫容器)只是将多个元素组成一个单元对象。通常用于存储、检索、操作和聚合。
2、集合框架包括:
- 接口:Map,Collection,Deque等等
- 实现:ArrayList、HashMap等等
- 算法:例如搜索和排序
插入一张图片,来说明一下collection框架粗略的层次结构:
- Set— 不能包含重复元素的集合。
- List— 有序集合(有时称为序列)。Lists 可以包含重复的元素。其实就是数组啦
-
Queue— 在处理之前用于保存多个元素的集合。
队列通常但不一定以 FIFO(先进先出)方式对元素进行排序。
-
Deque— 在处理之前用于保存多个元素的集合。
双端队列可以用作 FIFO(先进先出)和 LIFO(后进先出)。
- Map— 将键映射到值的对象。键值对,大家一个很熟悉。
这里都没有仔细讲。具体自己baidu
今天重要讲聚合操作,也就是遍历,外加删除。
1、第一种方法:使用stream流
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("1");
list.add("3");
list.add("a");
list.add("c");
list.add("5");
list.add("d");
// 过滤出 "a" 元素
list.stream().filter(e -> e.equals("a")).forEach(e -> System.out.println(e));
}
结果是:
E:\JDK\bin\java.exe "-javaagent:E:\idea2019\IntelliJ IDEA 2020.1\lib\idea_rt.jar=61258:E:\idea2019\IntelliJ IDEA 2020.1\bin" -Dfile.encoding=UTF-8 -classpath E:\JDK\jre\lib\charsets.jar;E:\JDK\jre\lib\deploy.jar;E:\JDK\jre\lib\ext\access-bridge.jar;E:\JDK\jre\lib\ext\cldrdata.jar;E:\JDK\jre\lib\ext\dnsns.jar;E:\JDK\jre\lib\ext\jaccess.jar;E:\JDK\jre\lib\ext\jfxrt.jar;E:\JDK\jre\lib\ext\localedata.jar;E:\JDK\jre\lib\ext\nashorn.jar;E:\JDK\jre\lib\ext\sunec.jar;E:\JDK\jre\lib\ext\sunjce_provider.jar;E:\JDK\jre\lib\ext\sunmscapi.jar;E:\JDK\jre\lib\ext\sunpkcs11.jar;E:\JDK\jre\lib\ext\zipfs.jar;E:\JDK\jre\lib\javaws.jar;E:\JDK\jre\lib\jce.jar;E:\JDK\jre\lib\jfr.jar;E:\JDK\jre\lib\jfxswt.jar;E:\JDK\jre\lib\jsse.jar;E:\JDK\jre\lib\management-agent.jar;E:\JDK\jre\lib\plugin.jar;E:\JDK\jre\lib\resources.jar;E:\JDK\jre\lib\rt.jar;E:\IDEA_project\official\netty-netty-4.1.77.Final\example\target\classes;E:\Maven\repository\io\netty\netty-common\4.1.77.Final\netty-common-4.1.77.Final.jar;E:\Maven\repository\io\netty\netty-buffer\4.1.77.Final\netty-buffer-4.1.77.Final.jar;E:\Maven\repository\io\netty\netty-transport\4.1.77.Final\netty-transport-4.1.77.Final.jar;E:\Maven\repository\io\netty\netty-resolver\4.1.77.Final\netty-resolver-4.1.77.Final.jar;E:\Maven\repository\io\netty\netty-codec\4.1.77.Final\netty-codec-4.1.77.Final.jar;E:\Maven\repository\io\netty\netty-handler\4.1.77.Final\netty-handler-4.1.77.Final.jar;E:\Maven\repository\io\netty\netty-transport-sctp\4.1.77.Final\netty-transport-sctp-4.1.77.Final.jar;E:\Maven\repository\io\netty\netty-handler-proxy\4.1.77.Final\netty-handler-proxy-4.1.77.Final.jar;E:\Maven\repository\io\netty\netty-codec-http\4.1.77.Final\netty-codec-http-4.1.77.Final.jar;E:\Maven\repository\io\netty\netty-codec-http2\4.1.77.Final\netty-codec-http2-4.1.77.Final.jar;E:\Maven\repository\io\netty\netty-codec-memcache\4.1.77.Final\netty-codec-memcache-4.1.77.Final.jar;E:\Maven\repository\io\netty\netty-codec-redis\4.1.77.Final\netty-codec-redis-4.1.77.Final.jar;E:\Maven\repository\io\netty\netty-codec-socks\4.1.77.Final\netty-codec-socks-4.1.77.Final.jar;E:\Maven\repository\io\netty\netty-codec-stomp\4.1.77.Final\netty-codec-stomp-4.1.77.Final.jar;E:\Maven\repository\io\netty\netty-codec-mqtt\4.1.77.Final\netty-codec-mqtt-4.1.77.Final.jar;E:\Maven\repository\io\netty\netty-codec-haproxy\4.1.77.Final\netty-codec-haproxy-4.1.77.Final.jar;E:\Maven\repository\io\netty\netty-codec-dns\4.1.77.Final\netty-codec-dns-4.1.77.Final.jar;E:\Maven\repository\com\google\protobuf\protobuf-java\2.6.1\protobuf-java-2.6.1.jar;E:\Maven\repository\io\netty\netty-tcnative-boringssl-static\2.0.52.Final\netty-tcnative-boringssl-static-2.0.52.Final.jar;E:\Maven\repository\io\netty\netty-tcnative-classes\2.0.52.Final\netty-tcnative-classes-2.0.52.Final.jar;E:\Maven\repository\io\netty\netty-tcnative-boringssl-static\2.0.52.Final\netty-tcnative-boringssl-static-2.0.52.Final-linux-x86_64.jar;E:\Maven\repository\io\netty\netty-tcnative-boringssl-static\2.0.52.Final\netty-tcnative-boringssl-static-2.0.52.Final-linux-aarch_64.jar;E:\Maven\repository\io\netty\netty-tcnative-boringssl-static\2.0.52.Final\netty-tcnative-boringssl-static-2.0.52.Final-osx-x86_64.jar;E:\Maven\repository\io\netty\netty-tcnative-boringssl-static\2.0.52.Final\netty-tcnative-boringssl-static-2.0.52.Final-osx-aarch_64.jar;E:\Maven\repository\io\netty\netty-tcnative-boringssl-static\2.0.52.Final\netty-tcnative-boringssl-static-2.0.52.Final-windows-x86_64.jar;E:\Maven\repository\org\conscrypt\conscrypt-openjdk-uber\2.5.2\conscrypt-openjdk-uber-2.5.2.jar;E:\Maven\repository\com\jcraft\jzlib\1.1.3\jzlib-1.1.3.jar;E:\Maven\repository\com\yammer\metrics\metrics-core\2.2.0\metrics-core-2.2.0.jar;E:\Maven\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;E:\Maven\repository\io\netty\netty-transport-udt\4.1.77.Final\netty-transport-udt-4.1.77.Final.jar;E:\Maven\repository\com\barchart\udt\barchart-udt-bundle\2.3.0\barchart-udt-bundle-2.3.0.jar;E:\Maven\repository\io\netty\netty-transport-rxtx\4.1.77.Final\netty-transport-rxtx-4.1.77.Final.jar;E:\Maven\repository\org\rxtx\rxtx\2.1.7\rxtx-2.1.7.jar;E:\Maven\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;E:\Maven\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;E:\Maven\repository\org\bouncycastle\bcpkix-jdk15on\1.69\bcpkix-jdk15on-1.69.jar;E:\Maven\repository\org\bouncycastle\bcutil-jdk15on\1.69\bcutil-jdk15on-1.69.jar;E:\Maven\repository\org\bouncycastle\bcprov-jdk15on\1.69\bcprov-jdk15on-1.69.jar;E:\Maven\repository\com\sun\activation\javax.activation\1.2.0\javax.activation-1.2.0.jar io.netty.example.http.upload.HttpUploadServerHandler
a
Process finished with exit code 0
当然,将stream()换成parallelStream()也是一样的结果。
2、第二种肯定是for – each循环了
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("1");
list.add("3");
list.add("a");
list.add("c");
list.add("5");
list.add("d");
for (String e : list){
if (e.equals("a")){
System.out.println(e);
}
}
}
结果当然同上。
其实,for – each 循环底层只是隐藏了迭代器iteractor。
####### 第三种就是iteractor迭代器了:
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("1");
list.add("3");
list.add("a");
list.add("c");
list.add("5");
list.add("d");
for (Iterator iterator = list.iterator(); iterator.hasNext();){
if (iterator.next().equals("a")){
iterator.remove();
}
}
list.forEach(e -> System.out.println(e));
}
结果:
1
3
c
5
d
版权声明:本文为user_self原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。