Иногда вы хотите проверить, находится ли объект в списке/наборе, и в то же время, когда вы хотите, чтобы список/набор был заказан. Если вы также хотите легко извлекать объекты без использования перечисления или итератора, вы можете рассмотреть возможность использования как ArrayList<String>
, так и HashMap<String, Integer>
. Список поддерживается картой.
Пример из некоторой работы, которую я недавно сделал:
public class NodeKey<K> implements Serializable, Cloneable{
private static final long serialVersionUID = -634779076519943311L;
private NodeKey<K> parent;
private List<K> children = new ArrayList<K>();
private Map<K, Integer> childrenToListMap = new HashMap<K, Integer>();
public NodeKey() {}
public NodeKey(Collection<? extends K> c){
List<K> childHierarchy = new ArrayList<K>(c);
K childLevel0 = childHierarchy.remove(0);
if(!childrenToListMap.containsKey(childLevel0)){
children.add(childLevel0);
childrenToListMap.put(childLevel0, children.size()-1);
}
...
В этом случае параметр K
будет String
для вас. Карта (childrenToMapList
) хранит в качестве ключа Strings
(children
), а значениями карты являются позиция индекса в списке.
Причина для списка и карты заключается в том, что вы можете получить индексированные значения списка без необходимости выполнять итерацию по HashSet<String>
.
Хорошее упражнение было бы попытаться как разные списки/наборы/карты, а затем посмотреть, можете ли вы понять, почему вы получаете разные времена, читая java-документы для коллекций :) – willcodejavaforfood
Чтобы быть уверенным в том, что вы делаете это правильно, научитесь хорошо использовать профилировщик. Самый низкий висящий плод - это jvisualvm один в JDK. –