一个java小程序,帮我用文字注释每一句含义 10
自学java,好难啊,通宵学习,结果因为这段代码,一整晚都在思考,感觉还不是很清晰,求高手帮我注释,最好能详细点,能让一个初学者读完文字就能大概理解他们的作用,当然我知道...
自学java,好难啊,通宵学习,结果因为这段代码,一整晚都在思考,感觉还不是很清晰,求高手帮我注释,最好能详细点,能让一个初学者读完文字就能大概理解他们的作用,当然我知道这是一段利用HashSet存储自定义对象的实例,主要是person类那一段有点复杂!理不清!
import java.util.*;
class HashSetTest
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
HashSet hs = new HashSet();
hs.add(new Person("a1",11));
hs.add(new Person("a2",12));
hs.add(new Person("a3",13));
sop("------------------");
//判断是否存在
sop("a4:"+hs.contains(new Person("a4",14)));//false
sop("------------------");
Iterator it = hs.iterator();
while(it.hasNext())
{
Person p = (Person)it.next();
sop(p.getName()+"--"+p.getAge());
}
}
}
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public int hashCode() //由系统底层自己调用。复写hashCode
{
System.out.println(this.name);
return 60; //返回哈希值
}
public boolean equals(Object obj)//重写父类Object中的equals方法
{
if(!(obj instanceof Person))//如果obj对象不是Person类的实例
return false; //返回false
Person p = (Person)obj; //调用子类对象特有方法时,向下转型
String tn = this.name;
String pn = p.name;
int ta = this.age;
int pa = p.age;
System.out.println(tn+".equals.."+pn);
return tn.equals(pn) && ta==pa;//返回boolean值
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
===============================================================================================================================================
截图,看的会比较清晰一点
运行结果 展开
import java.util.*;
class HashSetTest
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
HashSet hs = new HashSet();
hs.add(new Person("a1",11));
hs.add(new Person("a2",12));
hs.add(new Person("a3",13));
sop("------------------");
//判断是否存在
sop("a4:"+hs.contains(new Person("a4",14)));//false
sop("------------------");
Iterator it = hs.iterator();
while(it.hasNext())
{
Person p = (Person)it.next();
sop(p.getName()+"--"+p.getAge());
}
}
}
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public int hashCode() //由系统底层自己调用。复写hashCode
{
System.out.println(this.name);
return 60; //返回哈希值
}
public boolean equals(Object obj)//重写父类Object中的equals方法
{
if(!(obj instanceof Person))//如果obj对象不是Person类的实例
return false; //返回false
Person p = (Person)obj; //调用子类对象特有方法时,向下转型
String tn = this.name;
String pn = p.name;
int ta = this.age;
int pa = p.age;
System.out.println(tn+".equals.."+pn);
return tn.equals(pn) && ta==pa;//返回boolean值
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
===============================================================================================================================================
截图,看的会比较清晰一点
运行结果 展开
展开全部
import java.util.*;
public class HashSetTest {// 这里有问题,少了public, main方法所在的类必须是public的起作用
public static void sop(Object obj) {
System.out.println(obj);
}
public static void main(String[] args) {
HashSet<Person> hs = new HashSet<Person>();
hs.add(new Person("a1", 11));
hs.add(new Person("a2", 12));
hs.add(new Person("a3", 13));
sop("------------------");
// 判断是否存在
sop("a4:" + hs.contains(new Person("a4", 14)));// false
sop("------------------");
for (Person p : hs) {// 一般这样遍历
sop(p);
}
}
}
class Person {
private String name;
private int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {// 一般要复写这这方法
return "name:" + name + " age:" + age;
}
public int hashCode() // 由系统底层自己调用。复写hashCode
{
// System.out.println(this.name);
// return 60; // 返回哈希值
// 上面的实现不好, 可以这样:
return name.hashCode() * 31 + age;
}
public boolean equals(Object obj)// 重写父类Object中的equals方法
{
if (!(obj instanceof Person))// 如果obj对象不是Person类的实例
return false; // 返回false
Person p = (Person) obj; // 调用子类对象特有方法时,向下转型
return ((this.age == p.age) && (this.name.equals(name)));//这样写容易理解些,代码量少
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
展开全部
我也是自学java的 帮助你理一下Person类的 这段代码
其实 Object 的 equals底层 实现还是 this==(obj);的
想要比较人的年龄
直接就可以这样写
class Person {
private String name ;
private int age;
Person( String name ,int age )
{
this.name=name;
this.age=age;
}
public boolean equals(Object obj )
{
if( !(obj instanceof Person) ){ //进行健壮性的判断 穿进来的对象是不是Person这一类
throw new ClassCastException("类型错误");
}else{
Person p=(person)obj; //向下转型
return this.age == (p.age)
}
}
}
其实 Object 的 equals底层 实现还是 this==(obj);的
想要比较人的年龄
直接就可以这样写
class Person {
private String name ;
private int age;
Person( String name ,int age )
{
this.name=name;
this.age=age;
}
public boolean equals(Object obj )
{
if( !(obj instanceof Person) ){ //进行健壮性的判断 穿进来的对象是不是Person这一类
throw new ClassCastException("类型错误");
}else{
Person p=(person)obj; //向下转型
return this.age == (p.age)
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询