最近看到官方文档,写下记录。
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 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:JDKbinjava.exe "-javaagent:E:idea2019IntelliJ IDEA 2020.1libidea_rt.jar=61258:E:idea2019IntelliJ IDEA 2020.1bin" -Dfile.encoding=UTF-8 -classpath E:JDKjrelibcharsets.jar;E:JDKjrelibdeploy.jar;E:JDKjrelibextaccess-bridge.jar;E:JDKjrelibextcldrdata.jar;E:JDKjrelibextdnsns.jar;E:JDKjrelibextjaccess.jar;E:JDKjrelibextjfxrt.jar;E:JDKjrelibextlocaledata.jar;E:JDKjrelibextnashorn.jar;E:JDKjrelibextsunec.jar;E:JDKjrelibextsunjce_provider.jar;E:JDKjrelibextsunmscapi.jar;E:JDKjrelibextsunpkcs11.jar;E:JDKjrelibextzipfs.jar;E:JDKjrelibjavaws.jar;E:JDKjrelibjce.jar;E:JDKjrelibjfr.jar;E:JDKjrelibjfxswt.jar;E:JDKjrelibjsse.jar;E:JDKjrelibmanagement-agent.jar;E:JDKjrelibplugin.jar;E:JDKjrelibresources.jar;E:JDKjrelibrt.jar;E:IDEA_projectofficialnetty-netty-4.1.77.Finalexampletargetclasses;E:Mavenrepositoryionettynetty-common4.1.77.Finalnetty-common-4.1.77.Final.jar;E:Mavenrepositoryionettynetty-buffer4.1.77.Finalnetty-buffer-4.1.77.Final.jar;E:Mavenrepositoryionettynetty-transport4.1.77.Finalnetty-transport-4.1.77.Final.jar;E:Mavenrepositoryionettynetty-resolver4.1.77.Finalnetty-resolver-4.1.77.Final.jar;E:Mavenrepositoryionettynetty-codec4.1.77.Finalnetty-codec-4.1.77.Final.jar;E:Mavenrepositoryionettynetty-handler4.1.77.Finalnetty-handler-4.1.77.Final.jar;E:Mavenrepositoryionettynetty-transport-sctp4.1.77.Finalnetty-transport-sctp-4.1.77.Final.jar;E:Mavenrepositoryionettynetty-handler-proxy4.1.77.Finalnetty-handler-proxy-4.1.77.Final.jar;E:Mavenrepositoryionettynetty-codec-http4.1.77.Finalnetty-codec-http-4.1.77.Final.jar;E:Mavenrepositoryionettynetty-codec-http24.1.77.Finalnetty-codec-http2-4.1.77.Final.jar;E:Mavenrepositoryionettynetty-codec-memcache4.1.77.Finalnetty-codec-memcache-4.1.77.Final.jar;E:Mavenrepositoryionettynetty-codec-redis4.1.77.Finalnetty-codec-redis-4.1.77.Final.jar;E:Mavenrepositoryionettynetty-codec-socks4.1.77.Finalnetty-codec-socks-4.1.77.Final.jar;E:Mavenrepositoryionettynetty-codec-stomp4.1.77.Finalnetty-codec-stomp-4.1.77.Final.jar;E:Mavenrepositoryionettynetty-codec-mqtt4.1.77.Finalnetty-codec-mqtt-4.1.77.Final.jar;E:Mavenrepositoryionettynetty-codec-haproxy4.1.77.Finalnetty-codec-haproxy-4.1.77.Final.jar;E:Mavenrepositoryionettynetty-codec-dns4.1.77.Finalnetty-codec-dns-4.1.77.Final.jar;E:Mavenrepositorycomgoogleprotobufprotobuf-java2.6.1protobuf-java-2.6.1.jar;E:Mavenrepositoryionettynetty-tcnative-boringssl-static2.0.52.Finalnetty-tcnative-boringssl-static-2.0.52.Final.jar;E:Mavenrepositoryionettynetty-tcnative-classes2.0.52.Finalnetty-tcnative-classes-2.0.52.Final.jar;E:Mavenrepositoryionettynetty-tcnative-boringssl-static2.0.52.Finalnetty-tcnative-boringssl-static-2.0.52.Final-linux-x86_64.jar;E:Mavenrepositoryionettynetty-tcnative-boringssl-static2.0.52.Finalnetty-tcnative-boringssl-static-2.0.52.Final-linux-aarch_64.jar;E:Mavenrepositoryionettynetty-tcnative-boringssl-static2.0.52.Finalnetty-tcnative-boringssl-static-2.0.52.Final-osx-x86_64.jar;E:Mavenrepositoryionettynetty-tcnative-boringssl-static2.0.52.Finalnetty-tcnative-boringssl-static-2.0.52.Final-osx-aarch_64.jar;E:Mavenrepositoryionettynetty-tcnative-boringssl-static2.0.52.Finalnetty-tcnative-boringssl-static-2.0.52.Final-windows-x86_64.jar;E:Mavenrepositoryorgconscryptconscrypt-openjdk-uber2.5.2conscrypt-openjdk-uber-2.5.2.jar;E:Mavenrepositorycomjcraftjzlib1.1.3jzlib-1.1.3.jar;E:Mavenrepositorycomyammermetricsmetrics-core2.2.0metrics-core-2.2.0.jar;E:Mavenrepositoryorgslf4jslf4j-api1.7.30slf4j-api-1.7.30.jar;E:Mavenrepositoryionettynetty-transport-udt4.1.77.Finalnetty-transport-udt-4.1.77.Final.jar;E:Mavenrepositorycombarchartudtbarchart-udt-bundle2.3.0barchart-udt-bundle-2.3.0.jar;E:Mavenrepositoryionettynetty-transport-rxtx4.1.77.Finalnetty-transport-rxtx-4.1.77.Final.jar;E:Mavenrepositoryorgrxtxrxtx2.1.7rxtx-2.1.7.jar;E:Mavenrepositorychqoslogbacklogback-classic1.2.3logback-classic-1.2.3.jar;E:Mavenrepositorychqoslogbacklogback-core1.2.3logback-core-1.2.3.jar;E:Mavenrepositoryorgbouncycastlebcpkix-jdk15on1.69bcpkix-jdk15on-1.69.jar;E:Mavenrepositoryorgbouncycastlebcutil-jdk15on1.69bcutil-jdk15on-1.69.jar;E:Mavenrepositoryorgbouncycastlebcprov-jdk15on1.69bcprov-jdk15on-1.69.jar;E:Mavenrepositorycomsunactivationjavax.activation1.2.0javax.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 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 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



