问题描述
有如下ListListlist=newArrayList();list.add("a");list.add("b");list.add("a");list.add("c");list.add("a");list.add("b");list.add("d");现在删除list中重复的元素,注意:只要重复的都要删除,把不重复的放到另外一个LIST中。希望的结果:c,d谢谢各位
解决方案
解决方案二:
List->SetSet->List
解决方案三:
引用1楼inhibitory的回复:
List->SetSet->List
good
解决方案四:
可以一个一个的取出来每取一个就判断下是否已经包含这个对象---contains()如果没有就放到另外一个list里
解决方案五:
引用3楼shanxmxj的回复:
可以一个一个的取出来每取一个就判断下是否已经包含这个对象---contains()如果没有就放到另外一个list里
就这样子
解决方案六:
判断一个个是不是和后面的一样,一样就全删了,不一样放入新的LIST中就行了么
解决方案七:
forintiObjecto=list.get(i)remove(i)iflist.contains(o)remove(o)elsenewList.add(o)
解决方案八:
上一个方法有错误,最好是用迭代
解决方案九:
用set做,本身就没有重复的了
解决方案十:
恩?这里怎么还有一个提问帖啊packagecom.configuration.action;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;publicclassTest1{/***@paramargs*/publicstaticvoidmain(String[]args){List<String>list=newArrayList<String>();list.add("a");list.add("b");list.add("a");list.add("c");list.add("a");list.add("b");list.add("d");List<String>list1=newArrayList<String>();Map<String,Integer>map=newHashMap<String,Integer>();for(Stringtemp:list){if(map.containsKey(temp))map.put(temp,map.get(temp)+1);elsemap.put(temp,1);}Iterator<String>iter=list.iterator();while(iter.hasNext()){Stringtemp=iter.next();if(map.get(temp)>1)iter.remove();}}}
解决方案十一:
直接使用去重的容器即可,方便省事
解决方案十二:
该回复于2011-03-07 08:59:54被版主删除
解决方案十三:
那当时直接用HashSet不就得了?
解决方案十四:
该回复于2011-01-12 13:50:13被版主删除
解决方案十五:
正解引用4楼xiaoye2892的回复:
引用3楼shanxmxj的回复:可以一个一个的取出来每取一个就判断下是否已经包含这个对象---contains()如果没有就放到另外一个list里就这样子
解决方案:
importjava.util.ArrayList;importjava.util.List;publicclassA{publicstaticbooleanisRepeat(List<String>list,Stringstr){intk=0;for(inti=0;i<list.size();i++){if(str.equals(list.get(i))){k++;}}if(k==1){returntrue;}else{returnfalse;}}publicstaticvoidmain(String[]args){List<String>list=newArrayList<String>();List<String>list2=newArrayList<String>();list.add("a");list.add("b");list.add("a");list.add("c");list.add("a");list.add("b");list.add("d");for(inti=0;i<list.size();i++){if(isRepeat(list,list.get(i))){list2.add(list.get(i));}}for(inti=0;i<list2.size();i++){System.out.println(list2.get(i));}}}
解决方案:
运行结果:cd没加注释应该能看懂吧
解决方案:
haveatryList<String>list=newArrayList<String>();list.add("a");list.add("b");list.add("a");list.add("c");list.add("a");list.add("b");list.add("d");Set<String>set=newHashSet<String>();for(inti=0;i<list.size();i++){Strings=list.get(i);if(set.contains(s)){continue;}if(list.lastIndexOf(s)!=i){set.add(s);}}list.removeAll(set);System.out.println(Arrays.toString(list.toArray(newString[0])));
解决方案:
好像集合删除多此一举了List<String>list=newArrayList<String>();list.add("a");list.add("b");list.add("a");list.add("c");list.add("a");list.add("b");list.add("d");List<String>list2=newArrayList<String>();for(inti=0;i<list.size();i++){Strings=list.get(i);if(list.lastIndexOf(s)==i){list2.add(s);//不重复的保留}}System.out.println(Arrays.toString(list2.toArray(newString[0])));
解决方案:
上面改为for(Strings:list){if(list.lastIndexOf(s)==list.indexOf(s)){list2.add(s);//不重复的保留}}
解决方案:
引用1楼inhibitory的回复:
List->SetSet->List
+1
解决方案:
引用12楼bao110908的回复:
那当时直接用HashSet不就得了?
对
解决方案:
List<String>list=newArrayList<String>();list.add("a");list.add("b");list.add("a");list.add("c");list.add("a");list.add("b");list.add("d");Set<String>set=newHashSet<String>();List<String>list1=newArrayList<String>();for(Strings:list){Strings=list.get(i);if(set.contains(s)){continue;}set.add(s);list1.add(s);}set=null;System.out.println(list1.size());
解决方案:
ListUtils.removeDuplication
解决方案:
引用1楼inhibitory的回复:
List->SetSet->List
好主意,简单!但要注意Set是无序的,元素不会按照你list添加的书序来排列。
解决方案:
publicstaticvoidmain(String[]args){List<String>list=newArrayList<String>();Set<String>tempList=newHashSet<String>();List<String>resultList=newArrayList<String>();list.add("a");list.add("b");list.add("a");list.add("c");list.add("a");list.add("b");list.add("d");for(Strings:list){if(!resultList.contains(s)){resultList.add(s);}else{tempList.add(s);}}for(Strings:tempList){resultList.remove(s);}System.out.println(resultList.toString());//结果[c,d]}
解决方案:
引用2楼jclick的回复:
引用1楼inhibitory的回复:List->SetSet->Listgood
其实不行,set是不允许重复不是连重复的那个字符也不允许出现,但是lz要重复字符的也一起干掉,这样还是用循环判断吧
解决方案:
算法自便,lz自己封装一个list吧,看起来好看些goodluck
解决方案:
List->SetList-Set=List2List2->Set2List-List2-Set2=LZ你要的结果
解决方案:
该回复于2011-01-14 16:38:14被版主删除
解决方案:
Listlist=newArrayList();list.add("a");list.add("b");list.add("a");list.add("c");list.add("a");list.add("b");list.add("d");HashSetset=newHashSet();set.addAll(list);ArrayListlist2=newArrayList();list2.addAll(list);for(Objecto:set){list.remove(o);}list2.removeAll(list);System.out.println(list2.toString());
解决方案:
9楼的思路不错啊遍历,如果又重复的直接remove掉
解决方案:
方法很多,,,,,
解决方案:
Setset=newHashSet(list);list=newArrayList(set);
解决方案:
一回帖就错了……
解决方案:
引用1楼inhibitory的回复:
List->SetSet->List
++
解决方案:
引用35楼yousteely的回复:
引用1楼inhibitory的回复:List->SetSet->List++
有两点:1、效率没另一种高,2、无序
解决方案:
引用1楼inhibitory的回复:
List->SetSet->List
set中不可能有重复的元素吧!
解决方案:
引用36楼refar的回复:
引用35楼yousteely的回复:引用1楼inhibitory的回复:List->SetSet->List++有两点:1、效率没另一种高,2、无序
关于无序部分:there'ssomethingintheworldcalledLinkedHashSet
解决方案:
删除完以后,要记得把i--否则会出错的同,删除一个元素后,list的长度发生变化,所以当彰游标必须减一,