首页 > 编程语言 >读Java实战(第二版)笔记05_Collection API的增强功能

读Java实战(第二版)笔记05_Collection API的增强功能

时间:2023-02-09 07:22:05浏览次数:81  
标签:Map Set Java 05 1.3 指定 Collection 列表 元素

1. 集合工厂

1.1. Arrays.asList()

1.1.1. 创建了一个固定大小的列表

1.1.2. 列表的元素可以更新

1.1.3. 不能增加或者删除

1.1.4. 大小固定的可变数组

1.2. 没有Arrays.asSet()

1.2.1. 可以向HashSet的构造器传递一个列表实现

1.2.2. Stream.of 结合Collectors.toSet()实现

1.2.3. 可变的Set

1.3. List.of

1.3.1. 一个只读列表

1.3.2. 保护你的集合,以免被意外地修改

1.3.3. 不要在工厂方法创建的列表中存放null元素

1.3.4. 10个元素是分水岭,Set,Map也一样

1.3.5. 使用List.of创建超过10个元素的列表

1.3.6. 使用List.of创建不超过10个元素的列表

1.4. Set.of

1.4.1. 创建列表元素的不可变Set集合

1.5. Map.of

1.5.1. 创建不到10个键值对的小型不可变Map

1.6. Map.ofEntries

1.6.1. 以变长参数列表形式组织的Map.Entry<K, V>对象作为参数

1.6.2. 创建额外的对象,从而实现对键和值的封装

1.6.3. 不可变Map

1.6.4. Map.entry

1.6.4.1. 用于创建Map.Entry对象的工厂方法

1.7. Java9

1.8. 除非需要进行某种形式的数据处理并对数据进行转换,否则应该尽量使用工厂方法

2. 定长元素版本的函数

2.1. 没有分配数组、初始化以及最后对它进行垃圾回收的开销

3. 变参版本的函数

3.1. 需要额外分配一个数组

3.2. 这个数组被封装于列表中

3.3. 要负担分配数组、初始化以及最后对它进行垃圾回收的开销

4. 使用Set

4.1. removeIf

4.1.1. 移除集合中匹配指定谓词的元素

5. 使用List

5.1. removeIf

5.1.1. 移除集合中匹配指定谓词的元素

5.2. replaceAll

5.2.1. 用一个函数(UnaryOperator)替换元素

5.3. sort

5.3.1. 对列表自身的元素进行排序

6. Java8

6.1. 改变的是集合自身

7. 使用Map

7.1. forEach

7.1.1. 接受一个BiConsumer,以Map的键和值作为参数

7.1.2. 让代码更简洁

7.2. 排序

7.2.1. Entry.comparingByValue

7.2.2. Entry.comparingByKey

7.3. getOrDefault

7.3.1. 提供一个默认值

7.3.2. 在Map中找不到指定的键时,该默认值会作为返回值

7.3.3. 如果键在Map中存在,但碰巧被赋予的值是null,那么getOrDefault还是会返回null

7.3.4. 无论该键存在与否,作为参数传入的表达式每次都会被执行

7.4. computeIfAbsent

7.4.1. 如果指定的键没有对应的值(没有该键或者该键对应的值是空),那么使用该键计算新的值,并将其添加到Map中

7.4.2. 应用场景是缓存信息

7.5. computeIfPresent

7.5.1. 如果指定的键在Map中存在,就计算该键的新值,并将其添加到Map中

7.5.2. 如果生成结果的方法返回的值为空,那么当前的映射就会从Map中移除

7.6. compute

7.6.1. 使用指定的键计算新的值,并将其存储到Map中

7.7. remove

7.7.1. 从Map中删除指定键对应的映射条目

7.8. replaceAll

7.8.1. 通过BiFunction替换Map中每个项的值

7.9. Replace

7.9.1. 如果键存在,就可以通过该方法替换Map中该键对应的值

7.9.2. 可以仅在原有键对应某个特定的值时才进行替换

7.10. merge

7.10.1. 在合并时对值有更加灵活的控制

7.10.1.1. 使用BiFunction方法处理重复的键

7.10.1.2. 执行初始化检查

7.10.2. 如果指定的键并没有关联值,或者关联的是一个空值,那么会将它关联到指定的非空值

7.10.3. 否则,会用给定映射函数的[返回值]替换该值,如果映射函数的返回值为空就删除[该键]

7.11. putAll

7.11.1. Map中不能含有重复的键

8. 桶(bucket)

8.1. 由链接列表(LinkedList)实现的

8.2. 时间复杂度是O(n)

9. 同步式的Hashtable

9.1. 标准的HashMap是不带同步的

10. ConcurrentHashMap

10.1. 应对高并发的场景

10.1.1. 读写性能都更好

10.1.2. 其内部实现基于分段锁

10.1.3. 允许执行并发的添加和更新操作

10.2. forEach

10.2.1. 对每个(键,值)对执行指定的操作

10.3. reduce

10.3.1. 依据归约函数整合所有(键,值)对的计算结果

10.4. search

10.4.1. 对每个(键,值)对执行一个函数,直到函数取得一个非空值

10.5. 参数形式

10.5.1. 使用键(forEachKey, reduceKeys, searchKeys)

10.5.2. 使用值(forEachValue, reduceValues, searchValues)

10.5.3. 使用Map.Entry对象(forEachEntry, reduceEntries, searchEntries)

10.6. 注要点

10.6.1. 都不会对ConcurrentHashMap的状态上锁

10.6.2. 只是在运行中动态地对对象加锁

10.6.3. 执行操作的函数不应对执行顺序或其他对象或可能在运行中变化的值有任何的依赖

10.6.4. int、long、double等基础类型的归约操作(reduceValuesToInt、reduce-KeysToLong等)会更加高效

10.7. 并行阈值

10.7.1. Map的规模比指定的阈值小,方法就只能顺序执行

10.7.2. 使用通用线程池时,如果把并行阈值设置为1将获得最大的并行度

10.7.3. 阈值设定为Long.MAX_VALUE时,方法将以单线程的方式运行

10.8. mappingCount

10.8.1. 以长整形long返回Map中的映射数目

10.9. keySet

10.9.1. 以Set的形式返回ConcurrentHashMap的一个视图

10.9.2. Map中的变化会反映在返回的Set中

标签:Map,Set,Java,05,1.3,指定,Collection,列表,元素
From: https://www.cnblogs.com/lying7/p/17103969.html

相关文章

  • Java + SikuliX 基于图像实现自动化测试
    转载请注明出处❤️作者:测试蔡坨坨原文链接:caituotuo.top/6d2908e8.html你好,我是测试蔡坨坨。由于目前大多数GUI工具均需要依赖于程序类型进行特征属性识别,例如:Selenium......
  • java基础面试题
    java基础面试题1. Java有哪些数据类型?Java中有8种基本数据类型,分别为:6种数字类型(四个整数形,两个浮点型):byte、short、int、long、float、double,1种字符类型:char,1......
  • JavaDoc
    JavaDochttps://www.cnblogs.com/linj7/p/14339381.htmlAndroidStudio配置plugin中找到javadoc插件后进行安装在想要添加文档说明的方法或类上使用快捷键$${\boxed{a......
  • 01Java常用类
    Object类Object概述Object类是超类,基类,所有类都默认直接继承Object类。Object类中定义的方法,是所有对象都具备的方法。Object类可以存储任何类​ -可以作为......
  • 02.java基础(一)java的基础、方法和数组
    目录Java基础Java特性Java程序运行机制Java基础语法1.数据类型基本类型引用类型数据类型扩展String类型内存分配过程转义字符类型转换变量常量2.运算符逻辑运算符、位运算......
  • 03java基础(二)java面向对象
    目录类和对象的基本使用基础概念类的初始化用new关键字创建对象创建对象的内存分析OOP的三大特征类的封装类的继承继承的基础使用继承基本概念extends关键字的基本使用supe......
  • 从零开始的java安装到环境搭建
    安装jdk: 参考wiki:  https://www.liaoxuefeng.com/wiki/1252599548343744/1280507291631649https://www.oracle.com/java/technologies/downloads/#java19安装环境......
  • IDEA运行Spring工程报错:java: 警告: 源发行版 17 需要目标发行版 17
    问题:IDEA运行Spring工程报错:java:警告:源发行版17需要目标发行版17   问题原因:idea工具jdk版本使用问题解决办法:1、File(文件)->ProjectStructure(项目......
  • IDEA运行Spring项目报错:java: 无法访问org.springframework.boot.SpringApplication,类
    报错:java:无法访问org.springframework.boot.SpringApplication错误的类文件:/Users/***/Repository/org/springframework/boot/spring-boot/3.0.2/spring-boot-3.0.2......
  • SpringBoot整合JavaMail
    1、发送简单邮件导入依赖implementation'org.springframework.boot:spring-boot-starter-mail:3.0.2'开启相关协议,获取密码~我是用的是QQ邮箱,其他的也一样配置一下......