如下Java代码会输出什么? import java.util.HashSet; import java.util.Set; public class HashSetTest {     public static final class Person {         private String name = "";         public Person(String n) {             setName(n);         }         public String getName() {             return name;         }         public void setName(String name) {             this.name = (name == null) ? "" : name;         }         @Override         public int hashCode() {             return name.length();         }         @Override         public boolean equals(Object obj) {             if (!(obj instanceof Person)) {                 return false;             }             if (obj == this) {                 return true;             }             return this.name.equals(((Person) obj).name);         }     }     public static void main(String[] args) {         Set<Person> persons = new HashSet<Person>();         Person person = new Person("nowcoder");         persons.add(person);         person.setName("nowcodertest");         boolean isContains = persons.contains(person);         int size = persons.size();         System.out.println("isContains=" + isContains);         System.out.println("size=" + size);     } }-笔试面试资料

这是qklbishe.com第15767 篇笔试面试资料
提供答案分析,通过本文《如下Java代码会输出什么? import java.util.HashSet; import java.util.Set; public class HashSetTest {     public static final class Person {         private String name = "";         public Person(String n) {             setName(n);         }         public String getName() {             return name;         }         public void setName(String name) {             this.name = (name == null) ? "" : name;         }         @Override         public int hashCode() {             return name.length();         }         @Override         public boolean equals(Object obj) {             if (!(obj instanceof Person)) {                 return false;             }             if (obj == this) {                 return true;             }             return this.name.equals(((Person) obj).name);         }     }     public static void main(String[] args) {         Set<Person> persons = new HashSet<Person>();         Person person = new Person("nowcoder");         persons.add(person);         person.setName("nowcodertest");         boolean isContains = persons.contains(person);         int size = persons.size();         System.out.println("isContains=" + isContains);         System.out.println("size=" + size);     } }-笔试面试资料》可以理解其中的代码原理,这是一篇很好的求职学习资料
本站提供程序员计算机面试经验学习,笔试经验,包括字节跳动/头条,腾讯,阿里,美团,滴滴出行,网易,百度,京东,小米,华为,微软等互联网大厂真题学习背诵。

答案:

如下Java代码会输出什么?
import java.util.HashSet; import java.util.Set; public class HashSetTest {     public static final class Person {         private String name = "";         public Person(String n) {             setName(n);         }         public String getName() {             return name;         }         public void setName(String name) {             this.name = (name == null) ? "" : name;         }         @Override         public int hashCode() {             return name.length();         }         @Override         public boolean equals(Object obj) {             if (!(obj instanceof Person)) {                 return false;             }             if (obj == this) {                 return true;             }             return this.name.equals(((Person) obj).name);         }     }     public static void main(String[] args) {         Set<Person> persons = new HashSet<Person>();         Person person = new Person("nowcoder");         persons.add(person);         person.setName("nowcodertest");         boolean isContains = persons.contains(person);         int size = persons.size();         System.out.println("isContains=" + isContains);         System.out.println("size=" + size);     } } 

如下Java代码会输出什么?  import java.util.HashSet; import java.util.Set; public class HashSetTest {     public static final class Person {         private String name = &quot;&quot;;         public Person(String n) {             setName(n);         }         public String getName() {             return name;         }         public void setName(String name) {             this.name = (name == null) ? &quot;&quot; : name;         }         @Override         public int hashCode() {             return name.length();         }         @Override         public boolean equals(Object obj) {             if (!(obj instanceof Person)) {                 return false;             }             if (obj == this) {                 return true;             }             return this.name.equals(((Person) obj).name);         }     }     public static void main(String[] args) {         Set&lt;Person&gt; persons = new HashSet&lt;Person&gt;();         Person person = new Person(&quot;nowcoder&quot;);         persons.add(person);         person.setName(&quot;nowcodertest&quot;);         boolean isContains = persons.contains(person);         int size = persons.size();         System.out.println(&quot;isContains=&quot; + isContains);         System.out.println(&quot;size=&quot; + size);     } } ⊱r=a(1-sinx)♒
哈哈,虽然我一开始做错了,但是这题我真知道(手动狗头)
首先,HashSet的底层就是HashMap,因此本题就是考HashMap。其JDK源码如下
    public HashSet() {         map = new HashMap<>();     }

下面就需要解释HashMap的原理:

HashMap底层是hash数组+链表(或者红黑树),因为是hash数组,所以与hashCode方法息息相关。
一、介绍为啥是false:
首先得介绍下add方法,其实就是将参数作为key,一个固定的对象作为value放入HashMap中。也就是HashMap的put操作。
首先,HashMap的put操作源码如下:
return putVal(hash(key), key, value, false, true);

而putVal的源码太过复杂了,篇幅所限不展示了,但是只需要明白一点:那就是put操作人为这个key存在的依据是:

先判断hash,如果想同,再判断equals,如果还想同,才说明该key相同。
而contains的判断依据也是这样。
进入正题:
而由于一开始的时候name值为“newcoder”,所以获得一个hash值h1=8,而执行contains时,此时name值为为“newcodertest”,此时hash值为h2=12,所以两个hash值都不一样,所以必定返回false;
二、介绍大小为1
因为Set也好。Map也好,都是保持对对象的引用,即指向person对象,而代码只执行了一次add操作,且该person对象没有任何对象地址的变化,所以大小还是1.

今天 16:04:28 回复(0)

文章部分来自互联网,侵权联系删除
www.qklbishe.com

区块链毕设网(www.qklbishe.com)全网最靠谱的原创区块链毕设代做网站
部分资料来自网络,侵权联系删除!
资源收费仅为搬运整理打赏费用,用户自愿支付 !
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » 如下Java代码会输出什么? import java.util.HashSet; import java.util.Set; public class HashSetTest {     public static final class Person {         private String name = "";         public Person(String n) {             setName(n);         }         public String getName() {             return name;         }         public void setName(String name) {             this.name = (name == null) ? "" : name;         }         @Override         public int hashCode() {             return name.length();         }         @Override         public boolean equals(Object obj) {             if (!(obj instanceof Person)) {                 return false;             }             if (obj == this) {                 return true;             }             return this.name.equals(((Person) obj).name);         }     }     public static void main(String[] args) {         Set<Person> persons = new HashSet<Person>();         Person person = new Person("nowcoder");         persons.add(person);         person.setName("nowcodertest");         boolean isContains = persons.contains(person);         int size = persons.size();         System.out.println("isContains=" + isContains);         System.out.println("size=" + size);     } }-笔试面试资料

提供最优质的资源集合

立即查看 了解详情