Лучший способ создать hashmap arraylist

Swift 2.2

 func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
    let x = collectionView.contentOffset.x
    let w = collectionView.bounds.size.width
    let currentPage = Int(ceil(x/w))
    print("Current Page: \(currentPage)")
}
28
задан Jeff Atwood 5 October 2009 в 04:04
поделиться

6 ответов

Вам не нужно повторно добавлять ArrayList обратно на вашу карту. Если ArrayList уже существует, просто добавьте к нему свое значение.

Улучшенная реализация может выглядеть так:

Map<String, Collection<String>> map = new HashMap<String, Collection<String>>();

при обработке каждой строки:

String user = user field from line
String value = value field from line

Collection<String> values = map.get(user);
if (values==null) {
    values = new ArrayList<String>();
    map.put(user, values)
}
values.add(value);

Последующие действия, апрель 2014 г. - Я написал исходный ответ обратно в 2009 год, когда мои знания о Google Guava были ограничены. В свете всего, что делает Google Guava, теперь я рекомендую использовать его Multimap вместо того, чтобы изобретать его заново.

Multimap<String, String> values = HashMultimap.create();
values.put("user1", "value1");
values.put("user2", "value2");
values.put("user3", "value3");
values.put("user1", "value4");

System.out.println(values.get("user1"));
System.out.println(values.get("user2"));
System.out.println(values.get("user3"));

Выводы:

[value4, value1]
[value2]
[value3]
65
ответ дан 28 November 2019 в 02:29
поделиться

Использовать Multimap из Google Collections. Он позволяет использовать несколько значений для одного и того же ключа

https://google.github.io/guava/releases/19.0/api/docs/com/google/common/collect/Multimap.html

12
ответ дан 28 November 2019 в 02:29
поделиться

было бы быстрее, если бы вы использовали LinkedList вместо ArrayList, так как ArrayList нужно будет изменить размер, когда он приблизится к емкости.

вам также нужно будет соответствующим образом оценить емкость создаваемая вами коллекция обертываний (HashMap или Multimap), чтобы избежать повторного хеширования.

-1
ответ дан 28 November 2019 в 02:29
поделиться

Значения ArrayList в вашем HashMap являются ссылочными. Вам не нужно «возвращать его в HashMap». Вы работаете с объектом, который уже существует как значение в HashMap.

4
ответ дан 28 November 2019 в 02:29
поделиться

Я думаю, что вам нужна Multimap. Вы можете получить его из коллекции общих ресурсов Apache или из коллекции Google.

http://commons.apache.org/collections/

http://code.google.com/p/google-collections/

"подобна Map, но который может связывать несколько значений одним ключом. Если вы коллируете пут (K, V) дважды, тем же ключом, но разные значения, мультикарта contains mappings from the key to both значения. "

1
ответ дан 28 November 2019 в 02:29
поделиться

Как уже упоминалось, MultiMap - ваш лучший вариант.

В зависимости от ваших бизнес-требований или ограничений файла данных, вы можете подумать о том, чтобы сделать одно- вне сортировки, чтобы сделать его более оптимизированным для загрузки.

-1
ответ дан 28 November 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: