java中去除集合重复元素问题
publicstaticvoidmethod4(){Listlist=newArrayList();list.add("123");list.add("456");lis...
public static void method4() {
List list = new ArrayList();
list.add("123");
list.add("456");
list.add("258");
list.add("789");
list.add("147");
list.add("258");
list.add("123");
list.add("123");
ListIterator li = list.listIterator();
while(li.hasNext()){
Object o = li.next();
if(o.equals(list)){
li.remove();
}
}
System.out.println(list.toString());
}
为什么去出不了重复元素,不是说LIstIterator中可以删除添加对象,来改变数组长度的吗?
是我哪出的问题?
如果这方法不行的话,其他思路是什么? 展开
List list = new ArrayList();
list.add("123");
list.add("456");
list.add("258");
list.add("789");
list.add("147");
list.add("258");
list.add("123");
list.add("123");
ListIterator li = list.listIterator();
while(li.hasNext()){
Object o = li.next();
if(o.equals(list)){
li.remove();
}
}
System.out.println(list.toString());
}
为什么去出不了重复元素,不是说LIstIterator中可以删除添加对象,来改变数组长度的吗?
是我哪出的问题?
如果这方法不行的话,其他思路是什么? 展开
展开全部
你把o.equals(list)那句换成list.contains(o)试试。现在你的代码里o是个Object(其实是String),list是个List,根本不可能equal的
哦下面那个li.remove(o)也换成list.remove(o)
________________________________
哦不对。。。你下面的iterator循环里面其实把每一个都删掉了。。。
------------------------------------
我加了一些我的改动代码,不过如另一个人所说,一般我们都是在添加的时候去重的,你这种方式我也第一次遇到,不过就你给出来的这些条件,我觉得这样改就可以了。
追问
thankes 刚看了你的回答 有所启迪
是的
我提取的每个对象都是在ArrayList集合中(不管是否重复),就算能删也会把所有对象删除
另外object与ArrayList 无法比较 所以返回的都是false ;
thank you
展开全部
可以用下面方法这样处理。
List list_tmp = new ArrayList(); //建立一个用于临时存放不重复list元素的List集合。
for(Object obj:list){
//可以根据需要,在这里加上强制转型。
//如list里面存放的是一个User对象,那么加上User u = (User) obj;
if(!list_tmp.contains(obj)){ //注意contains方法是通过equals方法进行比较的所以要根据需要看是否需要重写list对象里面的equals方法。
list_tmp.add(obj);//如果上面加了强制转型,这里需要写list_tmp.add(u);
}
}
备注:不想重复的话,最好的办法是用Set,因为Set里面存放的数据是不重复的。
List list_tmp = new ArrayList(); //建立一个用于临时存放不重复list元素的List集合。
for(Object obj:list){
//可以根据需要,在这里加上强制转型。
//如list里面存放的是一个User对象,那么加上User u = (User) obj;
if(!list_tmp.contains(obj)){ //注意contains方法是通过equals方法进行比较的所以要根据需要看是否需要重写list对象里面的equals方法。
list_tmp.add(obj);//如果上面加了强制转型,这里需要写list_tmp.add(u);
}
}
备注:不想重复的话,最好的办法是用Set,因为Set里面存放的数据是不重复的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于2017-09-25
展开全部
去掉集合的重复元素,我们一般是这么做的:建立一个新的集合,把没有出现过的元素添加进去。你这种方法我以前也用过,同样没成功。不过Map是可以这么做的。
package list;
import java.util.*;
public class Remove_form_list {
public static void method4() {
List list = new ArrayList();
list.add("123");
list.add("456");
list.add("258");
list.add("789");
list.add("147");
list.add("258");
list.add("123");
list.add("123");
List temp = new ArrayList();
Iterator it = list.listIterator();
while(it.hasNext()){
Object o = it.next();
if(!temp.contains(o)){ //如果temp还没有这个元素,就添加
temp.add(o);
}
}
list = temp;
System.out.println(list.toString());
}
public static void main(String[] args) {
method4();
}
}
结果:
[123, 456, 258, 789, 147]
package list;
import java.util.*;
public class Remove_form_list {
public static void method4() {
List list = new ArrayList();
list.add("123");
list.add("456");
list.add("258");
list.add("789");
list.add("147");
list.add("258");
list.add("123");
list.add("123");
List temp = new ArrayList();
Iterator it = list.listIterator();
while(it.hasNext()){
Object o = it.next();
if(!temp.contains(o)){ //如果temp还没有这个元素,就添加
temp.add(o);
}
}
list = temp;
System.out.println(list.toString());
}
public static void main(String[] args) {
method4();
}
}
结果:
[123, 456, 258, 789, 147]
追问
嗯
是的
我提取的每个对象都是在ArrayList集合中(不管是否重复),所以只能借用新集合
另外object与ArrayList 无法比较所以返回的都是false ;
你的方法可行 \(^o^)/
thanks very much~!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
去掉集合的重复元素,我们一般是这么做的:建立一个新的集合,把没有出现过的元素添加进去。你这种方法我以前也用过,同样没成功。不过Map是可以这么做的。
package list;
import java.util.*;
public class Remove_form_list {
public static void method4() {
List list = new ArrayList();
list.add("123");
list.add("456");
list.add("258");
list.add("789");
list.add("147");
list.add("258");
list.add("123");
list.add("123");
List temp = new ArrayList();
Iterator it = list.listIterator();
while(it.hasNext()){
Object o = it.next();
if(!temp.contains(o)){ //如果temp还没有这个元素,就添加
temp.add(o);
}
}
list = temp;
System.out.println(list.toString());
}
public static void main(String[] args) {
method4();
}
}
结果:
[123, 456, 258, 789, 147]
package list;
import java.util.*;
public class Remove_form_list {
public static void method4() {
List list = new ArrayList();
list.add("123");
list.add("456");
list.add("258");
list.add("789");
list.add("147");
list.add("258");
list.add("123");
list.add("123");
List temp = new ArrayList();
Iterator it = list.listIterator();
while(it.hasNext()){
Object o = it.next();
if(!temp.contains(o)){ //如果temp还没有这个元素,就添加
temp.add(o);
}
}
list = temp;
System.out.println(list.toString());
}
public static void main(String[] args) {
method4();
}
}
结果:
[123, 456, 258, 789, 147]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询