A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 碎流 高级黑马   /  2014-8-28 11:48  /  2753 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

弄了好久搞不出来,大神帮看看,思路还有代码哪里有问题?

数组去重复,例如: 原始数组是{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);
        }
}

10 个回复

倒序浏览
有点麻烦 装HashSet里面不就行了吗
回复 使用道具 举报
其实装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);
    }
}
回复 使用道具 举报
干嘛要搞两个集合啊 从数组里取出来直接往集合里装 顺带去重不就完了么{:2_38:}
回复 使用道具 举报
  1. while(it.hasNext())
  2.                         {               
  3.                                 if(!list1.contains(it.next()))//当这里it.next()是最后一个元素
  4.                                 {
  5.                                 list1.add(it.next());//那么it.next()就不存在,就会报找不到元素的异常
  6.                                 }
  7.                         }
复制代码
回复 使用道具 举报

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

而且楼上说的也对。。不需要两个ArrayList 。直接遍历int类型数组。。加进去就行了。。。
回复 使用道具 举报

不是说it.next()只能用一次吗,用两次就指向下一个元素了呃
回复 使用道具 举报
优乐 中级黑马 2014-8-29 01:09:22
8#
Sakuratossi 发表于 2014-8-29 00:08
不是说it.next()只能用一次吗,用两次就指向下一个元素了呃

如果it.next()只能用一次,你怎么用迭代器去遍历一个集合啊
回复 使用道具 举报
可以试一试(it.nextLine)=-1
回复 使用道具 举报
优乐 发表于 2014-8-29 01:09
如果it.next()只能用一次,你怎么用迭代器去遍历一个集合啊

没写清楚,是说在while的一次循环里只能用一次next。。。不然指针就跳下一个元素了
回复 使用道具 举报
dftgg 中级黑马 2014-8-29 19:07:42
11#
本帖最后由 dftgg 于 2014-8-29 19:09 编辑

把数组遍历 加进TreeSet集合中 直接集合去重复排序
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马