哈希与map集合使用遍历,steam流介绍

1 篇文章 0 订阅
0 篇文章 0 订阅

1.HashSet集合
底层数据结构是哈希表
存取无序
不可以存储重复元素
没有索引,不能使用普通for循环遍历
1.2存储字符串并遍历

public class HashSetDemo {
public static void main(String[] args) {
//创建集合对象
HashSet set = new HashSet();

    //添加元素
    set.add("hello");
    set.add("world");
    set.add("java");
    //不包含重复元素的集合
    set.add("world");

    //遍历
    for(String s : set) {
        System.out.println(s);
    }
}

}
1.2哈希表结构

JDK1.8以前
​ 数组 + 链表

JDK1.8以后
节点个数少于等于8个
​ 数组 + 链表
节点个数多于8个
​ 数组 + 红黑树
2.Map集合
2.1 Map集合概述

interface Map<K,V>  K:键的类型;V:值的类型

2.2Map集合的特点
双列集合,一个键对应一个值
键不可以重复,值可以重复
2.2 Map集合的基本功能
V put(K key,V value)添加元素
V remove(Object key)根据键删除键值对元素
void clear()移除所有的键值对元素

boolean containsKey(Object key)判断集合是否包含指定的键

boolean containsValue(Object value)判断集合是否包含指定的值

boolean isEmpty()判断集合是否为空int size()集合的长度,也就是集合中键值对的个数
2.3Map集合的获取功能

方法名说明
V get(Object key)根据键获取值
Set keySet()获取所有键的集合
Collection values()获取所有值的集合
Set<Map.Entry<K,V>> entrySet()获取所有键值对对象的集合

2.4Map集合的遍历1

public class MapDemo01 { public static void main(String[] args) { //创建集合对象
Map<String, String> map = new HashMap<String, String>();​
//添加元素
map.put(“张无忌”, “赵敏”);
map.put(“郭靖”, “黄蓉”);
map.put(“杨过”, “小龙女”);​
//获取所有键的集合。用keySet()方法实现
Set keySet = map.keySet();
//遍历键的集合,获取到每一个键。用增强for实现
for (String key : keySet) {
//根据键去找值。用get(Object key)方法实现
String value = map.get(key);
System.out.println(key + “,” + value);
}
}
}
2.5Map集合的遍历2

步骤分析

  • 获取所有键值对对象的集合

    • Set<Map.Entry<K,V>> entrySet():获取所有键值对对象的集合
  • 遍历键值对对象的集合,得到每一个键值对对象

    • 用增强for实现,得到每一个Map.Entry
  • 根据键值对对象获取键和值

    • 用getKey()得到键
    • 用getValue()得到值

    public class MapDemo02 {
    public static void main(String[] args) {
    //创建集合对象
    Map<String, String> map = new HashMap<String, String>();

      //添加元素
      map.put("张无忌", "赵敏");
      map.put("郭靖", "黄蓉");
      map.put("杨过", "小龙女");
    
      //获取所有键值对对象的集合
      Set<Map.Entry<String, String>> entrySet = map.entrySet();
      //遍历键值对对象的集合,得到每一个键值对对象
      for (Map.Entry<String, String> me : entrySet) {
          //根据键值对对象获取键和值
          String key = me.getKey();
          String value = me.getValue();
          System.out.println(key + "," + value);
      }
    

    }
    }

3.HashMap集合
3.1HashMap集合概述和特点
HashMap底层是哈希表结构的
依赖hashCode方法和equals方法保证键的唯一
如果键要存储的是自定义对象,需要重写hashCode和equals方法

5.TreeMap集合

4TreeMap集合概述和特点
TreeMap底层是红黑树结构
依赖自然排序或者比较器排序,对键进行排序
如果键存储的是自定义对象,需要实现Comparable接口或者在创建TreeMap对象时候给出比较器排序规则
5.可变参数
5.1可变参数介绍
可变参数又称参数个数可变,用作方法的形参出现,那么方法参数个数就是可变的了
方法的参数类型已经确定,个数不确定,我们可以使用可变参数
可变参数定义格式

修饰符 返回值类型 方法名(数据类型… 变量名) {  }

可变参数的注意事项
这里的变量其实是一个数组
如果一个方法有多个参数,包含可变参数,可变参数要放在最后

public class ArgsDemo01 {
public static void main(String[] args) {
System.out.println(sum(10, 20));
System.out.println(sum(10, 20, 30));
System.out.println(sum(10, 20, 30, 40));

    System.out.println(sum(10,20,30,40,50));
    System.out.println(sum(10,20,30,40,50,60));
    System.out.println(sum(10,20,30,40,50,60,70));
    System.out.println(sum(10,20,30,40,50,60,70,80,90,100));
}

// public static int sum(int b,int… a) {
// return 0;
// }

public static int sum(int... a) {
    int sum = 0;
    for(int i : a) {
        sum += i;
    }
    return sum;
}

}
5.2创建不可变集合
方法介绍
在List、Set、Map接口中,都存在of方法,可以创建一个不可变的集合

这个集合不能添加,不能删除,不能修改

但是可以结合集合的带参构造,实现集合的批量添加
在Map接口中,还有一个ofEntries方法可以提高代码的阅读性

首先会把键值对封装成一个Entry对象,再把这个Entry对象添加到集合当中
6.Stream流
Stream流的好处
直接阅读代码的字面意思即可完美展示无关逻辑方式的语义:获取流、过滤姓张、过滤长度为3、逐一打印
Stream流把真正的函数式编程风格引入到Java中
代码简洁
6.1Stream流的常见生成方式

  • Stream流的三类方法

    • 获取Stream流
      • 创建一条流水线,并把数据放到流水线上准备进行操作
    • 中间方法
      • 流水线上的操作
      • 一次操作完毕之后,还可以继续进行其他操作
    • 终结方法
      • 一个Stream流只能有一个终结方法
      • 是流水线上的最后一个操作
  • 生成Stream流的方式

    • Collection体系集合

      使用默认方法stream()生成流, default Stream stream()

    • Map体系集合

      把Map转成Set集合,间接的生成流

    • 数组
      通过Arrays中的静态方法stream生成流

    • 同种数据类型的多个数据

      通过Stream接口的静态方法of(T… values)生成流
      6.2Stream流中间操作方法

      • 常见方法
    方法名说明
    Stream filter(Predicate predicate)用于对流中的数据进行过滤
    Stream limit(long maxSize)返回此流中的元素组成的流,截取前指定参数个数的数据
    Stream skip(long n)跳过指定参数个数的数据,返回由该流的剩余元素组成的流
    static Stream concat(Stream a, Stream b)合并a和b两个流为一个流
    Stream distinct()返回由该流的不同元素(根据Object.equals(Object) )组成的流

6.3Stream流终结操作方法

  • 概念
    终结操作的意思是,执行完此方法之后,Stream流将不能再执行其他操作

  • 常见方法

    方法名说明
    void forEach(Consumer action)对此流的每个元素执行操作
    long count()返回此流中的元素数

6.4Stream流的收集操作

  • 概念

    对数据使用Stream流的方式操作完毕后,可以把流中的数据收集到集合中

  • 常用方法

    方法名说明
    R collect(Collector collector)把结果收集到集合中
  • 工具类Collectors提供了具体的收集方式

    方法名说明
    public static Collector toList()把元素收集到List集合中
    public static Collector toSet()把元素收集到Set集合中
    public static Collector toMap(Function keyMapper,Function valueMapper)把元素收集到Map集合中
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值