美文网首页
造火箭之数组怎么去重?

造火箭之数组怎么去重?

作者: bearPotMan | 来源:发表于2019-04-08 21:02 被阅读0次

假如有下面这样一个数组,怎么给它去重?

Integer[] arrs = new Integer[]{2,5,3,3,2,4,5};

稍微有点经验的人可能会说什么算法呀,集合类呀,吧啦吧啦说一堆......
你配钥匙吗?
我不配!
其实数组去重的方式有很多,下面就来分别演示一下几种去重方式:

  1. 最基础的实现方式
public static Integer[] primitive(Integer[] arrays){
    Integer[] temp = new Integer[arrays.length];
    for (int i = 0; i < arrays.length; i++) {
        boolean flag = true;
        for (int j = i + 1; j < arrays.length; j++) {
            if (arrays[i].equals(arrays[j])) {
                flag = false;
                break;
            }
        }
        if (flag) {
            temp[i] = arrays[i];
        }
    }
    return temp;
}

像上面这样是可以实现,但是不严谨,因为临时数组的长度不好确定,而且返回的临时数组部分元素会是 null,所以可以考虑使用List来代替临时数组,改变之后就是下面这样:

public static List primitive(Integer[] arrays){
    List<Integer> list = new ArrayList<>();
    for (int i = 0; i < arrays.length; i++) {
        boolean flag = true;
        for (int j = i + 1; j < arrays.length; j++) {
            if (arrays[i].equals(arrays[j])) {
                flag = false;
                break;
            }
        }
        if (flag) {
            list.add(arrays[i]);
        }
    }
    return list;
}
  1. 有没有其他稍微简单一点的实现方式呢?既然上面的方式已经使用了集合,那有没有可以使用集合来实现的呢?
  • 纯List实现:List中的元素允许重复,所以要判断一下是否已有该元素
public static List deduplicationByList(Integer[] arrays){
    List<Integer> list = new ArrayList<>();
    for (int i = 0; i < arrays.length; i++) {
        if (!list.contains(arrays[i])){
            list.add(arrays[i]);
        }
    }
    return list;
}
  • 使用 Map 实现:Map 的 key 不允许重复,所以可以使用 key 来去重
public static Set deduplicationByMap(Integer[] arrays) {
    Map map = new HashMap();
    for (int i = 0; i < arrays.length; i++) {
        map.put(arrays[i], new Object());
    }
    return map.keySet();
}
  • 使用 Set 实现:Set 不允许有重复元素
public static Set<Integer> deduplicationBySet(Integer[] arrays){
    Set<Integer> set = new HashSet<>();
    for (int i = 0; i < arrays.length; i++) {
        set.add(arrays[i]);
    }
    return set;
}

其实 Set 和 Map的原理是差不多的,因为 HashSet 的底层实现就是基于 HashMap 的,综合上述几个实现来讲,可能最受欢迎的就是最后一个了吧!
但是面试的时候可不单单是这么简单哟,各个集合类的底层实现最好比较熟悉,这三个集合类里最复杂的应该就是 HashMap 的底层实现了吧,又是拉链式散列算法又是红黑树的,所以还是好好努力吧!

相关文章

  • 造火箭之数组怎么去重?

    假如有下面这样一个数组,怎么给它去重? 稍微有点经验的人可能会说什么算法呀,集合类呀,吧啦吧啦说一堆......你...

  • 数组去重4种方法

    怎么把类数组转换为数组? 数组去重4几种方法:

  • Array集结号

    实现数组去重的几种方法 数组去重一 数组去重二 利用数组indexof+push实现数组去重 数组去重三 利用对象...

  • JavaScript数组去重

    JavaScript中数组的常用操作之数组去重 方法一 方法二

  • 2020-01-19做些js的数组练习吧

    1.前端面试必问之数组去重 前端面试必问之数组去重 2.前端面试必问之深拷贝浅拷贝 3.

  • Set之数组去重

    1、利用Set、Array.from(): 2、扩展运算符、Set 。

  • javaScript 之 数组去重

    今天咱么分享下数组去重,这个问题基本每次面试都会被问到,那我们如何以压倒性的优势回答这个问题呢?老规矩,需求,分析...

  • js之数组去重

    1.每次删除后面重复的元素 2.使用数组的indexOf()方法 3.观察数组该元素是否是第一次出现 4.利用Ob...

  • javascript之数组去重

    在数组去重中我们用indexOf() 来循环判断一遍;indexOf(); 返回在当前数组中首次出现的下标,没有则...

  • JavaScript 之数组去重

    [个人博客]:(https://github.com/zenglinan/blog) 如果对你有帮助,欢迎star...

网友评论

      本文标题:造火箭之数组怎么去重?

      本文链接:https://www.haomeiwen.com/subject/ivqpiqtx.html