移除ArrayList中重复的元素

从0-list.size()遍历移除就不能全部移除,而倒过来就可以,为什么??... 从0-list.size()遍历移除就不能全部移除,而倒过来就可以,为什么?? 展开
 我来答
hdparrot
2013-03-12 · TA获得超过2404个赞
知道小有建树答主
回答量:1385
采纳率:0%
帮助的人:1155万
展开全部
倒着移除时,被移除的元素前面的所有元素序号没变化,所以可以成功。
正着移除的话,被移除元素后面的元素序号发生了变化,每删除一个,序号就减1.
匿名用户
2013-03-12
展开全部
每删除一个 .size() 是变动,而导致循环的判断失败
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
firefly0927
推荐于2016-04-17 · 超过14用户采纳过TA的回答
知道答主
回答量:46
采纳率:0%
帮助的人:32.2万
展开全部
public static void main(String[] args){
List<String> list=new ArrayList<String>();
list.add("java");
list.add("java");
list.add("java");
list.add("java");
list.add("c++");
Map<String, String> clearMap=new HashMap<String, String>();
for (String language:list) {
if (!clearMap.containsKey(language)) {
clearMap.put(language, language);
}
continue;
}
for (String key:clearMap.keySet()) {
System.out.println(clearMap.get(key)+",");
}
}
排除重复项是不知道其中哪项是重复的,所以你这样在真是的代码中是不可用的。
你0-list.size()是不可以用的,因为你在循环这个list的时候是不可以删除的,如果删除会报exception的。
如果非要使用
则使用
Iterator<String> iterator=list.iterator();
while (iterator.hasNext()) {
if ("java".equals(iterator.next())) {
System.out.println(iterator.next());
iterator.remove();
}

}
这样使用
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
缪昊轩
2013-03-13 · 超过26用户采纳过TA的回答
知道答主
回答量:137
采纳率:0%
帮助的人:78.7万
展开全部
因为按顺序循环的时候,你改变了list的size,后继续循环会抛异常
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
水形2Y
2013-03-13
知道答主
回答量:16
采纳率:0%
帮助的人:9.4万
展开全部
我自己收集的List工具类里有四种,你自己挑一个

/*
java去除List中重复的元素
如果用Set ,倘若list里边的元素不是基本数据类型而是对象,
那么请覆写Object的boolean equals(Object obj)和int hashCode()方法.
return new ArrayList(new HashSet(list));
*/

//方法一:循环元素删除
// 删除ArrayList中重复元素
public static void removeDuplicate(List list) {
for ( int i = 0 ; i < list.size() - 1 ; i ++ ) {
for ( int j = list.size() - 1 ; j > i; j -- ) {
if (list.get(j).equals(list.get(i))) {
list.remove(j);
}
}
}
System.out.println(list);
}

//方法二:通过HashSet剔除
// 删除ArrayList中重复元素
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void removeDuplicateBySet(List list) {
HashSet h = new HashSet(list);
list.clear();
list.addAll(h);
System.out.println(list);
}

//方法三: 删除ArrayList中重复元素,保持顺序
// 删除ArrayList中重复元素,保持顺序
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void removeDuplicateWithOrder(List list) {
Set set = new HashSet();
List newList = new ArrayList();
for (Iterator iter = list.iterator(); iter.hasNext();) {
Object element = iter.next();
if (set.add(element))
newList.add(element);
}
list.clear();
list.addAll(newList);
System.out.println( " remove duplicate " + list);
}

/**
* 生成无重复记录的列表
* @param list
* @return
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public static List newUniqueList(List list){
if(list == null || list.size() <= 0){
return list;
}
List newList = new ArrayList();
for(int i = 0; i < list.size(); i++){
if(!newList.contains(list.get(i))){
newList.add(list.get(i));
}
}
return newList;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式