黑马程序员技术交流社区

标题: 数组去重代码 [打印本页]

作者: 孟茹    时间: 2014-2-16 11:03
标题: 数组去重代码
本帖最后由 孟茹 于 2014-2-26 15:46 编辑

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

作者: 透过生活    时间: 2014-2-16 13:29

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 + " ");

}
作者: 李金中    时间: 2014-2-17 21:21
可以用Map吧,很简单。
作者: Amorvos    时间: 2014-2-18 09:22
你是想要保持原先元素的顺序,又要保证每个元素出现一次是吗,如果是这样的话楼上代码用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. }
复制代码


作者: 徐芾清    时间: 2014-2-19 20:19
楼上的不觉得使用集合框架其实在底层依然调用了相关的去重方法吗?这样做是不是有点违背出题人的意愿呢?
我基础测试的时候也抽到了这个题目,以下是我写的代码:
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-22 17:26
透过生活 发表于 2014-2-16 13:29
public static void main(String[] args) {

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

嗯,我遇到这道面试题的话,也是被数组给绕住了,想着怎么操作数组。其实这题考的就是set集合的概念。set中的元素不能重复,所以把数组转化成set集合,结果自然就是不重复了。




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