JAvaコレクションオブジェクトは複数のフィールドに基づいて再ロードされます

4171 ワード

皆さんが関心を持っている結果が来ました.前にオブジェクトの繰り返しをやり直すには2つのforループが必要かもしれませんが、今日からは必要ありません.昨日1篇の文章を見てTreeSetがどれだけ重いことができると言って、私は1回重いことができることを知っていて、それからテスト研究は以下の通りです:
//  
List list = new ArrayList<>();
list.add(new User(" ","123",1));
list.add(new User(" 1","1234",1));
list.add(new User(" 1","1234",1));
list.add(new User(" ","123",1));
for(User u : list){
    System.out.println(" " + u);
}
Set set = new TreeSet<>(new Comparator() {
    @Override
    public int compare(User user0, User t1) {
        int count = 1;
        if(StringUtils.equals(user0.getUsername(), t1.getUsername()) &&
                StringUtils.equals(user0.getPassword(),t1.getPassword())){
            count = 0;
        }
        return count;
    }
});
set.addAll(list);
System.out.println("________________");
for(User u : set){
    System.out.println(" " + u);
}

 :
 User{username=' ', password='123', age=1}
 User{username=' 1', password='1234', age=1}
 User{username=' 1', password='1234', age=1}
 User{username=' ', password='123', age=1}
________________
 User{username=' ', password='123', age=1}
 User{username=' 1', password='1234', age=1}

私は彼のこの方法に少し問題があることに気づいた.もし私が集合の値を変えたら、以下のようにします.
List list = new ArrayList<>();
list.add(new User(" ","123",1));
list.add(new User(" 1","1234",1));
list.add(new User(" 1","12345",1));
list.add(new User(" ","123",1));
for(User u : list){
    System.out.println(" " + u);
}
Set set = new TreeSet<>(new Comparator() {
    @Override
    public int compare(User user0, User t1) {
        int count = 1;
        if(StringUtils.equals(user0.getUsername(), t1.getUsername()) &&
                StringUtils.equals(user0.getPassword(),t1.getPassword())){
            count = 0;
        }
        return count;
    }
});
set.addAll(list);
System.out.println("________________");
for(User u : set){
    System.out.println(" " + u);
}

これでリストの3番目のデータだけを変更し、印刷結果を見てみましょう.
 User{username=' ', password='123', age=1}
 User{username=' 1', password='1234', age=1}
 User{username=' 1', password='12345', age=1}
 User{username=' ', password='123', age=1}
________________
 User{username=' ', password='123', age=1}
 User{username=' 1', password='1234', age=1}
 User{username=' 1', password='12345', age=1}
 User{username=' ', password='123', age=1}

これで私たちのニーズを満たすことはできません.

重要な方法は次のとおりです。


少し修正しました
List list = new ArrayList<>();
list.add(new User(" ","123",1));
list.add(new User(" 1","1234",1));
list.add(new User(" 1","1235",1));
list.add(new User(" ","123",1));
for(User u : list){
    System.out.println(" " + u);
}

Set set = new TreeSet<>(new Comparator() {
    @Override
    public int compare(User user0, User t1) {
        int count = 1;//=0 
		count = user0.getUsername().compareTo(t1.getUsername()) +
				user0.getPassword().compareTo(t1.getPassword());
        return count;
    }
});
set.addAll(list);
System.out.println("________________");
for(User u : set){
    System.out.println(" " + u);
}

結果は次のように表示されます.
 User{username=' ', password='123', age=1}
 User{username=' 1', password='1234', age=1}
 User{username=' 1', password='1235', age=1}
 User{username=' ', password='123', age=1}
________________
 User{username=' ', password='123', age=1}
 User{username=' 1', password='1234', age=1}
 User{username=' 1', password='1235', age=1}