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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孟茹 中级黑马   /  2014-2-16 11:03  /  1609 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孟茹 于 2014-2-26 15:46 编辑

数组去重
例如:
原始数组是{4,2,4,6,1,2,4,7,8}
得到结果{4,2,6,1,7,8

5 个回复

倒序浏览

public static void main(String[] args) {

//可以换种思路,把数组放到set里面(set的值不会重复)就可以去重了

Integer[] arr = {4,2,4,6,1,2,4,7,8};

Set<Integer> set = new HashSet<Integer>();

for(Integer i : arr)

set.add(i);

for(Object j: set.toArray())

System.out.print(j + " ");

}
回复 使用道具 举报
可以用Map吧,很简单。
回复 使用道具 举报
你是想要保持原先元素的顺序,又要保证每个元素出现一次是吗,如果是这样的话楼上代码用HashSet是不严谨的,因为说HashSet本身是不按照存储顺序保存的,因此要采用LinkedHashSet保证元素顺序,因此代码如下
  1. import java.util.LinkedHashSet;
  2. import java.util.Set;

  3. public class Clear {
  4.         public static void main(String[] args) {

  5.                 Integer[] arr = { 4, 2, 4, 6, 1, 2, 4, 7, 8 };

  6.                 Set<Integer> set = new LinkedHashSet<Integer>();

  7.                 for (Integer i : arr)

  8.                         set.add(i);

  9.                 for (Object j : set.toArray()) {
  10.                         System.out.print(j + " ");
  11.                 }
  12.         }

  13. }
复制代码

回复 使用道具 举报
楼上的不觉得使用集合框架其实在底层依然调用了相关的去重方法吗?这样做是不是有点违背出题人的意愿呢?
我基础测试的时候也抽到了这个题目,以下是我写的代码:
package com.itheima;

/**
*第8题: 数组去重
* 例如:
* 原始数组是{4,2,4,6,1,2,4,7,8}
* 得到结果{4,2,6,1,7,8}
*
* @author shine
*
*/
import java.util.Arrays;

public class Test8 {
        public static void main(String[] args){
                int[] ints = {2,24,24,3,2,24,32,54,6,5,3,7,7,12};//定义一个数组,并对其进行赋值
                int[] newints = removeduplication(ints);//调用removeduplication对数组进行去重
                System.out.println(Arrays.toString(newints));
        }
        //该方法用于对数组进行去重
        public static int[] removeduplication(int[] ints){
                int l = 0;
                int[] tempints = new int[ints.length];
                out: for(int i=0; i<ints.length; i++){
                        //对当前数组进行遍历,如果单签元素不与tempints中的已有元素相等则将其添加到tempints中去
                        for(int n=0; n<l; n++){
                                if(tempints[n]==ints[i])
                                        continue out;
                        }
                        tempints[l++] = ints[i];
                }
                //取tempints的“有效长度”,并赋值于新数组newints
                int[] newints = new int[l];
                for(int i=0; i<l ;i++){
                        newints[i] = tempints[i];
                }
                return newints;//返回去重,并取合适长度的新数组
        }
}
回复 使用道具 举报
透过生活 发表于 2014-2-16 13:29
public static void main(String[] args) {

//可以换种思路,把数组放到set里面(set的值不会重复)就 ...

嗯,我遇到这道面试题的话,也是被数组给绕住了,想着怎么操作数组。其实这题考的就是set集合的概念。set中的元素不能重复,所以把数组转化成set集合,结果自然就是不重复了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马