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中可以删除添加对象,来改变数组长度的吗?

是我哪出的问题?
如果这方法不行的话,其他思路是什么?
展开
 我来答
百度网友85cd0964c
2015-07-24 · TA获得超过385个赞
知道小有建树答主
回答量:204
采纳率:0%
帮助的人:248万
展开全部

你把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
198901245631
2015-11-05 · TA获得超过3.5万个赞
知道大有可为答主
回答量:9037
采纳率:92%
帮助的人:1739万
展开全部
可以用下面方法这样处理。
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]
追问

是的
我提取的每个对象都是在ArrayList集合中(不管是否重复),所以只能借用新集合
另外object与ArrayList 无法比较所以返回的都是false ;

你的方法可行 \(^o^)/
thanks very much~!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
圣鸾OJ
2015-09-29 · TA获得超过1629个赞
知道小有建树答主
回答量:1136
采纳率:96%
帮助的人:113万
展开全部
去掉集合的重复元素,我们一般是这么做的:建立一个新的集合,把没有出现过的元素添加进去。你这种方法我以前也用过,同样没成功。不过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]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式