假设我有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]>
在上面的例子中,Roy
和Neha
是重复/重复的。
是否可以在myLHM
中保留重复的密钥?因为我无法存储重复的密钥
没有?那么LinkedHashMap
可以替代保留重复键的替代方法吗?
TIA!
修改:这两个Roy
和Neha
都是同一个人
答案 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 +");");
}