equalsとhashCodeの探査の足を洗うことを書き換える(二)

2668 ワード

equalsとhashCodeの探解を書き換える足を洗う(一)


public class User{   
     public String userName;   
     public String password;   
  
     public User(String userName,String password){   
         this.userName = userName;   
         this.password = password;   
     }   
  
     public static void main(String[] arg){   
         Set<User> users = new HashSet<User>();      //L1   
         User user=new User("lisa","ddd");      //L2   
         users.add(user);                        //L3   
         User user1=new User("lisa","ddd");     //L4   
         users.add(user1);                      //L5   
         System.out.println(“size---->"+users.size());      //L6   
     }   
  
     // hashCode equals    
     public int hashCode(){   
           
         system.out.println("fn ----> hashCode");   
         return 1;   
     }   
        
     public boolean equals(){   
         system.out.println("fn ----> equals");   
         return true;   
     }   
  
}   
  
  
 :   
fn ----> hashCode   
fn ----> hashCode 
fn ----> equals
size---->1  

解析:userをusersに追加し、fn------>hashCodeを印刷します.原理は前の文章を参照してください.
L 5:user 1をusersに追加し、hashCode()は依然としてreturn 1である.したがって、userを最初の部屋に置いた後、同じ部屋(つまり最初の部屋userがいる部屋、userが今も最初の部屋で寝ていることに注意してください)に置く準備をしていると理解できます.
今ではuser 1もこの部屋に入って寝る準備ができているので、ドアの鍵が判断し始めます.あなたのuserとuser 1は同じ人ではないでしょうか.同じ人だから、私はあなたを中に入れます.そうでなければ、あなたは同じ人ではありません.私はあなたを中に入れませんよ.
もしこの时にドアの禁が正常に働いていたら、きっとあなたを中に入れないで、中に人がいるから、ドアの禁が壊れた状态にあるならば、あなたは大きく振ってYYに入ることができます(へへ)、
では、門禁の善し悪しはequals()の方法によって判断しなければなりません.ここで私たちのequalsの方法はずっとtrueに戻っています.門禁は永遠に正常に働いていることを示していますよ.あなたの悪人は休んでYYに入ってきます.そこで部屋の中で永远に一人で寝ていましたよ、ほほほ(ビルにぶつかって倒れない限り)
そこで2回fn->hashCodeと1回判定fn->equalsを印刷しました.もちろんsizeは永遠に1です.
------------------------------------------


     public boolean equals(){   
         system.out.println("fn ----> equals");   
         return true;   
     }  

もし私たちがこの時equalsメソッドのreturn falseを;その門禁は壊れて、それでは悪人user 1は門を破って入ることができて、甚だしきに至っては更に多くの“user 1”に入ることができます.....
印刷は次のようになります.
fn ----> hashCode  
fn ----> hashCode
fn ----> equals
size---->2
したがって,equalsメソッドを異なるビジネスに基づいて書き換え,異なる条件で異なるbooleanを返すことで,やりたい放題の制御者が出入りできるようになった.賄賂の門禁は確かに爽やかだね.
続行
equalsとhashCodeの探査の足を洗うことを書き換える(三)