黑马程序员技术交流社区

标题: 一个数组去重帮我看看,,, [打印本页]

作者: 碎流    时间: 2014-8-28 11:48
标题: 一个数组去重帮我看看,,,
弄了好久搞不出来,大神帮看看,思路还有代码哪里有问题?

数组去重复,例如: 原始数组是{4,2,4,6,1,2,4,7,8},得到结果{4,2,6,1,7,8}
public class Test8 {
        public static void main(String[] args) {
                int[] arr = {4,2,4,6,1,2,4,7,8};
               
                zhuanhuan( arr);

       
                }
        public static void zhuanhuan(int[] arr)
        {
                ArrayList list = new ArrayList();
                ArrayList list1 = new ArrayList();
                for(int x = 0;x < arr.length;x++)
                {
                        list.add(arr[x]);
                }
                        Iterator it = list.iterator();
                        while(it.hasNext())
                        {
                                if(!list1.contains(it.next()))
                                {
                                list1.add(it.next());
                                }
                        }
               
                System.out.println(list);
                System.out.println(list1);
        }
}
作者: java--周群    时间: 2014-8-28 15:03
有点麻烦 装HashSet里面不就行了吗
作者: 冷锋也温柔    时间: 2014-8-28 21:33
其实装hashset里去重最直接
但你用ArrayList了那我给你改正下
package itcast;

import java.util.ArrayList;


public class Test {
    public static void main(String[] args) {
            int[] arr = {4,2,4,6,1,2,4,7,8};
            
            zhuanhuan( arr);

   
            }
    public static void zhuanhuan(int[] arr)
    {
            ArrayList<Integer> list = new ArrayList<Integer>();最好加泛型 方便后面操作
            ArrayList<Integer> list1 = new ArrayList<Integer>();
            for(int x = 0;x < arr.length;x++)
            {
                    list.add(arr[x]);
            }
                   /*Iterator it = list.iterator();这里不能用迭代器了  因为不知道索引了
                    while(it.hasNext())
                    {
                            if(!list1.contains(it.next()))
                            {
                            list1.add(it.next());
                            }
                    }*/

            for(Integer o: list){   用增强for
            if(!list1.contains(o))                 {
                 list1.add(o);
                 }
            }

            System.out.println(list);
            System.out.println(list1);
    }
}

作者: 玥夜    时间: 2014-8-28 22:32
干嘛要搞两个集合啊 从数组里取出来直接往集合里装 顺带去重不就完了么{:2_38:}
作者: 优乐    时间: 2014-8-28 22:49
  1. while(it.hasNext())
  2.                         {               
  3.                                 if(!list1.contains(it.next()))//当这里it.next()是最后一个元素
  4.                                 {
  5.                                 list1.add(it.next());//那么it.next()就不存在,就会报找不到元素的异常
  6.                                 }
  7.                         }
复制代码

作者: 烟海    时间: 2014-8-28 23:10
优乐 发表于 2014-8-28 22:49

正解。。讲到点子上了。。。

而且楼上说的也对。。不需要两个ArrayList 。直接遍历int类型数组。。加进去就行了。。。
作者: Sakuratossi    时间: 2014-8-29 00:08
优乐 发表于 2014-8-28 22:49

不是说it.next()只能用一次吗,用两次就指向下一个元素了呃
作者: 优乐    时间: 2014-8-29 01:09
Sakuratossi 发表于 2014-8-29 00:08
不是说it.next()只能用一次吗,用两次就指向下一个元素了呃

如果it.next()只能用一次,你怎么用迭代器去遍历一个集合啊
作者: Louis.hui    时间: 2014-8-29 02:01
可以试一试(it.nextLine)=-1
作者: Sakuratossi    时间: 2014-8-29 10:11
优乐 发表于 2014-8-29 01:09
如果it.next()只能用一次,你怎么用迭代器去遍历一个集合啊

没写清楚,是说在while的一次循环里只能用一次next。。。不然指针就跳下一个元素了
作者: dftgg    时间: 2014-8-29 19:07
本帖最后由 dftgg 于 2014-8-29 19:09 编辑

把数组遍历 加进TreeSet集合中 直接集合去重复排序




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2