需要包:guava.jar
1.Collections(对集合的扩展)
主要包括不可变集合,多值Map,Table表和集合工具类
1_1.不可变集合(immutable):ImmutableList,ImmutableMap,ImmutableSet,ImmutableSoredtMap,ImmutableSortedSet
ImmutableList:可以存放相同的值
ImmutableMap:存放键值对
ImmutableSet:存放的是唯一的值
ImmutableList,ImmutableMap,ImmutableSet调用的是of()方法
ImmutableSoredtMap,ImmutableSortedSet会进行排序,调用的是copyOf()
public static void main(String[] args) { ImmutableList<String> l =ImmutableList.of("张三","李四","张三") ; ImmutableMap<String, String> m = ImmutableMap.of("name", "张三", "age","20","sex","男") ; ImmutableSet<String> s = ImmutableSet.of("张三","李四","张三") ; Map<String,String> map = new HashMap<String,String>() ; map.put("name", "张三") ; map.put("age", "20") ; map.put("sex", "男") ; ImmutableSortedMap<String, String> ss = ImmutableSortedMap.copyOf(map) ; Set<Integer> set = new TreeSet<Integer>() ; set.add(1) ; set.add(9) ; set.add(4) ; ImmutableSet<Integer> mi = ImmutableSet.copyOf(set) ; System.out.println("---------"+l); System.out.println("---------"+m); System.out.println("---------"+s); System.out.println("---------"+ss); System.out.println("---------"+mi); 结果: ---------[张三, 李四, 张三] ---------{name=张三, age=20, sex=男} ---------[张三, 李四] ---------{age=20, name=张三, sex=男} ---------[1, 4, 9] }
1_2.多值Map,MultiMap
在普通Map中,如果两个键相等,则会覆盖一个,而有时候,比如保存名字的时候,名字可能重复,这时候就可以用多值Map,MultiMap
public static void main(String[] args) { Multimap<String, String> names = ArrayListMultimap.create() ; names.put("name", "张三") ; names.put("name", "张三") ; System.out.println("----------"+names); 结果:----------{name=[张三, 张三]} }
1_3.Table表
通过两个点确定一个值,如通过地图的经度、纬度,确定一个地方
public static void main(String[] args) { Table<Double, Double, String> area = HashBasedTable.create() ; area.put(21.3, 154.9, "重庆XXX广场") ; System.out.println("-------------"+area.get(21.3, 154.9)); 结果:-------------重庆XXX广场 }
1_4.集合工具类,Sets,Maps,Lists
Maps的过滤
public static void main(String[] args) { Map<String,Integer> map = new HashMap<String,Integer>() ; map.put("张三", 20) ; map.put("李四", 23) ; map.put("王五", 18) ; Map<String,Integer> m = Maps.filterValues(map, new Predicate<Integer>() { @Override public boolean apply(Integer age) { return age<23 ; } }) ; System.out.println("--------------"+m); 结果:--------------{张三=20, 王五=18} }