guava新集合类型——Multimap
2016-04-27 00:00
363 查看
guava的大名其实是早有耳闻,但直到前段时间才真正用到了,也切实感受到了为什么那么多开发者都推崇guava。
第一个用到guava的是它的一个集合类型:Multimap。
我们有时候会碰到一些比较复杂的数据结构,诸如:
这个时候如果知道guava的Multimap的话,就会觉得立刻变得简单了许多。接下来看一个实际场景:
要把一个地区列表按照省份分类,可以根据身份获取省份下面城市的列表。下面是传统的方法:
接下去是multiMap实现方式,看上去简洁美观了好多:
有人会有疑问Map的Key不是唯一的嘛,同一个key放入不同的值,岂不是会被最后放入的值覆盖?其实不然,这也正是Multimap的好处之一:一键多值。
写个main方法测试一下:
结果如下:
结果两种方式都能返回,那么哪一种性能更好呢?
经测试,当数据量到达10万级别时,两者速度开始相当,数据量越小,老的方式越快。
所以如果是追求简约美观的代码,同时又想很方便的处理复杂的数据结构,可以用Multimap;
但是如果对于性能有特别要求的,建议还是用传统的方式。
第一个用到guava的是它的一个集合类型:Multimap。
我们有时候会碰到一些比较复杂的数据结构,诸如:
Map<K, List<V>>。这样的结构无论是拼装还是读取都会觉得比较烦。如果是调用第三方服务,对方给你返回的是这种结构的话,你还得遍历出来,然后进行数据的转换之后再重新拼装。相信对很多人来讲都会苦不堪言。
这个时候如果知道guava的Multimap的话,就会觉得立刻变得简单了许多。接下来看一个实际场景:
要把一个地区列表按照省份分类,可以根据身份获取省份下面城市的列表。下面是传统的方法:
private static Map<String, List<String>> normalSort(List<Area> areaList) {Map<String, List<String>> resultMap = new HashMap<String, List<String>>(); for (Area area : areaList) {if (resultMap.get(area.getProvince()) == null) {List<String> list = new ArrayList<String>();list.add(area.getCity()); resultMap.put(area.getProvince(), list); } else { resultMap.get(area.getProvince()).add(area.getCity()); } }return resultMap; }
接下去是multiMap实现方式,看上去简洁美观了好多:
private static Multimap<String, String> multiMapSort(List<Area> areaList) { Multimap<String, String> multiMap = ArrayListMultimap.create(); for (Area area : areaList) { multiMap.put(area.getProvince(), area.getCity()); }return multiMap; }
有人会有疑问Map的Key不是唯一的嘛,同一个key放入不同的值,岂不是会被最后放入的值覆盖?其实不然,这也正是Multimap的好处之一:一键多值。
写个main方法测试一下:
public static void main(String[] args) { List<Area> areaList = creatAreaList(); System.out.println(normalSort(areaList).get("浙江").toString()); System.out.println(multiMapSort(areaList).get("浙江").toString()); }
结果如下:
结果两种方式都能返回,那么哪一种性能更好呢?
经测试,当数据量到达10万级别时,两者速度开始相当,数据量越小,老的方式越快。
所以如果是追求简约美观的代码,同时又想很方便的处理复杂的数据结构,可以用Multimap;
但是如果对于性能有特别要求的,建议还是用传统的方式。
相关文章推荐
- UWP中checkbox无法调整宽度
- union和union all的区别
- SQL集合运算:差集、交集、并集
- svn修改新url地址方法(linux,windows,centos)
- Android 隐藏Fragment
- 数据库派生属性
- webService简单开发步骤
- webservice 关于map类型参数
- VBA-正则表达式实列
- static函数与普通函数
- 【企业网盘】云盒子坚持的核心理念:保障企业数据安全
- Linux Web运维(Nginx)
- Spring Boot 入门
- Java在WEB项目中获取文件路径
- java 日期格式 毫秒
- Callbacks are imperative, promises are functional
- redis info 参数详解
- memcached 启动参数 和 stat 参数详解
- twemproxy + redis + sentinel 实现redis集群高可用
- iOS socket