求删除LIST中的重复元素的算法

问题描述

有如下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的长度发生变化,所以当彰游标必须减一,

时间: 2024-09-29 18:04:56

求删除LIST中的重复元素的算法的相关文章

Java删除ArrayList中的重复元素的2种方法

ArrayList是Java中最常用的集合类型之一.它允许灵活添加多个null元素,重复的元素,并保持元素的插入顺序.在编码时我们经常会遇 到那种必须从已建成的ArrayList中删除重复元素的要求.这篇文章将给出两种从ArrayList中删除重复元素的方法. 方法1:使用HashSet删除ArrayList中重复的元素 在该方法中,我们使用HashSet来删除重复的元素.如你所知,HashSet不允许有重复的元素.我们使用HashSet的这个属性来删除已建 成的ArrayList中的重复元素.

2种Java删除ArrayList中的重复元素的方法_java

这篇文章将给出两种从ArrayList中删除重复元素的方法,分别是使用HashSet和LinkedHashSet. ArrayList是Java中最常用的集合类型之一.它允许灵活添加多个null元素,重复的元素,并保持元素的插入顺序.在编码时我们经常会遇到那种必须从已建成的ArrayList中删除重复元素的要求. 方法1:使用HashSet删除ArrayList中重复的元素 在该方法中,我们使用HashSet来删除重复的元素.如你所知,HashSet不允许有重复的元素.我们使用HashSet的这

如何删除数组中的重复元素(asp,js,php)

如何删除数组中的重复元素(asp教程,js,php教程) <html xmlns="http://www.111cn.net/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> </head> <body> js删除数据组中重复的元素 <script l

c#中,如何删除数组中既定的元素,得到删除后的新数组?

问题描述 c#中,如何删除数组中既定的元素,得到删除后的新数组? RT,比如a[10]={0,1,2,3,4,5,6,7,8,9}; b[4]={1,3,5,6}; 删除a中b的数后得到新的数组c,应该怎么做? 解决方案 int[] c = a.Except(b).ToArray(); 解决方案二: 没有在数组中删除元素的做法,新数组得创建 解决方案三: 删除数组中存在重复的元素.删除ary数组中的和keyword中相同的元素,其余的不变并输出 解决方案四: 要重新分配数组,把新内容复制过去

怎么删除Excel2003中的重复行与重复数据

怎么删除Excel2003中的重复行与重复数据   删除重复行 1.将光标定位到表格内,数据-筛选-高级筛选. 2.设置筛选结果放置的位置,并选择不重复的记录. 3.此时筛选结果中已经删除了重复行,效果如下. 删除重复数据 1.在表格旁的F1单元格中输入1,并按回车键. 2.选择以序列方式对F列进行自动填充. 3.选择"科目",单击"数据"菜单中的"排序".

java去除已排序数组中的重复元素_java

题目描述 给定一个已排序的数组,去除数组中的重复元素,只保留一个重复的元素,并且返回新的数组长度. 要求: 不要给数组分配额外的空间,你必须使用常量的内存大小进行原地操作. 例如: 给出数组A=[1,1,2],你的函数调用之后必须返回长度length=2,并且A现在变成[1,2]. 输入 一个已排序的数组,例如[1,1,2]. 输出 返回数组新的长度,例如length=2. 快慢指针法 设置fast指针遍历数组,slow指针指向不重复元素的下一位. public static int remov

【方法1】删除Map中Value重复的记录,并且只保留Key最小的那条记录

介绍     晚上无聊的时候,我做了一个测试题,测试题的大体意思是:删除Map中Value重复的记录,并且只保留Key最小的那条记录. 例如: I have a map with duplicate values:     ("A", "1");     ("B", "2");     ("C", "2");     ("D", "3");    

[华为机试练习题]24.删除链表中的重复节点、剩余节点逆序输出

题目 描述: 题目描述: 输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排. 要求实现函数: void vChanProcess(strNode * pstrIn,strNode * pstrOut); [输入] pstrIn:输入一个不带头节点的单向链表 [输出] pstrOut:删除内容重复的节点(重复的节点全部删除),剩余节点逆序输出(不带头节点,链表第一个节点的内存已经申请). [注意]只需要完成该函数功能算法,中

怎样删除表中的重复数据,谢谢大家

问题描述 怎样删除表中的重复数据,谢谢大家 表内容如下: id fwbm kjbh sfxm dj yl ....................... 52578 d01142 d011422015928 001 .400 0 54.70 54.70 0 0 2015-09-28 00:00:00.000 NULL 52579 d01142 d011422015928 040 2.990 2 5.98 5.98 0 0 2015-09-28 00:00:00.000 NULL 52580 d0