zoukankan      html  css  js  c++  java
  • 纯数组去重

    一般而言,数组最简单快捷的方法是直接利用HashSet的不重复的特性就可以做到,或者是遍历时利用List的contains 判断是否存在就可以去重了

    如果是对象数组,对象的类需要 重写 equal 和 hashCode方法.。

    但是面试题经常有数组去重的试题,如果在不使用hashSet 和 list的contains方法情况下,纯数组怎么去重?

    可以这么做:

    使用一个标识数组来标识重复的元素位置,再新建一个新的数组来存储去重后的元素

         User user1 = new User("zjamgs",16,12);    //User 需要重写equal 和 hashcode 方法
            User user2 = new User("lisi",13,18);
            User user3 = new User("wangwi",15,13);
            User user4 = new User("zhangsli",23,10);
            User user5 = new User("zjamgs",16,12);
    
            User user6 = new User("zjamgs1",16,12);
            User user7 = new User("lisi2",13,18);
            User user8 = new User("zjamgs",16,12);
            User user9 = new User("wangwi",15,13);
            User user10 = new User("zjamgs5",16,12);
    
            User[] users = {user1,user2,user3,user4,user5,user6,user7,user8,user9,user10};
    
            int[] userindex = new int[users.length];//标记相同的元素的,0表示未重复,1表示已重复
            int repeatCount = 0;            
            for(int i=0;i<users.length;i++){
                if(userindex[i]==1)continue;        //非常重要
                for(int j=users.length-1;j>i;j--){
                    if(users[i].equals(users[j])){
                        userindex[j] = 1;
                        repeatCount++;
                    }
                }
            }
            System.out.println(Arrays.toString(userindex);
            User[] newUsers = new User[users.length - repeatCount];
    
            for (int i = 0;i < userindex.length;i++){
                if (userindex[i] == 0){
                    for (int j = 0;j < newUsers.length;j++){
                        if(newUsers[j] == null){
                            newUsers[j] = users[i];
                            break;
                        }
                    }
                }
            }
            System.out.println(Arrays.toString(newUsers));
    

      User类:

    class User implements Comparable<User>{
        private String name;
        private int age;
        private int index;
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (!(o instanceof User)) return false;
            User user = (User) o;
            return getAge() == user.getAge() &&
                    getIndex() == user.getIndex() &&
                    Objects.equals(getName(), user.getName());
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(getName(), getAge(), getIndex());
        }
    
        @Override
        public String toString() {
            return "User [name=" + name + ", age=" + age + ", index=" + index + "]";
        }
    
        public User(String name, int age, int index) {
            super();
            this.name = name;
            this.age = age;
            this.index = index;
        }
    
        public int getIndex() {
            return index;
        }
    
        public void setIndex(int index) {
            this.index = index;
        }
    
        public User() {
            super();
        }
    
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        @Override
        public int compareTo(User o) {
            if(this.getAge()<o.getAge()){
                return -1;
            }else if(this.getAge()>o.getAge()){
                return 1;
            }
            return 0;
        }
    }
    

      输出结果:

    [0, 0, 0, 0, 1, 0, 0, 1, 1, 0]

    [User [name=zjamgs, age=16, index=12],

    User [name=lisi, age=13, index=18],

    User [name=wangwi, age=15, index=13],

    User [name=zhangsli, age=23, index=10],

    User [name=zjamgs1, age=16, index=12],

    User [name=lisi2, age=13, index=18],

    User [name=zjamgs5, age=16, index=12]]

    有三个元素是前面已经有的元素,是重复元素,余下的7个都不是重复元素,结果正确

  • 相关阅读:
    火星救援
    Android学习笔记(8)————详细谈谈intent的startActivityForResult()方法
    Android小技巧(二):为ContentProvider添加数据库事务支持
    Android小技巧(一):实现捕获应用的运行时异常
    理解Activity的生命周期
    Android异步处理四:AsyncTask的实现原理
    Android异步处理三:Handler+Looper+MessageQueue深入详解
    Android异步处理二:使用AsyncTask异步更新UI界面
    Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面
    Android APK反编译详解(附图)
  • 原文地址:https://www.cnblogs.com/hcklqy/p/11610837.html
Copyright © 2011-2022 走看看