首页 > 编程语言 >温故而知新——Java双列集合Map&Stream流

温故而知新——Java双列集合Map&Stream流

时间:2022-11-11 15:46:50浏览次数:40  
标签:温故而知新 Map 遍历 Java HashMap Stream 练习 集合

总体目录:

image

01-双列集合的特点

image

02-Map集合常用的API

Map是顶层接口,常用方法如下:
image
size()、isEmpty()、clear()方法容易理解;
put()方法的细节:如果第一次添加元素,返回值为null;如果覆盖k-V,则返回被覆盖的V;remove()方法会返回被删除的V,而不是K
containsKey()、containsValue()的返回值都是布尔型;

03-Map集合的第一种遍历方式(键找值)

创建HashMap对象,添加k-V;利用keySet()方法获取所有的key,得到key的Set集合,遍历(有3种遍历方式,增强for;迭代器;forEach)set集合,通过get(key)获取对应的值即可
image

04-Map集合的第二种遍历方式(键值对)

创建HashMap对象,添加k-V;利用map的entrySet()方法直接获取所有的key-Value,遍历(有3种遍历方式,增强for;迭代器;forEach)entries集合,通过getKey()和getValue()方法获取对应的值即可
注意:Set<Map.Entry<String,String>> 里的Entry前面的Map可以不写,但一般写上比较好,因为这里的Entry是Map的内部接口;

image

05-Map集合的第三种遍历方式(lambda表达式)

其实底层还是用到entrySet()和增强for遍历;只不过直接遍历map
这里的forEach(new BiConsumer(){

});
image

06-HashMap基本的使用

  1. hashMap的底层仍是哈希表结构;
  2. 依赖hashCode()和equals()方法保证键的唯一;
  3. 如果K存储的是自定义对象,需要重写hashCode()和equals()方法;但v不需要;
    image

07-HashMap练习一(存储自定义对象)

存储自定义对象为键是,需要重写2个方法
image

08-HashMap练习二(利用Map集合进行统计)
09-LinkedHashMap

比较简单,就不贴图了

10-TreeMap的基本使用和基础练习1

TreeMap本身就是按照-K-的升序进行排列

同样可以自定义排序规则:
在创建对象时,利用new Comaparator接口实现升序、降序的操作。
image

11-TreeMap练习2-键位置添加自定义对象

如果是自定义的对象进行重新指定排序规则:
必须在类哪里继承接口Comparable<T>,这里的斜杠是为了转义,避免无法看到泛型;但一般这个泛型都是需要修改排序规则的类
image

12-TreeMap练习3-利用TreeMap进行统计

查表法无法适用时,用Map的不同实现类:
以下代码的思路:如果已经存在,获取V,v++,在添加上即可;不存在,直接添加,且 V = 1;
image

总结:
image

13-HashMap源码超详细解析(一)

Ctrl+F12,展示代码的整体结构,包括类C,方法M,属性F,接口I等基本组成部分。
源码解析在下面。

14-HashMap源码超详细解析(二)
15-HashMap源码超详细解析(三)
16-HashMap源码超详细解析(四)
17-TreeMap源码超详细解析(一) 这个源码分析没有好截图的,阿伟都是用资料的形式发布,我没有资料,所以没法看到源码及注释

Map的选择:
默认用HashMap;保证存取有序,LinkedHashMap;排序,TreeMap

image

19-可变参数

用法:参数类型...参数名
以前如何计算多个参数呢?使用一个数组接收多个参数,再对数组进行运算即可。
但JDK5以后,就有了可变参数:底层还是数组,但不用自己创建,把其当成一个数组,直接调用参数名即可
image

可变参数的细节
image

20-集合工具类Collections(重要)

常用API,一般都是自己测试这些API,便于加深印象:
image

21-综合练习1-随机点名器的两种实现方式

猜测:shuffle()方法
视频:一是用Random类(之所以没想到,是因为我以为就是用上集的工具类);二是用shuffle(),每次获取索引为0的value

22-综合练习2-带有概率的随机点名

感觉这里的代码不是很好
image

23-综合练习3-不重复的随机点名

好家伙,直接把点过名的同学直接删除,属实是一劳永逸了

参考上面的删除思想,不是真的把名字删掉,二是存在另一个集合里面,然后把数据返回(addAll(Collection <T>)方法)去,再次遍历即可
image

24-综合练习4~5-带权重的随机点名项目
现在还不会

25-综合练习6-集合嵌套

就是一个省 = 多个市 的数据格式,用的Map而已

选择创建什么样的数据结构:
image
之所以用集合的嵌套,是为了防止以后操作不便罢了
image

不可变集合超详解

有一定的使用范围:
image

Stream流-01-初爽Stream流(感觉真好用)

不同对象使用stream流的方法:
list.stream();Arrays.stream(arr);Stream.of(1,2,3,4,5)
image

样例:
image

静态方法of的注意事项:
image

Stream流-03-Stream流的中间方法

常见中间方法:利用Stream.contact()时要注意:尽量是同类型,负责就会产生一个父类型,要合并的就是子类型
image

注意事项:
一个流只能使用一次!多了就会报错!但你想实现某个功能,那就只能利用链式编程了!为了增强阅读性,可以换行
image

Stream流-04-Stream流终结方法详解

常见方法:
image

方法的演示:
forEach();count()方法
image

toArray();
image

Stream流-05-收集方法collect超详解

将数据收集到List、Set或者Map(稍微麻烦一点点)中:
image

对Map进行解释(完整方式和lambda方式):
image
image

对Stream流整体进行总结:
就是简化对数组、集合的操作
image

Stream流-06-综合练习1-数字过滤
简单
image

Stream流-07-综合练习2-字符串过滤并收集
稍微复杂一点:
image
简化版--Map
image

Stream流-08-综合练习3-自定义对象过滤并收集
比上面的更加复杂一点(Actor是自定义的类):
image
image

标签:温故而知新,Map,遍历,Java,HashMap,Stream,练习,集合
From: https://www.cnblogs.com/fromWell888Dare/p/16812389.html

相关文章