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表
- key.hashCode() =>确定索引
- key.equals(其它元素)
- 没有相等的,添加
- 如果有相等的,覆盖
TreeMap
TreeMap底层是红黑树
- 以key为依据判断节点在树中的位置
- 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之间的平均值