zoukankan      html  css  js  c++  java
  • Guava的学习1

    1.尽量避免使用null

    1.1 不要在Set中使用null或将null当做map的键值

    1.2 map中的值应该都不为null,因为通过get方法可能有二义性,可以对值为空的单独创建一个集合。

    Guava中用Optional代表T类型的引用,用引用存在和引用缺失来表示null与非null(不包含null值引用,只有引用缺失)

    2.前置条件:一条条件语句,在方法执行前必须为真

    在编码时,如果某个值有多重的前置条件,我们建议你把它们放到不同的行,这样有助于在调试时定位。此外,把每个前置条件放到不同的行,也可以帮助你编写清晰和有用的错误消息。

    3.Object方法

    1.使用Objects.equal()来代替平时的Object.equals方法,因为后者需要对Object是否为null

    2.Objects.hashCode(Object...)会对传入的字段序列计算出合理的、顺序敏感的散列值

    3. 通过toStringHelper方法来帮助我们写toString,例如:

      String s = MoreObjects.toStringHelper("AA").add("x",1).toString();

      System.out.println(s);//打印结果为AA{x=1}

    4.新集合类型

    4.1Multiset:用于对键值进行计数

    1.没有元素顺序限制的 ArrayList

    • add(E)添加单个给定元素
    • iterator()返回一个迭代器,包含 Multiset 的所有元素(包括重复的元素)
    • size()返回所有元素的总个数(包括重复的元素)

    2. Map<E, Integer>,键为元素,值为计数

     

    • count(Object)返回给定元素的计数。HashMultiset.count 的复杂度为 O(1),TreeMultiset.count 的复杂度为 O(log n)。
    • entrySet()返回 Set<Multiset.Entry>,和 Map 的 entrySet 类似。//组成一个视图
    • elementSet()返回所有不重复元素的 Set,和 Map 的 keySet()类似。//将键值组成一个Set集合
    • 所有 Multiset 实现的内存消耗随着不重复元素的个数线性增长。

    Multiset.addAll(Collection)可以添加 Collection 中的所有元素并进行计数,这比用 for 循环往 Map 添加元素和计数方便多了。

    Multiset的创建方式为:Multiset<String> mt = HashMultiset.create();

    一些方法:

    Multiset和Map的区别:

    • Multiset 中的元素计数只能是正数。任何元素的计数都不能为负,也不能是 0。elementSet()和 entrySet()视图中也不会有这样的元素。
    • multiset.size()返回集合的大小,等同于所有元素计数的总和。对于不重复元素的个数,应使用 elementSet().size()方法。(因此,add(E)把 multiset.size()增加 1)
    • multiset.iterator()会迭代重复元素,因此迭代长度等于 multiset.size()。
    • Multiset 支持直接增加、减少或设置元素的计数。setCount(elem, 0)等同于移除所有 elem。
    • 对 multiset 中没有的元素,multiset.count(elem)始终返回 0。

    4.2Multimap:用于一对多的映射

    1.ListMultimap的创建:ListMultimap<String,LinkedList<String>> ml = ArrayListMultimap.create();

      这个代表一个String可以映射很多个LinkedList<String>

      String ww = ml.get("66").get(1).get(1);//首先获取String为"66"的,第二个LinkedList<String>中的第二个元素

      如果创建方式是:ListMultimap<String,String> ml = ArrayListMultimap.create();

      那么只需要两个get就可以了。

    2.SetMultimap的创建:SetMultimap<String,String>setMultimap = HashMultimap.create();

    二者调用get方法的返回值不同,比如创建之后,SetMultimap返回值是Set<String>,而上面的返回值是List<String>(第二个例子创建的)

    4.3BiMap:完成双向映射:

    可以通过下面的子类完成实例化:

     

    可以用 inverse()反转 BiMap<K, V>的键值映射。
    保证值是唯一的,因此 values()返回 Set 而不是普通的 Collection。
    在 BiMap 中,如果你想把键映射到已经存在的值,会抛出 IllegalArgumentException 异常。如果对特定值,你想要强制替换它的键,请使用 BiMap.forcePut(key, value)。



  • 相关阅读:
    Yii2 数据操作Query Builder
    Yii2.0 rules验证规则大全
    git错误解决 -- 小结
    为什么结构化编程、面向对象编程、软件工程、架构设计最后没有成为软件领域的银弹
    系统和子系统、架构和框架、模块和组件
    MyBatis实战之动态SQL
    Controller如何写的更简化
    MyBatis实战之映射器
    WiFi密码忘记了怎么办之解决方案
    Linux常用监控服务器性能命令
  • 原文地址:https://www.cnblogs.com/TheQi/p/10489185.html
Copyright © 2011-2022 走看看