2014-11-20 4 views
0

Я попыталсяКак добавить значение и ключ в TreeMap по заданному индексу

 int index = new ArrayList<String>(treemap.values()).indexOf("something"); 

Но я не получаю, как заменить значение и ключ.

Любая помощь будет отличной.

+0

TreeMap сортируется по умолчанию по ключевым словам. Для строки String в порядке возрастания символов или Integer в порядке возрастания номеров – Braj

ответ

1

Вы не можете, TreeMap - это отсортированный тип карты ключей. Ключи сортируются по алгоритму Red-Black tree. Таким образом, ключи сортируются в порядке сортировки.

Если вас интересует порядок, в котором были добавлены ваши элементы, используйте LinkedHashMap.

Anwer Ваш вопрос являются: запись

  • удалить под вами ключ
  • добавить ключ с новым значением

Ps: обновление ключа и значение означает удаление старого ключа, не изменяя его.

спецификация Карта:

  • HashMap - простые пары ключ/значение, несортированный, не может найти вставки заказ
  • LinekdHashMap - несортированный, но сохраняет вставки Заказать
  • TreeMap - сортирует ключи, но может «т найти вставки заказ
+0

Почему нам нужно сначала удалить ключ? почему я не могу установить его снова на том же ключе. Он перезапишет предыдущий. Не так ли? – Braj

+0

Является ли LinkedHashmap короткой картой? –

+0

@ user4274413 LinkedHashMap поддерживает ** порядок вставки **, но все же вы не можете получить его через индекс. – Braj

0

TreeMaps не работает так же. Это не индексированная коллекция (в отличие от Lists), поэтому то, что вы пытаетесь сделать, просто не сработает.

Необходимо удалить старый ключ, если ключ изменен, и вставить новую пару ключ-значение.

+0

почему нам нужно сначала удалить ключ? почему я не могу установить его снова на том же ключе. Он перезапишет предыдущий. Не так ли? – Braj

+0

Вот почему я сказал «если ключ меняется», поскольку вы, кажется, думаете, что можете как-то работать с индексами. – Kayaman

0

Не эффективно осуществимым:

for (Map.Entry<String, String> entry : treemap.entrySet()) { 
    if (entry.getValue().equals("something")) { 
     entry.setValue("entirely different"); 
     //treemap.remove(entry.getKey()); 
     break; 
    } 
} 
+0

Могу ли я использовать 'treemap.remove' во время итерации? – Braj

+0

Если вы немедленно разобьетесь, пропустите итерации. –

Смежные вопросы