计蒜客---排序后的数组删除重复数字

这道题卡了好久,因为集合的remove方法没有掌握好的原因.第一在循环中使用remove需要谨慎.第二在迭代中使用remove也需要谨慎,下面介绍两种错误方法.
错误一:
ArrayList arr = new ArrayList();
        for(int i = 10;i<15;i++)
            arr.add(i);
        arr.add(10);
        arr.add(10);
        arr.add(10);
        arr.add(10);
        arr.add(11);
        System.out.println("删除前:"+arr.size());
        for(int i = 0;i             if(10 == arr.get(i))
                arr.remove(i);
        System.out.println("删除后:"+arr.size());

仔细看下执行结果:
删除前:10
删除后:7
arraylist进行remove操作会产生上面两种情况呢?
原因是每次remove后的size都会发生变化,但是迭代基数没有根据remove后的size动态调整,导致越界及集合遍历不完全。
正确方法如下:

ArrayList arr = new ArrayList();
        for(int i = 10;i<15;i++)
            arr.add(i);
        arr.add(10);
        arr.add(10);
        arr.add(10);
        arr.add(10);
        arr.add(11);
        System.out.println("删除前:"+arr.size());
        for(int i = 0;i             
            if(10 == arr.get(i)){

                arr.remove(i);
                i--;
            }
        }
        System.out.println("删除后:"+arr.size());

错误二:
迭代器中不能使用list的remove方法,要使用迭代器的remove方法.

Iterator<Integer> it = list.iterator();
        while(it.hasNext()){
            start = (int)it.next();
            for (Integer integer : list) {
                if(start == integer){
                    count++;
                }
            }
            for (int i = 2; i < count; i++) {
                list.remove(start);
            }
        }

解题代码:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
/*
 * 题目给的提示是双指针扫描,但是java没有指针,我就用集合了
 * 
 */
public class Main {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        List<Integer> list = new ArrayList<Integer>();
        int num,temp,start,count=0;
        num = input.nextInt();
        //初始化数组
        for (int i = 0; i < num; i++) {
            temp = input.nextInt();
            list.add(temp);
        }
        start = list.get(0);
        Iterator<Integer> it = list.iterator();
        while(it.hasNext()){
            temp = it.next();
            if(start == temp){
                count++;
                if(count>2){
                    count = count - 1;
                    it.remove();
                }
            }
            else{
                start = temp;
                count = 1;
            }
        }
        System.out.println(list.size());

}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted on 2015-07-27 00:45  牛李  阅读(189)  评论(0编辑  收藏  举报

导航