日期:2014-05-20  浏览次数:20863 次

List的组合
假定有N个list,list里面有M个整数。怎么样将这N个list无缝的拼接起来。例如aList有123456,bList有45678,cList有789。这个时候,aList与cList就无缝的拼接起来了,变成dList:123456789。

------解决方案--------------------
循环,去重复,不过不同的方法效率不一样
List<Integer> l1 = new ArrayList<Integer>();
List<Integer> l2 = new ArrayList<Integer>();
for (int i = 1; i < 7; i++) {
l1.add(i);
}
for (int i = 4; i < 9; i++) {
l2.add(i);
}
l1.addAll(l2);

Set set = new HashSet();
List newList = new ArrayList();
for (Iterator iter = l1.iterator(); iter.hasNext();) {
Object element = iter.next();
if (set.add(element))
newList.add(element);
}
for (Object o : newList) {
System.out.print(o);
}
System.out.println("\n---");
List<Integer> listInt = new ArrayList<Integer>(
new LinkedHashSet<Integer>(l1));
for (Integer o : listInt) {
System.out.print(o);
}

------解决方案--------------------
list的 排序 比较 组合
------解决方案--------------------
1,HashSet, 把List里面的数依次放进来它自己会去重的.
2,如果必须合成为一个List,则在1的基础上通过ArrayList(Collection<? extends E> c)的构造函数new 一个List
3, 或者创建一个空的ArrayList,其他往里方的时候用contains比较是否已包含
------解决方案--------------------
判断下首尾的元素是否能符合加1原则就可以了吧。第一个的尾+1是否等于第二个的首。中间的元素就不用考虑了。
------解决方案--------------------
123  和 789 算不算无缝?还是说,必须要完全链接起来的,有序的整数呢?

------解决方案--------------------
你么你把list 全部转化为string 好了额。index 有的话就不拼接,反之就拼。
------解决方案--------------------
public static void main(String args[]) throws Exception{
List list1=new ArrayList();
List list2=new ArrayList();

list1.add("1");
list1.add("2");
list2.add("2");
List<String> newChar=new ArrayList();
concat(newChar,list1,list2);
for(int i=0;i<newChar.size();i++){
System.out.println(newChar.get(i));
}
}

static List concat(List<String> newChar,List<String> list1,List<String> list2){
String[] char1=list1.toArray(new String[0]);
String[] char2=list2.toArray(new String[0]);

for(int i=0;i<char1.length;i++){
newChar.add(char1[i]);
}
for(int j=0;j<char2.length;j++){
if(!newChar.contains(char2[j])) newChar.add(char2[j]);
else {
System.out.println("有重复元素,不能拼接");
newChar.removeAll(newChar);
break;
}
}
return newChar;
}

------解决方案--------------------
前提list中已经是不间断的整数组合,那试试第一个的尾+1是否等于第二个的首,是的话就for取值到list中,不是就continue;

------解决方案--------------------
引用:
Quote: 引用:

123  和 789 算不算无缝?还是说,必须要完全链接起来的,有序的整数呢?


完全链接起来,有序的

嗯,思路大概要做两个操作:1. 新来的list要与原list无缝(可以参考5L思路);2. 通过1判断后,新来的list还要为有序的。这个只要遍历一次,不停+1相等即可。