2015-03-12 2 views
0

Предположим, что у меня есть LinkedhashMap<String, List> myLHM = new LinkedHashMap<>()Дубликаты ключей в LinkedHashMap

Значения myLHM:.

<Roy,[1,2,3]> 
<Roy,[14,15,16]> 
<Neha,[1,5,6]> 
<Neha,[11,12,13]> 
<Jane,[11,8,9]> 

В выше, например, Roy и Neha повторяющийся/продублировать.

Можно ли хранить дубликаты ключей в myLHM? Потому что я не могу хранить дубликаты ключей

Нет? Тогда какова альтернатива LinkedHashMap для хранения дубликатов ключей?

TIA!

Edit: Те два Roy и Neha каждый тот же человек

+0

Что вы действительно хотите? с дублированием или без дублирования? – user3289108

+0

с дублированием – DancingMonkeyOnLaughingBuffalo

+0

Хорошо, что такое 'Roy' и' Neha'? Являются ли они строкой или ключом? Если ключ, вам нужно понять, что, если ключ первым. 'Key' всегда уникален. – user3289108

ответ

1

Добавить список элементов по ключу. Всякий раз, когда вы вставляете, если ключ был найден, просто добавьте в коллекцию. Если вы не нашли, добавьте новый colelction с текущим элементом.

2

Я не знаю ни одной карты в стандартной библиотеке java, которая может хранить дубликаты ключей, но Guava - отличное расширение обычных коллекций java (и многое другое), выполненных Google. Там у вас есть Multimap, который может содержать несколько значений для одного и того же ключа (я думаю, это то, что вы хотите в конце). Основное преимущество, которое я нахожу в использовании такой библиотеки/реализации, заключается в том, что она будет заботиться обо всем, что связано с хранением значений, и вам не нужно беспокоиться о ее реализации самостоятельно.

PS: Guava - это не только сборники, которые, я думаю, это другое Pro, почему вы должны это проверить.

1

Я решил это сам.

Что я сделал используется:

LinkedHashMap<String, ArrayList<ArrayList>> myLHM = new LinkedHashMap<>() ; 

вставленные в него, как:

ArrayList<ArrayList> multiDimArray = new ArrayList<>(); 

ArrayList list = new ArrayList(); 
list.add("abc");//some string 1 
list.add("lmn");//some string 2 
list.add("xyz");//some string 3 

multiDimArray.add(list); 
myLHM.put("abc"/*use your variable OR pass value like myList.get(position)*/,multiDimArray); 

извлечённому/Источник ценности, как:

List tempNames=new ArrayList(); 
Iterator myVeryOwnIterator = myLHM.keySet().iterator(); 
while(myVeryOwnIterator.hasNext()) { 
    tempNames.add(myVeryOwnIterator.next()); 
} 

ArrayList<ArrayList> tempArrayList = new ArrayList(); 
for (int i=0;i<tempNames.size();i++){ 
    tempArrayList.addAll(myLHM.get(tempNames.get(i))); 
} 

String item = null; int year = 0; int amount = 0; 
for (int i=0;i<tempArrayList.size();i++) { 
    for (int j=0;j<tempArrayList.get(i).size();j++){ 
     if(j==0){ 
      item = (String) tempArrayList.get(i).get(j); 
      item = item.replaceAll("\\s", "_"); 
      } else if (j==1){ 
      year = Integer.valueOf(tempArrayList.get(i).get(j).toString()); 
      } else if (j==2){ 
      amount = Integer.valueOf(tempArrayList.get(i).get(j).toString()); 
      } else { 
      Log.e("Problem","for loop error"); 
      } 
    } 
    db.execSQL("INSERT INTO ch // my insert query... 
    VALUES(" +"'" + item +"'," + year +"," + amount +"," + id +");"); 
} 
+0

. Вы должны принять этот ответ как правильный ответ, чтобы вопрос принял принятый ответ. –

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