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)")
}
Вам не нужно повторно добавлять 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]
Использовать Multimap из Google Collections. Он позволяет использовать несколько значений для одного и того же ключа
https://google.github.io/guava/releases/19.0/api/docs/com/google/common/collect/Multimap.html
было бы быстрее, если бы вы использовали LinkedList вместо ArrayList, так как ArrayList нужно будет изменить размер, когда он приблизится к емкости.
вам также нужно будет соответствующим образом оценить емкость создаваемая вами коллекция обертываний (HashMap или Multimap), чтобы избежать повторного хеширования.
Значения ArrayList в вашем HashMap являются ссылочными. Вам не нужно «возвращать его в HashMap». Вы работаете с объектом, который уже существует как значение в HashMap.
Я думаю, что вам нужна 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 значения. "
Как уже упоминалось, MultiMap
- ваш лучший вариант.
В зависимости от ваших бизнес-требований или ограничений файла данных, вы можете подумать о том, чтобы сделать одно- вне сортировки, чтобы сделать его более оптимизированным для загрузки.