一个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);
}

}我现在这个算法无法全部删掉重复的

解决方案 »

  1.   

    是有一种情况不能全删除的,你减少一个后,size()减少了,但是这个下标的变量并没有减小.比如
    "111","111","111","112","123",首先当然(J=1)是移去第二个了,剩下"111","111","112","123"这时候下标变量(J)变成2,实际上呢,第二个(下标为1的并没有删除).后面的挤上来了.
    如果不需要注意顺序的话,你可以找到一个相同的后把所有的这个元素全部删除.然后再加一个新的进去(不知道ArrayList的加入顺序是怎么样的).至于效率问题我就没有研究了.因为我不是很懂
      

  2.   

    "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"比较了,出问题了...
      

  3.   

    同意楼上的。
    一个代码例子:
     
                      //................
    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++;
    }
                      //.................
      

  4.   

    上面那句“同意楼上的”,指的是 bushuang() ( ) 信誉:100    Blog 用HashSet-----------------------------------
    很多问题的答案, 往往被高手一语道破。
      

  5.   

    用HashSet的话千万不要忘了覆盖equals(obj)方法哦
      

  6.   

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

  7.   

    循环的可能比较多。但是hashset我以前也没有用过,这次尝试一下。
      

  8.   

    去重复,排序,用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);
    }

    }}
      

  9.   


    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++;
            }
        }    // .................}
      

  10.   

    不好意思,突然发现我做了件很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;
        }
    }
      

  11.   

    malligator(大螟) ( ) 信誉:100    Blog  2006-11-22 09:03:54  得分: 0  
     
       第二个循环倒过来就好了!
    for(int j=tmp.size()-1;j>i;j--)  =========
    这么做不简单么?本来已放在ArrayList 的情况下还是说实现起来有问题??
     
      

  12.   

    /**
         * @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;
        }
      

  13.   

    回复人:AWUSOFT() ( 一级(初级)) 信誉:100  2006-11-22 08:42:11  得分:0

    用你自己的办法的时候,你可以移动一个后让j--;这样就又从那个地方开始了__________用这个方法解决了。。感谢各位~~