2017-02-17 7 views
0

Возможно ли создать несколько экземпляров хэш-карт с одним и тем же ключом? Например:Несколько экземпляров HashMap

while(br.readLine != ""){ 
HashMap<Integer,String> hm=new HashMap<Integer,String>(); 
String[] Values = readLine.split(":"); 
    hm.put(1,Value[1]); 
    hm.put(2,Value[2); 
    hm.put(3,Value[3]); 
} 

В этом случае, будет будет создан новый экземпляр HashMap для каждой итерации цикла или будет получить перекрываться?

Если он перегружен, как реализовать несколько экземпляров карты в этом сценарии?

+0

Желательно, чтобы каждый новичок java должен был пожертвовать $ 1 на благотворительность для сравнения строк с использованием '==' или '! =' .... –

ответ

3

Новый экземпляр HashMap будет создан для каждой итерации цикла и будет иметь право на GC, когда итерация закончится, потому что нет ссылок на него.

Вы можете создать List<HashMap<Integer, String>> вне цикла и продолжать добавлять вновь созданные карты в этот список в цикле, чтобы они были доступны вне цикла.

PS: Если «overridden», вы имеете в виду «перезаписан», то «нет», старый экземпляр hashmap не «повторно используется». Для каждой итерации создается новый экземпляр.

0

В этом случае будет создан новый экземпляр hashmap для каждой итерации цикла или будет ли он превышен?

Новый экземпляр Карты, созданный каждый раз.

Если он перегружен, как реализовать несколько экземпляров карты в этом сценарии?

Не ovveriden. Несколько экземпляров созданных.

Помните, что всякий раз, когда вы используете новое ключевое слово, вы создаете новый экземпляр класса.

И они не полезны в любом случае после завершения цикла. Надеюсь, вы что-то делаете на хэш-карте, позже в цикле.

+1

Благодарю вас, но ваш комментарий более ценен, чем голос. –

0

Сначала вы должны переместить карту из инструкции while, иначе на каждой итерации вы создадите новый экземпляр Map и, следовательно, вы потеряете содержимое, помещенное в предыдущий экземпляр карты.

Я не вижу смысла создавать экземпляр карты для каждой строки, содержащей несколько значений.
Кажется, накладные расходы.

Чтобы не перезаписывать значение, связанное с предопределенными ключами, вы можете использовать одну карту и иметь несколько значений String, связанных с ключом.
Таким образом, вы можете использовать Map от List от String вместо Map от String.

Если у вас есть 3 постоянных ключа, как в вашем примере, вы можете инициализировать список до цикла.
В противном случае вы можете динамически создавать список.

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

map.put(1, new ArrayList<String>()); 
map.put(2, new ArrayList<String>()); 
map.put(3, new ArrayList<String>()); 

while(br.readLine != nul){ 

    String[] values = readLine.split(":"); 

    map.get(1).add(values[0]); 
    map.get(2).add(values[1]); 
    map.get(3).add(values[2]); 
}