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クラス
MyComparatorクラス:
testクラス:
出力結果:
解題構想: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());
}
}
}
出力結果:
list :11 //11
set :7 // (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