1700452420
编写高质量代码:改善Java程序的151个建议 建议140:推荐使用Guava扩展工具包
1700452421
1700452422
说起Guava(石榴),可能知道它的读者并不多,要是说起Google-collections,相信大部分读者都有所耳闻。2008年Google发布了Google-collections扩展工具包,主要是对JDK的Collection包进行了扩展,2010年Google发布了Guava项目,其中包含了collections、caching、primitives support、concurrency libraries、common annotations、I/O等,这些都是项目编码中的基本工具包,我们大致浏览一下它的主要功能。
1700452423
1700452424
(1)Collections
1700452425
1700452426
com. google.common.collect包中主要包括四部分:不可变集合(Immutable Collections)、多值Map、Table表和集合工具类。
1700452427
1700452428
不可变集合
1700452429
1700452430
不可变集合包括ImmutableList、ImmutableMap、ImmutableSet、ImmutableSortedMap、ImmutableSortedSet等,它比不可修改集合(Unmodifiable Collections)更容易使用,效率更高,而且占用的内存更少。示例代码如下:
1700452431
1700452432
//不可变列表
1700452433
1700452434
ImmutableList<String>list=ImmutableList.of(“A”,“B”,“C”);
1700452435
1700452436
//不可变Map
1700452437
1700452438
ImmutableMap<Integer, String>map=ImmutableMap.of(1,“壹”,2,“贰”,3,“叁”);
1700452439
1700452440
其中的of方法有多个重载,其目的就是为了便于在初始化的时候直接生成一个不可变集合。
1700452441
1700452442
多值Map
1700452443
1700452444
多值Map比较简单,在JDK中,Map中的一个键对应一个值,在put一个键值对时,如果键重复了,则会覆盖原有的值,在大多数情况下这比较符合实际应用,但有的时候确实会存在一个键对应多个值的情况,比如我们的通讯录,一个人可能会对应两个或三个号码,此时使用JDK的Map就有点麻烦了。在这种情况下,使用Guava的Multimap可以很好地解决问题,代码如下:
1700452445
1700452446
//多值Map
1700452447
1700452448
Multimap<String, String>phoneBook=ArrayListMultimap.create();
1700452449
1700452450
phoneBook.put(“张三”,“110”);
1700452451
1700452452
phoneBook.put(“张三”,“119”);
1700452453
1700452454
System.out.println(phoneBook.get(“张三”));
1700452455
1700452456
输出的结果是一个包含两个元素的Collection,这是一种很巧妙的处理方式,可以方便地解决我们开发中的问题。
1700452457
1700452458
Table表
1700452459
1700452460
在GIS(Geographic Information System,地理信息系统)中,我们经常会把一个地点标注在一个坐标上,比如把上海人民广场标注在北纬31.23、东经121.48的位置上,也就是说只要给出了准确的经度和纬度就可以进行精确的定位—两个键决定一个值,这在Guava中是使用Table来表示的,示例代码如下:
1700452461
1700452462
Table<Double, Double, String>g=HashBasedTable.create();
1700452463
1700452464
//定义人民广场的经纬度坐标
1700452465
1700452466
g.put(31.23,121.48,“人民广场”);
1700452467
1700452468
//输出坐标点的建筑物
[
上一页 ]
[ :1.700452419e+09 ]
[
下一页 ]