首页 > 编程语言 > 详细

Java开发手册-集合处理

时间:2021-06-16 00:03:09      阅读:20      评论:0      收藏:0      [点我收藏+]

 

  1. 关于 hashCode 和 equals 的处理
  2. 判断所有集合内部的元素是否为空,使用 isEmpty()方法

1.【强制】关于 hashCode 和 equals 的处理,遵循如下规则:

  1) 只要覆写 equals,就必须覆写 hashCode
  2) 因为 Set 存储的是不重复的对象,依据 hashCode 和 equals 进行判断,所以 Set 存储的对象必须覆写
    这两种方法。
  3) 如果自定义对象作为 Map 的键,那么必须覆写 hashCode 和 equals。
    说明:String 因为覆写了 hashCode 和 equals 方法,所以可以愉快地将 String 对象作为 key 来使用
 
2.【强制】判断所有集合内部的元素是否为空,使用 isEmpty()方法,而不是 size()==0 的方式
说明:在某些集合中,前者的时间复杂度为 O(1),而且可读性更好。
正例:
Map<String, Object> map = new HashMap<>(16);
if(map.isEmpty()) {
  System.out.println("no element in this map.");
}
3.【强制】在使用 java.util.stream.Collectors 类的 toMap()方法转为 Map 集合时,一定要使
用含有参数类型为 BinaryOperator,参数名为 mergeFunction 的方法,否则当出现相同 key
值时会抛出 IllegalStateException 异常
 
说明:参数 mergeFunction 的作用是当出现 key 重复时,自定义对 value 的处理策略。
正例:
List<Pair<String, Double>> pairArrayList = new ArrayList<>(3);
pairArrayList.add(new Pair<>("version", 12.10));
pairArrayList.add(new Pair<>("version", 12.19));
pairArrayList.add(new Pair<>("version", 6.28));
Map<String, Double> map = pairArrayList.stream().collect(
// 生成的 map 集合中只有一个键值对:{version=6.28}
Collectors.toMap(Pair::getKey, Pair::getValue, (v1, v2) -> v2));

Pair<T1, T2> 定义如下:

技术分享图片
class Pair<T1, T2> {
    private T1 key;
    private T2 value;
    public Pair(T1 t11, T2 t22) {
        super();
        this.key = t11;
        this.value = t22;
    }
    public T1 getKey() {
        return key;
    }
    public void setKey(T1 key) {
        this.key = key;
    }
    public T2 getValue() {
        return value;
    }
    public void setValue(T2 value) {
        this.value = value;
    }
}
View Code

当这样写时,报错 java.lang.IllegalStateException: Duplicate key 12.1

Map<String, Double> map = pairArrayList.stream().collect(
       Collectors.toMap(Pair::getKey, Pair::getValue));
反例,下面也会报 IllegalStateException:
String[] departments = new String[] {"iERP", "iERP", "EIBU"};
// 抛出 IllegalStateException 异常
Map<Integer, String> map = Arrays.stream(departments)
.collect(Collectors.toMap(String::hashCode, str -> str));

 

 
 
 
 
 

Java开发手册-集合处理

原文:https://www.cnblogs.com/Vincent-yuan/p/14887602.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!