【发布时间】:2011-12-16 08:56:17
【问题描述】:
我有一个ArrayList,其中有一些HashMap<String, String>。所以,我想比较地图中的相同值。当我找到相同的值时,我想保留它们的一张地图。例如,考虑第二个映射和第五个映射(在数组列表中)具有相同的值。我想保留第二张地图并从数组列表中删除第五张地图。
我尝试使用迭代器,但我做不到。看起来很复杂。可以举个例子吗?
这是我最后一次尝试:
private HashMap<String, String> mapValues = new HashMap<String, String>();
private HashMap<String, String> mapValues2 = new HashMap<String,String>();
private HashMap<Integer, String> mval = new HashMap<Integer, String>();
//i take the ArrayList with the maps for comparison private
ArrayList<HashMap<String, String>> check(ArrayList<HashMap<String, String>> list) {
//a new ArrayList. It will have the maps(HashMap<key, value>) with no same values.
ArrayList<HashMap<String, String>> listFinal = new ArrayList<HashMap<String, String();
for (int i = 0; i < list.size(); i++) {
mapValues = list.get(i);
mval.put(i, mapValues.get("value"));
}
for (int i = 0; i < mval.size(); i++) {
HashMap<String, String> newMapValues = new HashMap<String, String>();
mapValues2 = list.get(i);
String iVal = mapValues2.get("value");
newMapValues = list.get(i);
int flag = -1;
int remove = -1;
for (int j = i+1; j < mval.size()-1; j++) {
String jVal = mval.get(j);
if (val.compareTo(jVal) == 0) {
flag = i;
remove = j;
}
}
if (flag == -1) {
listFinal.add(newMapValues );
} else if (flag != -1) {
listFinal.remove(remove);
}
}
}
【问题讨论】:
-
我将其重新标记为 Java,因为您说的是
ArrayList(大写 A 和 L)和HashMap(大写 H 和 M) -
您如何看待地图具有相同的价值?有一个相同的元素,具有相同的键,还是具有完全相同的一组元素?这真的取决于!请澄清一下你的答案。
-
请发布一个显示您的数据结构的代码示例。
-
@pcalcao 我的意思是元素。没有键,没有设置。
-
如果地图 1 的值为 {1, 2},地图 2 的值为 {1, 3},地图 3 的值为 {3, 4},会发生什么?您必须删除地图 2,因为它与地图 1 共享一个值,然后地图 3 与地图 2 共享一个值,但与地图 1 不共享。地图 3 会发生什么?这真的不简单。如果我们找出您的问题的背景可能会更好。我认为你最好使用不同的数据结构,或者在使用数据时留下冲突并解决它们......
标签: java algorithm arraylist compare hashmap