關於guava 集合的一些學習筆記

public class SetGuava {
public static void main(String[] args) {
/**
* Guava API 提供了有用的新的集合類型, 協同已經存在的java集合工做的很好。 分別是 Multimap, Multiset,
* Table, BiMap, ClassToInstanceMap
// */
// System.out.println("Multimap:一種key能夠重複的map,子類有ListMultimap和SetMultimap,對應的經過key分別獲得list和set");
// testMultimap();
// System.out.println("Multiset:不是集合,能夠增長重複的元素,而且能夠統計出重複元素的個數");
// testMulitiset();
// System.out.println("Table:至關於有兩個key的map");
// testTable();
// System.out.println("BiMap: 是一個一一映射,能夠經過key獲得value,也能夠經過value獲得key");
// testBitMap();
// System.out.println("ClassToInstanceMap:map的key並非只是一種類型");
// testClassToInstanceMap();
System.out.println("排序,是guava一份很是靈活的比較類,能夠被用來操做,擴展,看成比較器,排序提供了集合排序的不少控制 ");
testOrder();
}java

/**
* @Description: Multimap:一種key能夠重複的map,子類有ListMultimap和SetMultimap,對應的經過key分別獲得list和set
*
*
* @Title: SetGuava.java
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-6-26 上午11:19:50
* @version V2.0
*/
private static void testMultimap() {
Multimap<String, Student> customersByType = ArrayListMultimap.create();
customersByType.put("abc", new Student(1, "Joyce", 20));
customersByType.put("abc", new Student(1, "Joyce One", 20));
customersByType.put("abc", new Student(1, "Joyce Two", 20));
customersByType.put("abc", new Student(1, "Joyce Three", 20));
customersByType.put("abcd", new Student(1, "Joyce Four", 20));
customersByType.put("abcde", new Student(1, "Joyce Five", 20));
System.out.println(customersByType.get("abc").size());
for (Student stu : customersByType.get("abc")) {
System.out.println(stu.getStuName());
}
}ide

/**
* @Description: Multiset:不是集合,能夠增長重複的元素,而且能夠統計出重複元素的個數
*
*
* @Title: SetGuava.java
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-6-26 上午11:19:59
* @version V2.0
*/
private static void testMulitiset() {
Multiset<Integer> multiSet = HashMultiset.create();
multiSet.add(10);
multiSet.add(30);
multiSet.add(30);
multiSet.add(40);
System.out.println(multiSet.count(30)); // 2 -- 統計XX出現的次數
System.out.println(multiSet.size()); // 4 -- 元素的個數
}對象

/**
* @Description: Table:至關於有兩個key的map
*
*
* @Title: SetGuava.java
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-6-26 上午11:24:43
* @version V2.0
*/
private static void testTable() {
Table<Integer, Integer, Student> personTable = HashBasedTable.create();
personTable.put(1, 20, new Student(1, "46546", 20));
personTable.put(0, 30, new Student(2, "46546", 30));
personTable.put(0, 25, new Student(3, "46546", 25));
personTable.put(1, 50, new Student(4, "46546", 50));
personTable.put(0, 27, new Student(5, "46546", 27));
personTable.put(1, 29, new Student(6, "46546", 29));
personTable.put(0, 38, new Student(7, "46546", 38));
personTable.put(1, 66, new Student(8, "46546", 66));排序

// 獲得行集合
Map<Integer, Student> rowMap = personTable.row(0);
Integer rowMax = Collections.max(rowMap.keySet());
System.out.println(rowMax);
System.out.println(rowMap.get(rowMax).getStuId());
}繼承

/**
* @Description: BiMap: 是一個一一映射,能夠經過key獲得value,也能夠經過value獲得key
*
*
* @Title: SetGuava.java
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-6-26 上午11:36:59
* @version V2.0
*/
private static void testBitMap() {
// 雙向map
BiMap<Integer, String> biMap = HashBiMap.create();
biMap.put(1, "hello");
biMap.put(2, "helloa");
biMap.put(3, "world");
biMap.put(4, "worldb");
biMap.put(5, "my");
biMap.put(6, "myc");
// 經過key取value
String value = biMap.get(5);
System.out.println("key -- [5] ; value -- [" + value + "]");
// 經過value取key
Integer key = biMap.inverse().get("my");
System.out.println("value -- [my] ; key -- [" + key + "]");
}接口

/**
* @Description: ClassToInstanceMap:有的時候,你的map的key並非一種類型,他們是不少類型,你想經過映射他們獲得這種類型,
* guava提供了ClassToInstanceMap知足了這個目的。
*
* 除了繼承自Map接口,ClassToInstaceMap提供了方法 T getInstance(Class<T>) 和
* T putInstance(Class<T>, T),消除了強制類型轉換。
*
* 該類有一個簡單類型的參數,一般稱爲B,表明了map控制的上層綁定,例如:
* ClassToInstanceMap<Number> numberDefaults =
* MutableClassToInstanceMap.create();
* numberDefaults.putInstance(Integer.class,
* Integer.valueOf(0));
*
* 從技術上來講,ClassToInstanceMap<B> 實現了Map<Class<? extends B>,
* B>,或者說,這是一個從B的子類到B對象的映射,這可能使得ClassToInstanceMap的泛型輕度混亂,
* 可是隻要記住B老是Map的上層綁定類型,一般來講B只是一個對象。 guava提供了有用的實現,
* MutableClassToInstanceMap 和 ImmutableClassToInstanceMap.
* 重點:像其餘的Map<Class,Object>,ClassToInstanceMap
* 含有的原生類型的項目,一個原生類型和他的相應的包裝類能夠映射到不一樣的值;
*
*
*
* @Title: SetGuava.java
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-6-26 上午11:42:52
* @version V2.0
*/
private static void testClassToInstanceMap() {
ClassToInstanceMap<Student> classToInstanceMap = MutableClassToInstanceMap.create();
Student stu = new Student(1, "Joyce", 20);
classToInstanceMap.putInstance(Student.class, stu);
Student stuObj = classToInstanceMap.getInstance(Student.class);
System.out.println(stuObj.getStuName());
}

/**
* @Description:排序,是guava一份很是靈活的比較類,能夠被用來操做,擴展,看成比較器,排序提供了集合排序的不少控制
*
*
* @Title: SetGuava.java
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-6-26 上午11:49:30
* @version V2.0
*/
private static void testOrder(){
// List<Integer> numberList = Lists.newArrayList(30, 20, 60, 80, 10);
// System.out.println(Ordering.natural().sortedCopy(numberList)); //10,20,30,60,80
// System.out.println(Ordering.natural().reverse().sortedCopy(numberList)); //80,60,30,20,10
// System.out.println(Ordering.natural().min(numberList));//10
// System.out.println(Ordering.natural().max(numberList));//80
// numberList = Lists.newArrayList(30, 20, 60, 80, null, 10);
// System.out.println(Ordering.natural().nullsLast().sortedCopy(numberList));//10, 20,30,60,80,null
// System.out.println(Ordering.natural().nullsFirst().sortedCopy(numberList));//null,10,20,30,60,80
//
List<Student> list=Lists.newArrayList();
list.add(new Student(1,"aa",20));
list.add(new Student(2,"bb",10));
list.add(new Student(3,"cc",30));
list.add(new Student(4,"dd",15));
list.add(new Student(5,"ee",40));
//排序前
System.out.println("排序前");
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).getStuName());
}
Collections.sort(list,new Comparator<Student>() {ip

@Override
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub
int age1=o1.getStuAge();
int age2=o2.getStuAge();

if(age1>age2){
return 1;
}else if(age1<age2){
return -1;
}else{
return 0;
}
}

});

//排序後
System.out.println("排序後");
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).getStuName());
}
}

}get

相關文章
相關標籤/搜索