Java Language
대체 컬렉션
수색…
비고
구아바, 아파치, 이클립스의 자바 컬렉션에 관한이 주제 : Multiset, Bag, Multimap,이 lib의 utils 함수 등.
Apache HashBag, Guava HashMultiset 및 Eclipse HashBag
Bag / ultiset은 컬렉션의 각 객체를 발생 횟수와 함께 저장합니다. 인터페이스의 추가 메서드를 사용하면 개체의 여러 복사본을 동시에 추가하거나 제거 할 수 있습니다. JDK analog는 HashMap <T, Integer>이며, 값은이 키의 사본 수입니다.
유형 | 구아바 | Apache Commons Collections | GS 컬렉션 | JDK |
---|---|---|---|---|
주문이 정의되지 않았습니다. | HashMultiset | HashBag | HashBag | HashMap |
정렬 된 | TreeMultiset | TreeBag | TreeBag | 트리 맵 |
삽입 주문 | LinkedHashMultiset | - | - | 연결된 해시 맵 |
동시 변형 | 동시 HashMultiset | SynchronizedBag | SynchronizedBag | Collections.synchronizedMap(HashMap<String, Integer>) |
동시 및 정렬 | - | SynchronizedSortedBag | SynchronizedSortedBag | Collections.synchronizedSortedMap(TreeMap<String,Integer>) |
변경 불가능한 컬렉션 | 변경 불가능한 다중 집합 | UnmodifiableBag | UnmodifiableBag | Collections.unmodifiableMap(HashMap<String, Integer)] |
변경 불가능하고 정렬 된 | ImmutableSortedMultiset | 수정할 수없는 정렬 된 | 수정할 수없는 정렬 된 | Collections.unmodifiableSortedMap(TreeMap<String, Integer> )이 Collections.unmodifiableSortedMap(TreeMap<String, Integer> |
예 :
1. Apache의 SynchronizedSortedBag 사용 :
// Parse text to separate words
String INPUT_TEXT = "Hello World! Hello All! Hi World!";
// Create Multiset
Bag bag = SynchronizedSortedBag.synchronizedBag(new TreeBag(Arrays.asList(INPUT_TEXT.split(" "))));
// Print count words
System.out.println(bag); // print [1:All!,2:Hello,1:Hi,2:World!]- in natural (alphabet) order
// Print all unique words
System.out.println(bag.uniqueSet()); // print [All!, Hello, Hi, World!]- in natural (alphabet) order
// Print count occurrences of words
System.out.println("Hello = " + bag.getCount("Hello")); // print 2
System.out.println("World = " + bag.getCount("World!")); // print 2
System.out.println("All = " + bag.getCount("All!")); // print 1
System.out.println("Hi = " + bag.getCount("Hi")); // print 1
System.out.println("Empty = " + bag.getCount("Empty")); // print 0
// Print count all words
System.out.println(bag.size()); //print 6
// Print count unique words
System.out.println(bag.uniqueSet().size()); //print 4
2. Eclipse (GC)에서 TreeBag 사용하기 :
// Parse text to separate words
String INPUT_TEXT = "Hello World! Hello All! Hi World!";
// Create Multiset
MutableSortedBag<String> bag = TreeBag.newBag(Arrays.asList(INPUT_TEXT.split(" ")));
// Print count words
System.out.println(bag); // print [All!, Hello, Hello, Hi, World!, World!]- in natural order
// Print all unique words
System.out.println(bag.toSortedSet()); // print [All!, Hello, Hi, World!]- in natural order
// Print count occurrences of words
System.out.println("Hello = " + bag.occurrencesOf("Hello")); // print 2
System.out.println("World = " + bag.occurrencesOf("World!")); // print 2
System.out.println("All = " + bag.occurrencesOf("All!")); // print 1
System.out.println("Hi = " + bag.occurrencesOf("Hi")); // print 1
System.out.println("Empty = " + bag.occurrencesOf("Empty")); // print 0
// Print count all words
System.out.println(bag.size()); //print 6
// Print count unique words
System.out.println(bag.toSet().size()); //print 4
3. 구아바에서 LinkedHashMultiset 사용 :
// Parse text to separate words
String INPUT_TEXT = "Hello World! Hello All! Hi World!";
// Create Multiset
Multiset<String> multiset = LinkedHashMultiset.create(Arrays.asList(INPUT_TEXT.split(" ")));
// Print count words
System.out.println(multiset); // print [Hello x 2, World! x 2, All!, Hi]- in predictable iteration order
// Print all unique words
System.out.println(multiset.elementSet()); // print [Hello, World!, All!, Hi] - in predictable iteration order
// Print count occurrences of words
System.out.println("Hello = " + multiset.count("Hello")); // print 2
System.out.println("World = " + multiset.count("World!")); // print 2
System.out.println("All = " + multiset.count("All!")); // print 1
System.out.println("Hi = " + multiset.count("Hi")); // print 1
System.out.println("Empty = " + multiset.count("Empty")); // print 0
// Print count all words
System.out.println(multiset.size()); //print 6
// Print count unique words
System.out.println(multiset.elementSet().size()); //print 4
추가 예제 :
I. Apache Collection :
- HashBag - 정의되지 않은 주문
- SynchronizedBag - 동시 및 순서가 정의되지 않았습니다.
- SynchronizedSortedBag - - 동시 및 정렬 된 순서
- TreeBag - 정렬 된 순서
II. GS / 이클립스 컬렉션
- MutableBag - 정의되지 않은 순서
- MutableSortedBag - 정렬 된 순서
III. 구아바
- HashMultiset - 정의되지 않은 주문
- TreeMultiset - 정렬 된 순서
- LinkedHashMultiset - 게재 신청서
- ConcurrentHashMultiset - 동시성과 순서가 정의되어 있지 않다
구아바, 아파치 및 Eclipse 컬렉션의 멀티 맵
이 멀티 맵은 중복 된 키 - 값 쌍을 허용합니다. JDK의 아날로그는, HashMap <K, List>, HashMap <K, Set> 등입니다.
열쇠의 순서 | 가치의 순서 | 복제 | 아날로그 키 | 아날로그 값 | 구아바 | 아파치 | Eclipse (GS) 컬렉션 | JDK |
---|---|---|---|---|---|---|---|---|
정의되지 않았다 | 삽입 주문 | 예 | HashMap | ArrayList | ArrayListMultimap | MultiValueMap | FastListMultimap | HashMap<K, ArrayList<V>> |
정의되지 않았다 | 정의되지 않았다 | 아니 | HashMap | HashSet | HashMultimap | MultiValueMap. multiValueMap( new HashMap<K, Set>(), HashSet.class); | UnifiedSetMultimap | HashMap<K, HashSet<V>> |
정의되지 않았다 | 분류 된 | 아니 | HashMap | TreeSet | Multimaps. newMultimap( HashMap, Supplier <TreeSet>) | MultiValueMap.multiValueMap( new HashMap<K, Set>(), TreeSet.class) | TreeSortedSet- Multimap | HashMap<K, TreeSet<V>> |
삽입 주문 | 삽입 주문 | 예 | 연결된 해시 맵 | ArrayList | LinkedListMultimap | MultiValueMap. multiValueMap (새로운 LinkedHashMap <K, List> (), ArrayList.class); | LinkedHashMap <K, ArrayList> | |
삽입 주문 | 삽입 주문 | 아니 | 연결된 해시 맵 | LinkedHashSet | LinkedHashMultimap | MultiValueMap. multiValueMap(new LinkedHashMap<K, Set>(), LinkedHashSet.class) | LinkedHashMap<K, LinkedHashSet<V>> | |
분류 된 | 분류 된 | 아니 | 트리 맵 | TreeSet | TreeMultimap | MultiValueMap. multiValueMap( new TreeMap<K, Set>(),TreeSet.class) | TreeMap<K, TreeSet<V>> |
작업 : 구문 분석 "Hello World! Hello All! 안녕 월드!" 문자열을 분리하고 MultiMap을 사용하여 모든 단어의 모든 색인을 인쇄합니다 (예 : Hello = [0, 2], World! = [1, 5] 등)
1. Apache의 MultiValueMap
String INPUT_TEXT = "Hello World! Hello All! Hi World!";
// Parse text to words and index
List<String> words = Arrays.asList(INPUT_TEXT.split(" "));
// Create Multimap
MultiMap<String, Integer> multiMap = new MultiValueMap<String, Integer>();
// Fill Multimap
int i = 0;
for(String word: words) {
multiMap.put(word, i);
i++;
}
// Print all words
System.out.println(multiMap); // print {Hi=[4], Hello=[0, 2], World!=[1, 5], All!=[3]} - in random orders
// Print all unique words
System.out.println(multiMap.keySet()); // print [Hi, Hello, World!, All!] - in random orders
// Print all indexes
System.out.println("Hello = " + multiMap.get("Hello")); // print [0, 2]
System.out.println("World = " + multiMap.get("World!")); // print [1, 5]
System.out.println("All = " + multiMap.get("All!")); // print [3]
System.out.println("Hi = " + multiMap.get("Hi")); // print [4]
System.out.println("Empty = " + multiMap.get("Empty")); // print null
// Print count unique words
System.out.println(multiMap.keySet().size()); //print 4
2. GS / Eclipse Collection의 HashBiMap
String[] englishWords = {"one", "two", "three","ball","snow"};
String[] russianWords = {"jeden", "dwa", "trzy", "kula", "snieg"};
// Create Multiset
MutableBiMap<String, String> biMap = new HashBiMap(englishWords.length);
// Create English-Polish dictionary
int i = 0;
for(String englishWord: englishWords) {
biMap.put(englishWord, russianWords[i]);
i++;
}
// Print count words
System.out.println(biMap); // print {two=dwa, ball=kula, one=jeden, snow=snieg, three=trzy} - in random orders
// Print all unique words
System.out.println(biMap.keySet()); // print [snow, two, one, three, ball] - in random orders
System.out.println(biMap.values()); // print [dwa, kula, jeden, snieg, trzy] - in random orders
// Print translate by words
System.out.println("one = " + biMap.get("one")); // print one = jeden
System.out.println("two = " + biMap.get("two")); // print two = dwa
System.out.println("kula = " + biMap.inverse().get("kula")); // print kula = ball
System.out.println("snieg = " + biMap.inverse().get("snieg")); // print snieg = snow
System.out.println("empty = " + biMap.get("empty")); // print empty = null
// Print count word's pair
System.out.println(biMap.size()); //print 5
구아바에서 HashMultiMap
String INPUT_TEXT = "Hello World! Hello All! Hi World!"; // Parse text to words and index List<String> words = Arrays.asList(INPUT_TEXT.split(" ")); // Create Multimap Multimap<String, Integer> multiMap = HashMultimap.create(); // Fill Multimap int i = 0; for(String word: words) { multiMap.put(word, i); i++; } // Print all words System.out.println(multiMap); // print {Hi=[4], Hello=[0, 2], World!=[1, 5], All!=[3]} - keys and values in random orders // Print all unique words System.out.println(multiMap.keySet()); // print [Hi, Hello, World!, All!] - in random orders // Print all indexes System.out.println("Hello = " + multiMap.get("Hello")); // print [0, 2] System.out.println("World = " + multiMap.get("World!")); // print [1, 5] System.out.println("All = " + multiMap.get("All!")); // print [3] System.out.println("Hi = " + multiMap.get("Hi")); // print [4] System.out.println("Empty = " + multiMap.get("Empty")); // print [] // Print count all words System.out.println(multiMap.size()); //print 6 // Print count unique words System.out.println(multiMap.keySet().size()); //print 4
예 :
I. Apache Collection :
II. GS / 이클립스 컬렉션
III. 구아바
컬렉션과의 작업 비교 - 컬렉션 만들기
컬렉션과의 작업 비교 - 컬렉션 만들기
1. 목록 만들기기술 | JDK | 구아바 | GS 모음 |
---|---|---|---|
빈 목록 만들기 | new ArrayList<> () | Lists.newArrayList() | FastList.newList() |
값에서 목록 만들기 | Arrays.asList("1", "2", "3") | Lists.newArrayList("1", "2", "3") | FastList.newListWith("1", "2", "3") |
용량 = 100의 목록 만들기 | new ArrayList<>(100) | Lists.newArrayListWithCapacity(100) | FastList.newList(100) |
모든 collectin에서 목록 만들기 | new ArrayList<>(collection) | Lists.newArrayList(collection) | FastList.newList(collection) |
모든 반복 목록에서 목록 만들기 | - | Lists.newArrayList(iterable) | FastList.newList(iterable) |
Iterator에서 목록 만들기 | - | Lists.newArrayList(iterator) | - |
배열에서 목록 만들기 | Arrays.asList(array) | Lists.newArrayList(array) | FastList.newListWith(array) |
공장을 사용하여 목록 만들기 | - | - | FastList.newWithNValues(10, () -> "1") |
예 :
System.out.println("createArrayList start");
// Create empty list
List<String> emptyGuava = Lists.newArrayList(); // using guava
List<String> emptyJDK = new ArrayList<>(); // using JDK
MutableList<String> emptyGS = FastList.newList(); // using gs
// Create list with 100 element
List < String > exactly100 = Lists.newArrayListWithCapacity(100); // using guava
List<String> exactly100JDK = new ArrayList<>(100); // using JDK
MutableList<String> empty100GS = FastList.newList(100); // using gs
// Create list with about 100 element
List<String> approx100 = Lists.newArrayListWithExpectedSize(100); // using guava
List<String> approx100JDK = new ArrayList<>(115); // using JDK
MutableList<String> approx100GS = FastList.newList(115); // using gs
// Create list with some elements
List<String> withElements = Lists.newArrayList("alpha", "beta", "gamma"); // using guava
List<String> withElementsJDK = Arrays.asList("alpha", "beta", "gamma"); // using JDK
MutableList<String> withElementsGS = FastList.newListWith("alpha", "beta", "gamma"); // using gs
System.out.println(withElements);
System.out.println(withElementsJDK);
System.out.println(withElementsGS);
// Create list from any Iterable interface (any collection)
Collection<String> collection = new HashSet<>(3);
collection.add("1");
collection.add("2");
collection.add("3");
List<String> fromIterable = Lists.newArrayList(collection); // using guava
List<String> fromIterableJDK = new ArrayList<>(collection); // using JDK
MutableList<String> fromIterableGS = FastList.newList(collection); // using gs
System.out.println(fromIterable);
System.out.println(fromIterableJDK);
System.out.println(fromIterableGS);
/* Attention: JDK create list only from Collection, but guava and gs can create list from Iterable and Collection */
// Create list from any Iterator
Iterator<String> iterator = collection.iterator();
List<String> fromIterator = Lists.newArrayList(iterator); // using guava
System.out.println(fromIterator);
// Create list from any array
String[] array = {"4", "5", "6"};
List<String> fromArray = Lists.newArrayList(array); // using guava
List<String> fromArrayJDK = Arrays.asList(array); // using JDK
MutableList<String> fromArrayGS = FastList.newListWith(array); // using gs
System.out.println(fromArray);
System.out.println(fromArrayJDK);
System.out.println(fromArrayGS);
// Create list using fabric
MutableList<String> fromFabricGS = FastList.newWithNValues(10, () -> String.valueOf(Math.random())); // using gs
System.out.println(fromFabricGS);
System.out.println("createArrayList end");
2 세트 만들기 기술 | JDK | 구아바 | GS 모음 |
---|---|---|---|
빈 세트 만들기 | new HashSet<>() | Sets.newHashSet() | UnifiedSet.newSet() |
가치로 창조 된 창조물 | new HashSet<>(Arrays.asList("alpha", "beta", "gamma") ) | Sets.newHashSet("alpha", "beta", "gamma") | UnifiedSet.newSetWith("alpha", "beta", "gamma") |
모든 컬렉션에서 세트 만들기 | new HashSet<>(collection) | Sets.newHashSet(collection) | UnifiedSet.newSet(collection) |
모든 반복에서 세트 만들기 | - | Sets.newHashSet(iterable) | UnifiedSet.newSet(iterable) |
모든 반복자에서 집합 만들기 | - | Sets.newHashSet(iterator) | - |
배열에서 세트 만들기 | new HashSet<>(Arrays.asList(array)) | Sets.newHashSet(array) | UnifiedSet.newSetWith(array) |
예 :
System.out.println("createHashSet start");
// Create empty set
Set<String> emptyGuava = Sets.newHashSet(); // using guava
Set<String> emptyJDK = new HashSet<>(); // using JDK
Set<String> emptyGS = UnifiedSet.newSet(); // using gs
// Create set with 100 element
Set<String> approx100 = Sets.newHashSetWithExpectedSize(100); // using guava
Set<String> approx100JDK = new HashSet<>(130); // using JDK
Set<String> approx100GS = UnifiedSet.newSet(130); // using gs
// Create set from some elements
Set<String> withElements = Sets.newHashSet("alpha", "beta", "gamma"); // using guava
Set<String> withElementsJDK = new HashSet<>(Arrays.asList("alpha", "beta", "gamma")); // using JDK
Set<String> withElementsGS = UnifiedSet.newSetWith("alpha", "beta", "gamma"); // using gs
System.out.println(withElements);
System.out.println(withElementsJDK);
System.out.println(withElementsGS);
// Create set from any Iterable interface (any collection)
Collection<String> collection = new ArrayList<>(3);
collection.add("1");
collection.add("2");
collection.add("3");
Set<String> fromIterable = Sets.newHashSet(collection); // using guava
Set<String> fromIterableJDK = new HashSet<>(collection); // using JDK
Set<String> fromIterableGS = UnifiedSet.newSet(collection); // using gs
System.out.println(fromIterable);
System.out.println(fromIterableJDK);
System.out.println(fromIterableGS);
/* Attention: JDK create set only from Collection, but guava and gs can create set from Iterable and Collection */
// Create set from any Iterator
Iterator<String> iterator = collection.iterator();
Set<String> fromIterator = Sets.newHashSet(iterator); // using guava
System.out.println(fromIterator);
// Create set from any array
String[] array = {"4", "5", "6"};
Set<String> fromArray = Sets.newHashSet(array); // using guava
Set<String> fromArrayJDK = new HashSet<>(Arrays.asList(array)); // using JDK
Set<String> fromArrayGS = UnifiedSet.newSetWith(array); // using gs
System.out.println(fromArray);
System.out.println(fromArrayJDK);
System.out.println(fromArrayGS);
System.out.println("createHashSet end");
3지도 만들기 기술 | JDK | 구아바 | GS 모음 |
---|---|---|---|
빈지도 만들기 | new HashMap<>() | Maps.newHashMap() | UnifiedMap.newMap() |
용량 = 130의 맵 생성 | new HashMap<>(130) | Maps.newHashMapWithExpectedSize(100) | UnifiedMap.newMap(130) |
다른지도에서지도 만들기 | new HashMap<>(map) | Maps.newHashMap(map) | UnifiedMap.newMap(map) |
키로지도 만들기 | - | - | UnifiedMap.newWithKeysValues("1", "a", "2", "b") |
예 :
System.out.println("createHashMap start");
// Create empty map
Map<String, String> emptyGuava = Maps.newHashMap(); // using guava
Map<String, String> emptyJDK = new HashMap<>(); // using JDK
Map<String, String> emptyGS = UnifiedMap.newMap(); // using gs
// Create map with about 100 element
Map<String, String> approx100 = Maps.newHashMapWithExpectedSize(100); // using guava
Map<String, String> approx100JDK = new HashMap<>(130); // using JDK
Map<String, String> approx100GS = UnifiedMap.newMap(130); // using gs
// Create map from another map
Map<String, String> map = new HashMap<>(3);
map.put("k1","v1");
map.put("k2","v2");
Map<String, String> withMap = Maps.newHashMap(map); // using guava
Map<String, String> withMapJDK = new HashMap<>(map); // using JDK
Map<String, String> withMapGS = UnifiedMap.newMap(map); // using gs
System.out.println(withMap);
System.out.println(withMapJDK);
System.out.println(withMapGS);
// Create map from keys
Map<String, String> withKeys = UnifiedMap.newWithKeysValues("1", "a", "2", "b");
System.out.println(withKeys);
System.out.println("createHashMap end");
추가 예제 : CreateCollectionTest
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow