Map集合以及Map集合的实现类&Stream流的使用

本文介绍了Java中的Map集合,包括HashMap、TreeMap和LinkedHashMap的特点和使用。HashMap基于hash表,TreeMap使用红黑树进行排序,而LinkedHashMap保持插入顺序。此外,文章还讲解了可变参数、不可变集合的概念,并详细阐述了Stream流的使用,如filter、map、skip、limit、distinct等转换方法以及forEach等终结方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Map

遍历Map集合
//方法一
//获得所有的键的Set集合
Set<Object> set = map.ketSet();
for(Object key : set){
    //根据具体的键获得具体的值
    Object value = map.get(key);
}
//方法二
//获得所有的键值对对象集合
Set<Map.Entry<Object, Object>> entrySet = map.entrySet();
for(Map.Entry<Object, Object>> entry : entrySet){
    entry.getKey();//获取该键值对对象的键
    entry.getValue();//获取该键值对对象的值
}
//方法三
map.forEach((key,value) -> {//其原理仍然是第二种遍历方式
});
HashMap

HashMap底层是hash表

  1. key.hashCode() =>确定索引
  2. key.equals(其它元素)
    • 没有相等的,添加
    • 如果有相等的,覆盖
TreeMap

TreeMap底层是红黑树

  1. 以key为依据判断节点在树中的位置
  2. key要么实现自然排序或TreeMap提供比较器

使用TreeMap必须要提供排序方式,当自然排序和比较器排序都提供了时,以比较器为准

HashMap和TreeMap插入和遍历顺序都不一致,如果想要一致可以选择LinkedHashMap

可变参数

public void 方法名(参数类型...变量名){
}
  • 可变参数要放在参数列表中最后一位

  • 一个方法的参数类表中只能有一个可变参数

  • 如果可变参数的方法与其他方法发生重载,那么其他方法的执行优先于可变参数的执行

不可变集合

不可变集合是JDK1.9才有的

List.of
Set.of
Map.of
//JDK1.9之前的操作方法
//不可变集合
List<Integer> list = Arrays.asList(1,2,3);
//把不可变集合的元素批量加入到可变集合中
ArrayList<Integer> list = new ArrayList<>(integers);

Stream

Stream流: - 生成流 - 执行中间操作(转换操作) - 执行终结操作

转换方法
  • filter : 过滤, 接收一个Lambda表达式,参数代表集合的元素,返回值是布尔类型,true表示留下,false表示过滤掉
  • map : 转换 接收一个Lambda表达式,参数列表是集合中的每一个元素,(x -> x * 2)按照规则,将元素转化成另一个元素
  • skip : 跳过集合中前面几个元素
  • limit : 可以获取到流中的前n个元素
  • distinct : 去重,去除流中重复的元素
  • concat : 合并,将两个流合并为一个流
  • sorted() : 采用自然排序法
  • sorted(比较器) : 采用比较器排序,((a, b)->比较规则 返回一个int})
终结方法
  • forEach(Consumer) : 可传入Lambda表达式, ( x -> 进行消费处理)

  • count :

    //纯数字流在终结方法中多了一些跟数字有关的运算
    System.out.println(IntStream.range(0, 10).sum());//获取从0-9的和
    System.out.println(IntStream.range(0, 10).max().getAsInt());//获取从0-9中最大的数据
    System.out.println(IntStream.range(0, 10).min().getAsInt());//获取从0-9中最小的数据
    System.out.ptintln(IntStream.range(0, 10).average().getAsDouble());//获取从0-9之间的平均值
    
    1. 使用流修改数据后,不会影响原始数据
    2. 流一旦调用了终结方法,就不能调用其他方法了,否则会出现IllegalStateException(非法状态异常)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值