Иногда вы хотите проверить, есть ли объект в списке / наборе, и в то же время вы хотите, чтобы список / набор был упорядочен. Если вы хотите также легко извлекать объекты без использования перечисления или итератора, вы можете рассмотреть возможность использования 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>
.