一个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);
}
}我现在这个算法无法全部删掉重复的
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);
}
}我现在这个算法无法全部删掉重复的
"111","111","111","112","123",首先当然(J=1)是移去第二个了,剩下"111","111","112","123"这时候下标变量(J)变成2,实际上呢,第二个(下标为1的并没有删除).后面的挤上来了.
如果不需要注意顺序的话,你可以找到一个相同的后把所有的这个元素全部删除.然后再加一个新的进去(不知道ArrayList的加入顺序是怎么样的).至于效率问题我就没有研究了.因为我不是很懂
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"比较了,出问题了...
一个代码例子:
//................
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++;
}
//.................
很多问题的答案, 往往被高手一语道破。
for(int j=tmp.size()-1;j>i;j--)
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);
}
}}
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++;
}
} // .................}
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;
}
}
第二个循环倒过来就好了!
for(int j=tmp.size()-1;j>i;j--) =========
这么做不简单么?本来已放在ArrayList 的情况下还是说实现起来有问题??
* @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;
}
?
用你自己的办法的时候,你可以移动一个后让j--;这样就又从那个地方开始了__________用这个方法解决了。。感谢各位~~