如何高效地去掉ArrayList里的重复字符串

第48号宇宙 2006-11-22 01:00:58
一个ArrayList里放的是字符串,数字型的,如"111","122","111","233"...如何把重复的去掉

我现在的代码有点问题,用remove方法的话下一个字符串就移到前面了,那么下次循环就跳过移动到前面的那个字符串了。。

所以问下有没有好的办法。。

ArrayList tmp=new ArrayList();
tmp.add("111");
tmp.add("112");
tmp.add("111");
tmp.add("111");
tmp.add("114");
String t1,t2;

for(int i=0;i<tmp.size();i++){
t1=(String)tmp.get(i);
for(int j=i+1;j<tmp.size();j++){
t2=(String)tmp.get(j);
if(t1.equals(t2))
tmp.remove(j);
}

}

我现在这个算法无法全部删掉重复的。。。
...全文
2077 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
awusoft 2006-11-22
  • 打赏
  • 举报
回复
结题吧..呵呵
第48号宇宙 2006-11-22
  • 打赏
  • 举报
回复
回复人:AWUSOFT() ( 一级(初级)) 信誉:100 2006-11-22 08:42:11 得分:0
?
用你自己的办法的时候,你可以移动一个后让j--;这样就又从那个地方开始了

__________

用这个方法解决了。。感谢各位~~
chocolate0823 2006-11-22
  • 打赏
  • 举报
回复
/**
* @param list
*/
private static List removeDuplicateObj(List list) {

Set someSet = new HashSet(list);


Iterator iterator = someSet.iterator();
List tempList = new ArrayList();
int i = 0;
while (iterator.hasNext()) {

tempList.add(iterator.next().toString());
i++;
}
return tempList;
}
jackie_604898140 2006-11-22
  • 打赏
  • 举报
回复
同意楼上的,何必搞得那么复杂呢
malligator 2006-11-22
  • 打赏
  • 举报
回复
malligator(大螟) ( ) 信誉:100 Blog 2006-11-22 09:03:54 得分: 0

第二个循环倒过来就好了!
for(int j=tmp.size()-1;j>i;j--)

=========
这么做不简单么?本来已放在ArrayList 的情况下

还是说实现起来有问题??

数据分析小兵 2006-11-22
  • 打赏
  • 举报
回复
you qing UP
luyang1016 2006-11-22
  • 打赏
  • 举报
回复
不好意思,突然发现我做了件很sb的事情。靠。

public void getBaseList() {
List list = new ArrayList();
list.add("111");
list.add("112");
list.add("111");
list.add("111");
list.add("114");
List tempList = removeDuplicateObj(list);
for (int i = 0; i < tempList.size(); i++) {
System.out.println(tempList.get(i));
}
}

/**
* @param list
*/
private List removeDuplicateObj(List list) {
// ................
Set someSet = new HashSet(list);

// 将Set中的集合,放到一个临时的链表中(tempList)
Iterator iterator = someSet.iterator();
List tempList = new ArrayList();
int i = 0;
while (iterator.hasNext()) {

tempList.add(iterator.next().toString());
i++;
}
return tempList;
}
}
luyang1016 2006-11-22
  • 打赏
  • 举报
回复

sg552(:)) ( ) 信誉:100 Blog
================================
还缺少了点什么东西吧?
能否指点一下:

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

public class Csdn {

private String property1;

private String property2;

public String getProperty1() {
return property1;
}

public void setProperty1(String property1) {
this.property1 = property1;
}

public String getProperty2() {
return property2;
}

public void setProperty2(String property2) {
this.property2 = property2;
}

public void getBaseList() {
List list = new ArrayList();
list.add("111");
list.add("112");
list.add("111");
list.add("111");
list.add("114");
removeDuplicateObj(list);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}

/**
* @param list
*/
private void removeDuplicateObj(List list) {
// ................
Set someSet = new HashSet(list);

// 将Set中的集合,放到一个临时的链表中(tempList)
Iterator iterator = someSet.iterator();
List tempList = new ArrayList();
int i = 0;
while (iterator.hasNext()) {
tempList.add(iterator.next().toString());
i++;
}
}

// .................

}
FreshVan 2006-11-22
  • 打赏
  • 举报
回复
去重复,排序,用set去重复,新手。呵呵
import java.util.*;

public class Test {
public static void main(String[] args) {
ArrayList list=new ArrayList();

list.add("11");
list.add("12");
list.add("101");
list.add("111");
list.add("121");
list.add("113");

TreeSet set=new TreeSet(list);

Iterator it=set.iterator();


int[] arr=new int[set.size()];
int i=0;
while(it.hasNext()){
arr[i]=Integer.parseInt(it.next().toString());
i++;
}

Arrays.sort(arr);

for(int j:arr){
System.out.println(j);
}

}

}
luyang1016 2006-11-22
  • 打赏
  • 举报
回复
循环的可能比较多。但是hashset我以前也没有用过,这次尝试一下。
malligator 2006-11-22
  • 打赏
  • 举报
回复
第二个循环倒过来就好了!
for(int j=tmp.size()-1;j>i;j--)
awusoft 2006-11-22
  • 打赏
  • 举报
回复
用HashSet的话千万不要忘了覆盖equals(obj)方法哦
sg552 2006-11-22
  • 打赏
  • 举报
回复
上面那句“同意楼上的”,指的是 bushuang() ( ) 信誉:100 Blog

用HashSet

-----------------------------------
很多问题的答案, 往往被高手一语道破。
sg552 2006-11-22
  • 打赏
  • 举报
回复
同意楼上的。
一个代码例子:

//................
Set someSet=new HashSet(list);

//将Set中的集合,放到一个临时的链表中(tempList)
Iterator iterator=someSet.iterator();
char[] temp=new char[someSet.size()];
List tempList=new ArrayList();
int i=0;
while(iterator.hasNext()){
tempList.add(iterator.next().toString());
i++;
}
//.................
awusoft 2006-11-22
  • 打赏
  • 举报
回复
"111","111","111","111","112"
0 1 2 3 4
j:-->1
"111","111","111","112"
0 2 3 4
j:-->2
"111","111","112"
0 2 4
j:-->3 ==>这时候不跟"112"比较了,出问题了...
awusoft 2006-11-22
  • 打赏
  • 举报
回复
用你自己的办法的时候,你可以移动一个后让j--;这样就又从那个地方开始了
awusoft 2006-11-22
  • 打赏
  • 举报
回复
是有一种情况不能全删除的,你减少一个后,size()减少了,但是这个下标的变量并没有减小.比如
"111","111","111","112","123",首先当然(J=1)是移去第二个了,剩下"111","111","112","123"这时候下标变量(J)变成2,实际上呢,第二个(下标为1的并没有删除).后面的挤上来了.
如果不需要注意顺序的话,你可以找到一个相同的后把所有的这个元素全部删除.然后再加一个新的进去(不知道ArrayList的加入顺序是怎么样的).至于效率问题我就没有研究了.因为我不是很懂
caibaoying 2006-11-22
  • 打赏
  • 举报
回复
搬个板凳等楼下精彩见解`!!UP
caibaoying 2006-11-22
  • 打赏
  • 举报
回复
你写的应该可以`
偶也是这样比较的。。。
友情UP
bushuang 2006-11-22
  • 打赏
  • 举报
回复
用HashSet

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧