Java Language
Alternatieve collecties
Zoeken…
Opmerkingen
Dit onderwerp over Java-collecties van guave, apache, eclipse: Multiset, Bag, Multimap, maakt gebruik van de functie van deze bibliotheek enzovoort.
Apache HashBag, Guava HashMultiset en Eclipse HashBag
Een tas / ultiset slaat elk object in de collectie op samen met een aantal gebeurtenissen. Met extra methoden op de interface kunnen meerdere exemplaren van een object tegelijk worden toegevoegd of verwijderd. JDK analog is HashMap <T, Integer>, wanneer waarden het aantal exemplaren van deze sleutel is.
Type | guava | Apache Commons Collecties | GS Collecties | JDK |
---|---|---|---|---|
Bestelling niet gedefinieerd | HashMultiset | HashBag | HashBag | Hash kaart |
gesorteerde | TreeMultiset | TreeBag | TreeBag | TreeMap |
Insertion-order | LinkedHashMultiset | - | - | LinkedHashMap |
Gelijktijdige variant | ConcurrentHashMultiset | SynchronizedBag | SynchronizedBag | Collections.synchronizedMap(HashMap<String, Integer>) |
Gelijktijdig en gesorteerd | - | SynchronizedSortedBag | SynchronizedSortedBag | Collections.synchronizedSortedMap(TreeMap<String,Integer>) |
Onveranderlijke verzameling | ImmutableMultiset | UnmodifiableBag | UnmodifiableBag | Collections.unmodifiableMap(HashMap<String, Integer)] |
Onveranderlijk en gesorteerd | ImmutableSortedMultiset | UnmodifiableSortedBag | UnmodifiableSortedBag | Collections.unmodifiableSortedMap(TreeMap<String, Integer> ) |
Voorbeelden :
1. Met behulp van SynchronizedSortedBag van Apache :
// 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. TreeBag van Eclipse (GC) gebruiken :
// 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 van Guava gebruiken :
// 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
Meer voorbeelden:
I. Apache-verzameling:
- HashBag - bestelling niet gedefinieerd
- SynchronizedBag - gelijktijdig en volgorde niet gedefinieerd
- SynchronizedSortedBag - - gelijktijdige en gesorteerde volgorde
- TreeBag - gesorteerde volgorde
II. GS / Eclipse-collectie
- MutableBag - volgorde niet gedefinieerd
- MutableSortedBag - gesorteerde volgorde
III. guava
- HashMultiset - volgorde niet gedefinieerd
- TreeMultiset - gesorteerde volgorde
- LinkedHashMultiset - invoegvolgorde
- ConcurrentHashMultiset - gelijktijdig en volgorde niet gedefinieerd
Multimap in Guava-, Apache- en Eclipse-collecties
Met deze multimap zijn dubbele sleutel / waarde-paren mogelijk. JDK-analogen zijn HashMap <K, List>, HashMap <K, Set> enzovoort.
Key's bestelling | Waarde's bestelling | Duplicaat | Analoge sleutel | Analoge waarde | guava | Apache | Eclipse (GS) Collecties | JDK |
---|---|---|---|---|---|---|---|---|
niet gedefinieerd | Insertion-order | Ja | Hash kaart | ArrayList | ArrayListMultimap | MultiValueMap | FastListMultimap | HashMap<K, ArrayList<V>> |
niet gedefinieerd | niet gedefinieerd | Nee | Hash kaart | HashSet | HashMultimap | MultiValueMap. multiValueMap( new HashMap<K, Set>(), HashSet.class); | UnifiedSetMultimap | HashMap<K, HashSet<V>> |
niet gedefinieerd | gesorteerde | Nee | Hash kaart | TreeSet | Multimaps. newMultimap( HashMap, Supplier <TreeSet>) | MultiValueMap.multiValueMap( new HashMap<K, Set>(), TreeSet.class) | TreeSortedSet- Multimap | HashMap<K, TreeSet<V>> |
Insertion-order | Insertion-order | Ja | LinkedHashMap | ArrayList | LinkedListMultimap | MultiValueMap. multiValueMap (nieuwe LinkedHashMap <K, List> (), ArrayList.class); | LinkedHashMap <K, ArrayList> | |
Insertion-order | Insertion-order | Nee | LinkedHashMap | LinkedHashSet | LinkedHashMultimap | MultiValueMap. multiValueMap(new LinkedHashMap<K, Set>(), LinkedHashSet.class) | LinkedHashMap<K, LinkedHashSet<V>> | |
gesorteerde | gesorteerde | Nee | TreeMap | TreeSet | TreeMultimap | MultiValueMap. multiValueMap( new TreeMap<K, Set>(),TreeSet.class) | TreeMap<K, TreeSet<V>> |
Taak : Parse "Hallo wereld! Hallo allemaal! Hallo wereld!" tekenreeks om woorden te scheiden en alle indexen van elk woord af te drukken met behulp van MultiMap (bijvoorbeeld Hello = [0, 2], World! = [1, 5] enzovoort)
1. MultiValueMap van Apache
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. HashBiMap van GS / Eclipse-collectie
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 uit Guava
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
Geen voorbeelden:
I. Apache-verzameling:
II. GS / Eclipse-collectie
III. guava
Operatie vergelijken met collecties - Collecties maken
Operatie vergelijken met collecties - Collecties maken
1. Maak een lijstBeschrijving | JDK | guava | gs-collecties |
---|---|---|---|
Maak een lege lijst | new ArrayList<> () | Lists.newArrayList() | FastList.newList() |
Maak een lijst met waarden | Arrays.asList("1", "2", "3") | Lists.newArrayList("1", "2", "3") | FastList.newListWith("1", "2", "3") |
Maak een lijst met capaciteit = 100 | new ArrayList<>(100) | Lists.newArrayListWithCapacity(100) | FastList.newList(100) |
Maak een lijst van elke collectin | new ArrayList<>(collection) | Lists.newArrayList(collection) | FastList.newList(collection) |
Maak een lijst van elke Iterable | - | Lists.newArrayList(iterable) | FastList.newList(iterable) |
Maak een lijst van Iterator | - | Lists.newArrayList(iterator) | - |
Maak lijst van array | Arrays.asList(array) | Lists.newArrayList(array) | FastList.newListWith(array) |
Maak een lijst met de fabriek | - | - | FastList.newWithNValues(10, () -> "1") |
Voorbeelden:
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 Maak een set Beschrijving | JDK | guava | gs-collecties |
---|---|---|---|
Maak een lege set | new HashSet<>() | Sets.newHashSet() | UnifiedSet.newSet() |
Creatre ingesteld op basis van waarden | new HashSet<>(Arrays.asList("alpha", "beta", "gamma") ) | Sets.newHashSet("alpha", "beta", "gamma") | UnifiedSet.newSetWith("alpha", "beta", "gamma") |
Maak een set uit alle collecties | new HashSet<>(collection) | Sets.newHashSet(collection) | UnifiedSet.newSet(collection) |
Maak een set van elke Iterable | - | Sets.newHashSet(iterable) | UnifiedSet.newSet(iterable) |
Maak een set vanuit elke Iterator | - | Sets.newHashSet(iterator) | - |
Maak een set van Array | new HashSet<>(Arrays.asList(array)) | Sets.newHashSet(array) | UnifiedSet.newSetWith(array) |
Voorbeelden:
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 Maak een kaart Beschrijving | JDK | guava | gs-collecties |
---|---|---|---|
Maak een lege kaart | new HashMap<>() | Maps.newHashMap() | UnifiedMap.newMap() |
Maak een kaart met capaciteit = 130 | new HashMap<>(130) | Maps.newHashMapWithExpectedSize(100) | UnifiedMap.newMap(130) |
Maak een kaart van een andere kaart | new HashMap<>(map) | Maps.newHashMap(map) | UnifiedMap.newMap(map) |
Maak een kaart met toetsen | - | - | UnifiedMap.newWithKeysValues("1", "a", "2", "b") |
Voorbeelden:
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");
Meer voorbeelden: CreateCollectionTest