Guava 3:コレクションCollections
35318 ワード
一、リード
GuavaのJDK集合への広がりは、最も成熟し、最も人気のある部分です.本文はGuavaの核心に属し、よく見る必要がある.
二、Guava集合
2.1 Immutable Collections不変集合
1.作用
不変の集合で防御的なプログラミングとパフォーマンスの向上を行います.
2.簡単に使う
印刷:
2.2新しい集合タイプ
1.作用
Multisets、multimaps、tables、bidirectional mapsなど、さまざまな使用シーンに便利です.
2.簡単に使う
多くのクラスでは、multiset、multimapインタフェースのみを分析し、他のクラスはテストクラスで体現されています.
Multisetインタフェース
JDK:java.util.Colectionインタフェースから継承され、同じ要素を複数回追加することをサポートし、無秩序です.
Multisetを通常のCollectionと見なすと、無秩序なArrayListのように表現されます. add(E)単一与えられた要素 を追加 iterator()は、Multisetのすべての要素(重複する要素を含む)を含む を含む反復器を返します. size()は、すべての要素の合計数(重複する要素を含む) を返します.
MultisetをMapと見なすと、パフォーマンスに適したクエリー操作も提供されます. count(Object)は、与えられた要素のカウントを返します.HashMultiset.contの複雑度はO(1)であり,TreeMultiset.contの複雑度はO(log n)であった. entrySet()は、MapのentrySetと同様に、Set>を返します. elementSet()は、MapのkeySet()と同様に、重複しないすべての要素のSetを返します. すべてのMultisetによって実現されるメモリ消費量は、重複しない要素の個数とともに線形に増加する.
Multimapインタフェースは、1つのkeyマッピングの複数のvalue:k 1−v 1,k 1−v 2をサポートする. はasMap()ビューを提供し、Map>、すなわちk 1->v集合(v 1,v 2) を返す.
様々なmultimap実装クラスは以下の通りである.
テストクラスは次のとおりです.
印刷ログは次のとおりです.
2.3強力な集合ツールクラス
1.作用
Java.util.Collectionsにないコレクションツールの提供
2.簡単に使う
集合インタフェース、所属関係、Guava対応ツールマッピング関係は次の表のとおりです.
印刷結果は次のとおりです.
2.4拡張ツールクラス
1.作用
Collectionのデコレーションを作成したり、反復を実装したりするなど、コレクションクラスの実装と拡張を容易にします.
2.簡単に使う
提供しません.guavaの本生はJDKの開拓で、自分で更に開拓して、あなたは更に私をからかいますか...
三、まとめ
この文書では、Immutable Collectionsの可変集合、新しい集合タイプ、集合ツールクラス、拡張ツールクラスを含むGuava Collectionパッケージのクラスを簡単に理解し、使用しました.その中の最初の3つは使用をお勧めしますが、最後の拡張ツールクラスはやめましょう.
GuavaのJDK集合への広がりは、最も成熟し、最も人気のある部分です.本文はGuavaの核心に属し、よく見る必要がある.
二、Guava集合
2.1 Immutable Collections不変集合
1.作用
不変の集合で防御的なプログラミングとパフォーマンスの向上を行います.
2.簡単に使う
1 package guava.collect;
2
3 import com.google.common.collect.ImmutableSet;
4
5 /**
6 * @author denny
7 * @Description
8 * @date 2018/7/26 3:16
9 */
10 public class ImmutableCollectionsTest {
11 /**
12 * 1.
13 */
14 public static final ImmutableSet COLOR_NAMES_1 = ImmutableSet.of(
15 "red",
16 "orange",
17 "yellow",
18 "green");
19 /**
20 * 2. copy
21 */
22 public static final ImmutableSet COLOR_NAMES_2 = ImmutableSet.copyOf(COLOR_NAMES_1);
23
24 /**
25 * 3.builder
26 */
27 public static final ImmutableSet COLOR_NAMES_3 = ImmutableSet.builder().addAll(COLOR_NAMES_2).add("blue").build();
28
29
30 public static void main(String[] args) {
31 System.out.println("of:"+COLOR_NAMES_1);
32 System.out.println(" copy:"+COLOR_NAMES_2);
33 System.out.println(" :"+COLOR_NAMES_3);
34 System.out.println(" list:"+COLOR_NAMES_3.asList());
35 }
36 }
印刷:
of:[red, orange, yellow, green]
copy:[red, orange, yellow, green]
:[red, orange, yellow, green, blue]
list:[red, orange, yellow, green, blue]
2.2新しい集合タイプ
1.作用
Multisets、multimaps、tables、bidirectional mapsなど、さまざまな使用シーンに便利です.
2.簡単に使う
多くのクラスでは、multiset、multimapインタフェースのみを分析し、他のクラスはテストクラスで体現されています.
Multisetインタフェース
JDK:java.util.Colectionインタフェースから継承され、同じ要素を複数回追加することをサポートし、無秩序です.
Multisetを通常のCollectionと見なすと、無秩序なArrayListのように表現されます.
MultisetをMapと見なすと、パフォーマンスに適したクエリー操作も提供されます.
Multimapインタフェース
様々なmultimap実装クラスは以下の通りである.
テストクラスは次のとおりです.
1 package guava.collect;
2
3 import com.google.common.collect.BiMap;
4 import com.google.common.collect.ClassToInstanceMap;
5 import com.google.common.collect.HashBasedTable;
6 import com.google.common.collect.HashBiMap;
7 import com.google.common.collect.HashMultimap;
8 import com.google.common.collect.HashMultiset;
9 import com.google.common.collect.Lists;
10 import com.google.common.collect.Multimap;
11 import com.google.common.collect.Multiset;
12 import com.google.common.collect.MutableClassToInstanceMap;
13 import com.google.common.collect.Range;
14 import com.google.common.collect.RangeMap;
15 import com.google.common.collect.RangeSet;
16 import com.google.common.collect.Table;
17 import com.google.common.collect.TreeRangeMap;
18 import com.google.common.collect.TreeRangeSet;
19
20 /**
21 * @author denny
22 * @Description
23 * @date 2018/7/26 6:29
24 */
25 public class MultiCollectionsTest {
26 public static void main(String[] args) {
27
28 System.out.println("====1.Multiset=======");
29 /** 1.Multiset */
30 Multiset wordsMultiset = HashMultiset.create();
31 //
32 wordsMultiset.addAll(Lists.newArrayList("a", "b", "c", "a", "b", "a"));
33 // ,
34 wordsMultiset.elementSet().forEach(e -> System.out.println(e + ":" + wordsMultiset.count(e)));
35
36 System.out.println("====2.Multimap=======");
37 /** 2.Multimap 1 key value */
38 Multimap multimap = HashMultimap.create();
39 multimap.put("a", 1);
40 multimap.put("b", 2);
41 multimap.put("c", 3);
42 multimap.put("a", 4);
43 System.out.println(" - :");
44 // - :asMap() map(key,Collection), map ,
45 multimap.asMap().entrySet().forEach(e -> System.out.println(e.getKey() + ":" + e.getValue()));
46 System.out.println(" - :");
47 // - :
48 multimap.entries().forEach(e -> System.out.println(e.getKey() + ":" + e.getValue()));
49
50 System.out.println("====3.BiMap=======");
51 /** 3.BiMap */
52 BiMap biMap = HashBiMap.create();
53 biMap.put("a", 1);
54 biMap.put("b", 2);
55 System.out.println(" " + biMap);
56 System.out.println(" :" + biMap.inverse());
57
58 System.out.println("====4.Table=======");
59 /** 4.Table */
60 Table table = HashBasedTable.create();
61 table.put("a", "b", 1);
62 table.put("a", "c", 2);
63 table.put("d", "b", 3);
64 System.out.println(table);
65 System.out.println("row a=" + table.row("a"));
66 System.out.println("column b=" + table.column("b"));
67
68 /** 5.ClassToInstanceMap 、 */
69 System.out.println("====5.ClassToInstanceMap=======");
70 ClassToInstanceMap classToInstanceMap = MutableClassToInstanceMap.create();
71 classToInstanceMap.putInstance(Integer.class, 1);
72 classToInstanceMap.putInstance(Double.class, 2D);
73 classToInstanceMap.putInstance(Long.class, 3L);
74 System.out.println(classToInstanceMap);
75
76 /** 6. RangeSet ; RangeMap */
77 System.out.println("====6.RangeSet、RangeMap=======");
78 RangeSet rangeSet = TreeRangeSet.create();
79 // [1,10]
80 rangeSet.add(Range.closed(1,10));
81 // [1,10] [11,15)
82 rangeSet.add(Range.closedOpen(11,15));
83 // [11,15)+[15,20)=[11,20), :[1,10] [11,20)
84 rangeSet.add(Range.closedOpen(15,20));
85 // [1,10]-(5,10)=[1,5][10,10] , :[1,5][10,10][11,20]
86 rangeSet.remove(Range.open(5,10));
87 System.out.println("rangeSet="+rangeSet);
88 RangeMap rangeMap = TreeRangeMap.create();
89 rangeMap.put(Range.closed(1,10)," 1");
90 // key ,
91 rangeMap.put(Range.closed(5,20)," 2");
92 System.out.println("rangeMap="+rangeMap);
93 }
94 }
印刷ログは次のとおりです.
1 ====1.Multiset=======
2 a:3
3 b:2
4 c:1
5 ====2.Multimap=======
6 - :
7 a:[4, 1]
8 b:[2]
9 c:[3]
10 - :
11 a:4
12 a:1
13 b:2
14 c:3
15 ====3.BiMap=======
16 {a=1, b=2}
17 :{1=a, 2=b}
18 ====4.Table=======
19 {a={b=1, c=2}, d={b=3}}
20 row a={b=1, c=2}
21 column b={a=1, d=3}
22 ====5.ClassToInstanceMap=======
23 {class java.lang.Integer=1, class java.lang.Double=2.0, class java.lang.Long=3}
24 ====6.RangeSet、RangeMap=======
25 rangeSet=[[1..5], [10..10], [11..20)]
26 rangeMap=[[1..5)= 1, [5..20]= 2]
2.3強力な集合ツールクラス
1.作用
Java.util.Collectionsにないコレクションツールの提供
2.簡単に使う
集合インタフェース、所属関係、Guava対応ツールマッピング関係は次の表のとおりです.
1 package guava.collect;
2
3 import com.google.common.base.Function;
4 import com.google.common.collect.ImmutableMap;
5 import com.google.common.collect.ImmutableSet;
6 import com.google.common.collect.Iterables;
7 import com.google.common.collect.Lists;
8 import com.google.common.collect.MapDifference;
9 import com.google.common.collect.Maps;
10 import com.google.common.collect.Sets;
11 import com.google.common.primitives.Ints;
12
13 import java.util.List;
14 import java.util.Map;
15 import java.util.Set;
16
17 /**
18 * @Description
19 * @author denny
20 * @date 2018/7/27 2:46
21 */
22 public class UtilityClassesTest {
23
24 public static void main(String[] args) {
25 /** 1.Iterables */
26 System.out.println("=========Iterables=========");
27 Iterable concate = Iterables.concat(Ints.asList(1,2,3),Ints.asList(2,3,4));
28 System.out.println(" :"+concate);
29 System.out.println(" 2 :"+Iterables.frequency(concate,2));
30 System.out.println(" :"+Iterables.partition(concate,2));
31 System.out.println(" , :"+Iterables.getFirst(concate,99));
32 System.out.println(" :"+Iterables.getLast(concate));
33
34 /** 2.Lists */
35 System.out.println("=========Lists=========");
36 List list = Lists.newArrayList(1,2,3,4,5);
37 System.out.println(" :"+Lists.reverse(list));
38 System.out.println(" :"+Lists.partition(list,2));
39
40 /** 3.Sets */
41 System.out.println("=========Sets=========");
42 Set set1 = Sets.newHashSet(1,2,3);
43 Set set2 = Sets.newHashSet(3,4,5);
44 System.out.println(" :"+Sets.union(set1,set2));
45 System.out.println(" :"+Sets.intersection(set1,set2));
46 System.out.println(" (set1 set2 ):"+Sets.difference(set1,set2));
47 System.out.println(" - :"+Sets.symmetricDifference(set1,set2));
48 System.out.println(" :"+Sets.cartesianProduct(set1,set2));
49 System.out.println(" :");
50 Sets.powerSet(set1).forEach(System.out::println);
51
52 /** 4.Maps */
53 System.out.println("=========Maps=========");
54 Map map1 = Maps.newHashMap();
55 map1.put("a",1);
56 map1.put("b",2);
57 map1.put("d",5);
58 Map map2 = Maps.newHashMap();
59 map2.put("a",1);
60 map2.put("b",3);
61 map2.put("c",4);
62 MapDifference mapDifference = Maps.difference(map1,map2);
63 System.out.println(" :"+mapDifference.entriesInCommon());
64 System.out.println("key ,value :"+mapDifference.entriesDiffering());
65 System.out.println(" :"+mapDifference.entriesOnlyOnLeft());
66 System.out.println(" :"+mapDifference.entriesOnlyOnRight());
67 //
68 ImmutableSet allColors = ImmutableSet.of("red", "green", "blue");
69 ImmutableMap immutableMap = Maps.uniqueIndex(allColors, input -> input.length());
70 System.out.println(" key:"+immutableMap);
71 }
72 }
印刷結果は次のとおりです.
=========Iterables=========
:[1, 2, 3, 2, 3, 4]
2 :2
:[[1, 2], [3, 2], [3, 4]]
, :1
:4
=========Lists=========
:[5, 4, 3, 2, 1]
:[[1, 2], [3, 4], [5]]
=========Sets=========
:[1, 2, 3, 4, 5]
:[3]
(set1 set2 ):[1, 2]
- :[1, 2, 4, 5]
:[[1, 3], [1, 4], [1, 5], [2, 3], [2, 4], [2, 5], [3, 3], [3, 4], [3, 5]]
:
[]
[1]
[2]
[1, 2]
[3]
[1, 3]
[2, 3]
[1, 2, 3]
=========Maps=========
:{a=1}
key ,value :{b=(2, 3)}
:{d=5}
:{c=4}
key{3=red, 5=green, 4=blue}
2.4拡張ツールクラス
1.作用
Collectionのデコレーションを作成したり、反復を実装したりするなど、コレクションクラスの実装と拡張を容易にします.
2.簡単に使う
提供しません.guavaの本生はJDKの開拓で、自分で更に開拓して、あなたは更に私をからかいますか...
三、まとめ
この文書では、Immutable Collectionsの可変集合、新しい集合タイプ、集合ツールクラス、拡張ツールクラスを含むGuava Collectionパッケージのクラスを簡単に理解し、使用しました.その中の最初の3つは使用をお勧めしますが、最後の拡張ツールクラスはやめましょう.