LinkedHashMap中的重复键

时间:2015-03-12 12:54:52

标签: android linkedhashmap

假设我有LinkedhashMap<String, List> myLHM = new LinkedHashMap<>()

myLHM的值:

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

在上面的例子中,RoyNeha是重复/重复的。

是否可以在myLHM中保留重复的密钥?因为我无法存储重复的密钥

没有?那么LinkedHashMap可以替代保留重复键的替代方法吗?

TIA!

修改:这两个RoyNeha都是同一个人

3 个答案:

答案 0 :(得分:2)

我不知道标准java库中可以容纳重复键的任何地图,但Guava是Google完成的普通java Collections(以及更多)的优秀扩展。你有Multimap可以为同一个键保存多个值(我猜这到底是你想要的)。我在使用这样的库/实现时发现的主要好处是,它将为您提供与值存储相关联的所有内容,而您不需要为自己实现它而烦恼。

PS:Guava不只是关于收藏品,我认为它是另一个Pro,为什么你应该检查它。

答案 1 :(得分:1)

按键添加项目列表。无论何时插入,如果找到了密钥,只需添加到集合中即可。如果未找到,请使用当前项添加新的合并。

答案 2 :(得分: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 +");");
}