关于map的一个小问题

gcw634 2010-01-15 03:43:48
List listA = new ArrayList();
List listB = new ArrayList();

Object[] objectc = new Object[] { "aa", "123", "542" };
Object[] objecte = new Object[] { "ww", "524", "865" };
Object[] objecth = new Object[] { "qq", "458", "632" };
Object[] objectp = new Object[] { "gg", "758", "632" };

listA.add(objectc);
listA.add(objecte);
listA.add(objecth);
listA.add(objectp);

Object[] objectq = new Object[] { "gg", "632", "751" };
Object[] objectb = new Object[] { "aa", "123", "123" };
Object[] objecty = new Object[] { "gg", "952", "156" };

listB.add(objectq);
listB.add(objectb);
listB.add(objecty);

Hashtable<String, LinkedHashSet<Object>> ht = new Hashtable<String, LinkedHashSet<Object>>();
for (int i = 0; i < listA.size(); i++) {
Object[] ss = (Object[]) (listA.get(i));
LinkedHashSet<Object> set = new LinkedHashSet<Object>();
set.addAll(Arrays.asList(ss));
ht.put((String)ss[0], set);
}

for (int i = 0; i < listB.size(); i++) {
Object[] ss = (Object[]) (listB.get(i));
LinkedHashSet<Object> set = new LinkedHashSet<Object>();
set.addAll(Arrays.asList(ss));
if (ht.get((String)ss[0]) != null) {
LinkedHashSet<Object> value = ht.get(ss[0]);
value.addAll(set);
ht.put((String)ss[0], value);
} else {
ht.put((String)ss[0], set);
}
}

Iterator it = ht.keySet().iterator();
while (it.hasNext()) {
String key = (String) (it.next());
LinkedHashSet value = ht.get(key);
Iterator it1 = value.iterator();
while (it1.hasNext()) {
System.out.print(it1.next() + " ");
}
System.out.println();
}

结果是这样:
qq 458 632 
gg 758 632 751 952 156
ww 524 865
aa 123 542


我要的结果是:
qq 458 632 
gg 758 632 632 751 952 156
ww 524 865
aa 123 542 123 123


为什么我listA和listB中的重复的值都没有了,我这个值是value啊,并不是key
...全文
127 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
healer_kx 2010-01-15
  • 打赏
  • 举报
回复
这个对了。。。

是因为LinkedHashSet造成的,他存放的内容不可以重复。


import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;

public class Cast {

public static void main(String[] args) {
List listA = new ArrayList();
List listB = new ArrayList();
Object[] objectc = new Object[] { "aa", "123", "542" };
Object[] objecte = new Object[] { "ww", "524", "865" };
Object[] objecth = new Object[] { "qq", "458", "632" };
Object[] objectp = new Object[] { "gg", "758", "632" };
listA.add(objectc);
listA.add(objecte);
listA.add(objecth);
listA.add(objectp);
Object[] objectq = new Object[] { "gg", "632", "751" };
Object[] objectb = new Object[] { "aa", "123", "123" };
Object[] objecty = new Object[] { "gg", "952", "156" };
listB.add(objectq);
listB.add(objectb);
listB.add(objecty);
Hashtable<String, ArrayList<Object>> ht = new Hashtable<String, ArrayList<Object>>();
for (int i = 0; i < listA.size(); i++) {
Object[] ss = (Object[]) (listA.get(i));
ArrayList<Object> set = new ArrayList<Object>();
set.addAll(Arrays.asList(ss));
ht.put((String) ss[0], set);
}
for (int i = 0; i < listB.size(); i++) {
Object[] ss = (Object[]) (listB.get(i));
ArrayList<Object> set = new ArrayList<Object>();
set.addAll(Arrays.asList(Arrays.copyOfRange(ss, 1, ss.length)));
if (ht.get((String) ss[0]) != null) {

ArrayList<Object> value = ht.get(ss[0]);
value.addAll(set);
ht.put((String) ss[0], value);
} else {
ht.put((String) ss[0], set);
}
}
Iterator it = ht.keySet().iterator();
while (it.hasNext()) {
String key = (String) (it.next());
ArrayList value = ht.get(key);
Iterator it1 = value.iterator();
while (it1.hasNext()) {
System.out.print(it1.next() + " ");
}
System.out.println();
}

}
}

gcw633 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qianzhimeiying 的回复:]
...这好象是我刚才写的那个...

value我定义成了set,所以addAll的时候重复的部分就去掉了,你不希望去掉重复的,就换成ArrayList
[/Quote]
是你写的,谢谢啊!!没有分了,所以又开了个小号来求教,第一次使用哈希表,很多都不明白呢
qianzhimeiying 2010-01-15
  • 打赏
  • 举报
回复
...这好象是我刚才写的那个...

value我定义成了set,所以addAll的时候重复的部分就去掉了,你不希望去掉重复的,就换成ArrayList
focusforce 2010-01-15
  • 打赏
  • 举报
回复
LinkedHashSet造成的,你用ArrayList就是你要的结果。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧