9月13日のある会社の面白い試験問題

11877 ワード

タイトル:Userクラスには3つのメンバー変数があります:name,age,birthday;Listには100個のuserオブジェクトがあり、そのうち80個は重複せず、そのうち20個は重複し、listで重複しているuserオブジェクトを除去し(name,age,birthdayの内容が一致すれば重複する)、最後にlistでのオブジェクトはname,age,birthday昇順に並べ替えられる
解題構想:1、setセットを用いてlist中の重複オブジェクト(setセットは重複オブジェクトのない集合)をフィルタリングする2、comparatorインタフェースを継承してcompareTo(Object o 1,Object o 2)を書き換えてクライアントソートを実現する.解題前提:1、Userでequalsメソッドとhashcodeメソッドを書き換える:UserのデフォルトはObjectオブジェクトと継承されているため、そのequalsメソッドはメモリアドレスと比較され、3つのメンバー変数の内容が一致する2つのuserオブジェクトがsetセットにおいても2つの異なるオブジェクトであるため、重み付け効果に達しないため、userのequals()メソッドとhashcode()メソッドを書き換える必要がある.メンバー変数の内容に基づいて等しいと判断し,set集合による重み付け効果を達成する.コード:Userクラスを定義し、Userを表します.MyComparator実装Comparatorインタフェース実装クライアントメッセージを定義した.testクラスを定義し、tsetクラスでデマンドメソッドを実装します.
Userクラス

import java.util.Date;

public class User {
    private String name;
    private int age;
    private Date birthday;


    public User() {
    }

    public User(String name) {
        this.name = name;
    }

    public User(String name, int age, Date birthday) {
        this.name = name;
        this.age = age;
        this.birthday = birthday;
    }

    ……get set  ……
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o instanceof User) return true;
        final User user = (User) o;
        if (this.name.equals(user.name) && this.age == user.getAge() && this.birthday.equals(user.getBirthday())) {
            return true;
        }
        return false;
    }

    @Override
    public int hashCode() {
        int result;
        result = (name == null ? 0 : name.hashCode());
        result = 29 * result + age;
        return result;
    }
}

MyComparatorクラス:
import java.util.Comparator;

public class MyComparator implements Comparator<User> {
    @Override
    public int compare(User o1, User o2) {
        /**      */
        if (o1.getName().compareTo(o2.getName())>0)return 1;
        if (o1.getName().compareTo(o2.getName())<0)return -1;
        /**      */
        if (o1.getAge()>o2.getAge())return 1;
        if (o1.getAge()return -1;

        /**      */
        if (o1.getBirthday().compareTo(o2.getBirthday())>0)return 1;
        if (o1.getBirthday().compareTo(o2.getBirthday())<0)return -1;
        return 0;
    }
}

testクラス:
public class Test {
    private  List list = new ArrayList<>();


    private String[] names = {"a", "b", "c", "d", "e", "f", "g", "g", "g", "g","e"};//  ,4   
    private int[] ages = {1, 2, 3, 4, 5, 6, 7, 7, 7, 7,5}; //  ,4   

    public List distinct() {
        list = this.getUserObjects(names, ages);//  10 User  
        System.out.println("list      :"+list.size());//    list     
        Set set = new HashSet();//         set  
        List distinctList = new ArrayList<>();//  set      user  

        Iterator iterator = list.iterator();//   list        set 
        while (iterator.hasNext()) {
            set.add(iterator.next());

        }
        System.out.println("set      :"+set.size());//    set       
        Iterator iterator1 = set.iterator();
        while (iterator1.hasNext()) {
            distinctList.add((User) iterator1.next());//set       list  
        }
        return distinctList;
    }
     public List getUserObjects(String[] name, int[] age) {
        for (int i = 0; i < names.length; i++) {
            list.add(new User(name[i], age[i], new Date()));
        }
        return list;
    }

    public static void main(String[] args) {
        System.out.println(new Date());
        Test test = new Test();
        List list = test.distinct();
        Collections.sort(list, new MyComparator());//            list    
        Iterator iterator = list.iterator();
        System.out.println("    list      :");
        while (iterator.hasNext()) {
            User user = (User) iterator.next();
            System.out.println("  :" + user.getName()+"  " + "  :" + user.getAge()+"  " + "  :" + user.getBirthday());
        }
    }
}

出力結果:
list11  //11                  
set7  //               (3 “g”,1 “e”)
    list    :
  :a    :1    :Thu Sep 14 09:28:23 CST 2017
  :b    :2    :Thu Sep 14 09:28:23 CST 2017
  :c    :3    :Thu Sep 14 09:28:23 CST 2017
  :d    :4    :Thu Sep 14 09:28:23 CST 2017
  :e    :5    :Thu Sep 14 09:28:23 CST 2017
  :f    :6    :Thu Sep 14 09:28:23 CST 2017
  :g    :7    :Thu Sep 14 09:28:23 CST 2017