关于两个List的合并 两个list如何根据相同的信息连接?比如List1中有a,b两个字段,list2中有a,c两个字段,怎么根据a的值相同连接起来?List1:a b1 a2 b3 cList2a c1 d2 e3 f如何得到list31 a d2 b e3 c f 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先将两个列表排序然后设置两个指示值p1,p2,如果p1指示的大于p2,移动p2,反之移动p1,如果相等,把p1、p2指示的数据添加到list3,并p1、p2均移动 List list1 = new ArrayList(); String[] item1 = new String[]{"1", "a"}; String[] item2 = new String[]{"2", "b"}; String[] item3 = new String[]{"3", "c"}; list1.add(item1); list1.add(item2); list1.add(item3); List list2 = new ArrayList(); String[] item4 = new String[]{"1", "d"}; String[] item5 = new String[]{"2", "e"}; String[] item6 = new String[]{"3", "f"}; list2.add(item4); list2.add(item5); list2.add(item6); String[] itemI = null; String[] itemJ = null; ArrayList result = new ArrayList(); for (int i = 0; i < list1.size(); i++) { itemI = (String[])list1.get(i); for (int j = 0; j < list2.size(); j++) { itemJ = (String[])list2.get(j); if (itemI[0].equals(itemJ[0])) { result.add(new String[]{itemI[0], itemI[1], itemJ[1]}); } } } String[] item = null; for (int i = 0; i < result.size(); i++) { item = (String[])result.get(i); System.out.println(item[0] + " " + item[1] + " " + item[2]); } 一个 List 元素中只能存一个值,你为什么可以存两个值? 感谢两位回答。不过现在的问题可能更复杂一点,就是可能有更多的字段:比如List1: a b c d e List2: a b c f g要求a b c 三个字段相同的保留,然后合并,最后形成a b c d e f g to bao110908(长牙了,好痛):不好意思。我说的简化了,其实就是一个list里面有map对象。如下所示:List<RowData> dataList = new ArrayList<RowData>();Map map = (Map) dataList.get(0); 我能想到的是用List.contains(o)或者List.indexOf(o)但是不知道该怎么用 很难看明白,其中的数据结构。map 中的 key 和 value 各是什么?数据的组织方式?因为这些不清楚的话,很难下手的。RowData 是什么样的东东,为什么可以强转成 Map 类型。疑惑多多。 map对象? 那你map对象的Key是什么? 我以为我说清楚了,真晕。RowData 就是一行的对象,map(key,value)类似这样的:比如map(1,a).感觉可能还没说清楚,这样吧,能告诉我List.contains(o)或者List.indexOf(o)这两个方法是干嘛用的吗? contaions 检查 List 中是否有该对象,有返回 true,没有返回 falseindexOf 获得 List 中第一次出现该对象的索引点,没有时返回 -1。 哦,那我有个思路:把两个List中需要判断的是否相等的几个字段放到对象里比如:<a,b,c> <d,e> (其中a,b,c需要判断)然后在一个list2里遍历list1的<a,b,c>,如果找到,就连接起来。不过List.contaions只能比较整个对像:<a,b,c> <d,e> 能不能比较其中的一部分呢? @_@ 好想帮帮你,但是我实在是弄不清其中的结构。good luck contains也解决不了你题目中提到的问题呀,它只能判断它自己的列表内的对象是否存在indexOf是返回对象在列表中的index,更与你的题目没有关系 bao110908(长牙了,好痛) ,sureyor() ( ) 两位大哥留下联系方式,或者加我QQ:37727640好吗?今天务必要解决这个问题,多谢二位了~! 楼主的这个问题其实很容易解决:用一个List保存所有的Key,比如题目中的1,2,3或者你说的a,b,c当然a,b,c需要拼起来,如果是复杂对象就另当别论啦用两个hashmap保存[1,a],[1,b],[1,c]和[1,d],[1,e],[1,f],然后遍历list,根据key去两个hashmap中判断是否有存在的对象,如果都有就拼起来,存放到一个list中 1个hashMap就够了,已经测试过public static void main(String[] args) { List list1 = new ArrayList(); String[] item1 = new String[]{"1", "a"}; String[] item2 = new String[]{"2", "b"}; String[] item3 = new String[]{"3", "c"}; list1.add(item1); list1.add(item2); list1.add(item3); List list2 = new ArrayList(); String[] item4 = new String[]{"1", "d"}; String[] item5 = new String[]{"2", "e"}; String[] item6 = new String[]{"3", "f"}; list2.add(item4); list2.add(item5); list2.add(item6); List resultList=new ArrayList(); Map tempMap=new HashMap(); Iterator it2 = list2.iterator(); String[] tempArray=null; while(it2.hasNext()){ tempArray=(String[])it2.next(); tempMap.put(tempArray[0],tempArray[1]); } Iterator it1 = list1.iterator(); while(it1.hasNext()){ tempArray=(String[])it1.next(); if(tempMap.get(tempArray[0])!=null){ String[] resultArray=new String[3]; resultArray[0]=tempArray[0]; resultArray[1]=tempArray[1]; resultArray[2]=String.valueOf(tempMap.get(tempArray[0])); resultList.add(resultArray); } } Iterator itResult =resultList.iterator(); while(itResult.hasNext()){ tempArray=(String[])itResult.next(); for(int i=0;i<tempArray.length;i++){ System.out.print(tempArray[i]); } System.out.println(); } } import java.util.HashMap;import java.util.Iterator;import java.util.ArrayList;public class guess { public static void main(String[] args) { HashMap map=new HashMap(); HashMap map2=new HashMap(); ArrayList list=new ArrayList(); map.put("1","a"); map.put("2","b"); map.put("3","c"); map2.put("1","d"); map2.put("2","e"); map2.put("3","f"); Iterator it=map.keySet().iterator(); while(it.hasNext()) { Object obj=it.next(); String[] arr=new String[3]; arr[0]=String.valueOf(obj); arr[1]=String.valueOf(map.get(obj)); arr[2]=String.valueOf(map2.get(obj)); list.add(arr); } for (int i=0;i<list.size();i++) { String[] arr=(String[])list.get(i); for (String a:arr) { System.out.print(a+"\t"); } System.out.println(""); } }} 关于多线程的一个问题 什么是面向接口编程 菜鸟提问 禁止JSP页面内信息删除的问题 JAVA调用CMD问题 如何遍历MAP类型的里的内容? BigDecimal型数据右补零的问题! 用java写木马程序怎么运行?? 问一个mysql的问题,为什么转义字串存到mysql中再取出全变成了带\的转义表达? 哪个网站可以Down电脑图书 关于字符流的问题 为什么使用Class类时,没有对Class对像NEW实例化? 笨笨的程序求救....!!
然后设置两个指示值p1,p2,如果p1指示的大于p2,移动p2,反之移动p1,如果相等,把p1、p2指示的数据添加到list3,并p1、p2均移动
String[] item1 = new String[]{"1", "a"};
String[] item2 = new String[]{"2", "b"};
String[] item3 = new String[]{"3", "c"};
list1.add(item1);
list1.add(item2);
list1.add(item3);
List list2 = new ArrayList();
String[] item4 = new String[]{"1", "d"};
String[] item5 = new String[]{"2", "e"};
String[] item6 = new String[]{"3", "f"};
list2.add(item4);
list2.add(item5);
list2.add(item6);
String[] itemI = null;
String[] itemJ = null;
ArrayList result = new ArrayList();
for (int i = 0; i < list1.size(); i++) {
itemI = (String[])list1.get(i);
for (int j = 0; j < list2.size(); j++) {
itemJ = (String[])list2.get(j);
if (itemI[0].equals(itemJ[0])) {
result.add(new String[]{itemI[0], itemI[1], itemJ[1]});
}
}
}
String[] item = null;
for (int i = 0; i < result.size(); i++) {
item = (String[])result.get(i);
System.out.println(item[0] + " " + item[1] + " " + item[2]);
}
不过现在的问题可能更复杂一点,就是可能有更多的字段:
比如List1: a b c d e
List2: a b c f g
要求a b c 三个字段相同的保留,然后合并,
最后形成a b c d e f g
不好意思。我说的简化了,其实就是一个list里面有map对象。
如下所示:
List<RowData> dataList = new ArrayList<RowData>();
Map map = (Map) dataList.get(0);
List.contains(o)
或者List.indexOf(o)
但是不知道该怎么用
RowData 就是一行的对象,
map(key,value)类似这样的:
比如map(1,a).
感觉可能还没说清楚,
这样吧,能告诉我
List.contains(o)
或者List.indexOf(o)
这两个方法是干嘛用的吗?
把两个List中需要判断的是否相等的几个字段放到对象里
比如:<a,b,c> <d,e> (其中a,b,c需要判断)
然后在一个list2里遍历list1的<a,b,c>,如果找到,就连接起来。
不过List.contaions只能比较整个对像:<a,b,c> <d,e>
能不能比较其中的一部分呢?
indexOf是返回对象在列表中的index,更与你的题目没有关系
用一个List保存所有的Key,比如题目中的1,2,3或者你说的a,b,c当然a,b,c需要拼起来,如果是复杂对象就另当别论啦
用两个hashmap保存[1,a],[1,b],[1,c]和[1,d],[1,e],[1,f],然后遍历list,根据key去两个hashmap中判断是否有存在的对象,如果都有就拼起来,存放到一个list中
public static void main(String[] args) {
List list1 = new ArrayList();
String[] item1 = new String[]{"1", "a"};
String[] item2 = new String[]{"2", "b"};
String[] item3 = new String[]{"3", "c"};
list1.add(item1);
list1.add(item2);
list1.add(item3);
List list2 = new ArrayList();
String[] item4 = new String[]{"1", "d"};
String[] item5 = new String[]{"2", "e"};
String[] item6 = new String[]{"3", "f"};
list2.add(item4);
list2.add(item5);
list2.add(item6);
List resultList=new ArrayList();
Map tempMap=new HashMap();
Iterator it2 = list2.iterator();
String[] tempArray=null;
while(it2.hasNext()){
tempArray=(String[])it2.next();
tempMap.put(tempArray[0],tempArray[1]);
}
Iterator it1 = list1.iterator();
while(it1.hasNext()){
tempArray=(String[])it1.next();
if(tempMap.get(tempArray[0])!=null){
String[] resultArray=new String[3];
resultArray[0]=tempArray[0];
resultArray[1]=tempArray[1];
resultArray[2]=String.valueOf(tempMap.get(tempArray[0]));
resultList.add(resultArray);
}
}
Iterator itResult =resultList.iterator();
while(itResult.hasNext()){
tempArray=(String[])itResult.next();
for(int i=0;i<tempArray.length;i++){
System.out.print(tempArray[i]);
}
System.out.println();
}
}
import java.util.HashMap;
import java.util.Iterator;
import java.util.ArrayList;public class guess {
public static void main(String[] args) {
HashMap map=new HashMap();
HashMap map2=new HashMap();
ArrayList list=new ArrayList();
map.put("1","a");
map.put("2","b");
map.put("3","c");
map2.put("1","d");
map2.put("2","e");
map2.put("3","f");
Iterator it=map.keySet().iterator();
while(it.hasNext())
{
Object obj=it.next();
String[] arr=new String[3];
arr[0]=String.valueOf(obj);
arr[1]=String.valueOf(map.get(obj));
arr[2]=String.valueOf(map2.get(obj));
list.add(arr);
}
for (int i=0;i<list.size();i++)
{
String[] arr=(String[])list.get(i);
for (String a:arr)
{
System.out.print(a+"\t");
}
System.out.println("");
}
}
}