集合(容器)hoshCode算法

来源:互联网 发布:unity3d 动画循环播放 编辑:程序博客网 时间:2024/06/05 05:40

一.object类的四个方法

1.toString()方法

通过重写object类的toString()方法实现对象的自我描述、自我介绍

public String toString(){return 实例变量}

举例代码如下:

public class Student {private String name;private String age;private String sex;public Student(){}public Student(String name,String age,String sex){this.name=name;this.age=age;this.sex=sex;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String toString(){return "姓名"+this.name+"年龄"+this.age+"性别:"+this.sex;}}

2.object类的equals()方法

作用:我们可以通过重写Object类的equals()方法 实现两个对象 意义上 相等 (意义上是同一个对象)
演示代码:

public class Student {private int sno;private String name;private String sex;public Student(){}public Student(int sno,String name,String sex){this.name=name;this.sno=sno;this.sex=sex;}public int getSno() {return sno;}public void setSno(int sno) {this.sno = sno;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public boolean equals(Object obj){     if(obj instanceof Student){//1.intanceof 判断对象类型  2.范型判断方法 obj.getclass()==Student.class();     Student s=(Student)obj;    if(this.name.equals(s.getName())&&this.sex==(s.getSex())){    return true;    }else{    return false;    }          }else{     return false;     }}}
public class Test {public static void main(String[] args) {Student s=new Student(1,"李宝军","男");Student s1=new Student(2,"李宝军","男");System.out.println(s.equals(s1));//不重写equals方法 返回的是falseSystem.out.println(s.equals(s1));//当重写写了equals的方法 返回的是ture}}

三、重写Object()的第三个方法 hashCode()

格式:

public int hashCode(){return hashCode;}

从写hashCode的两个原则:

1. 两个对象 equals()比较结果是true, 它俩的hashCode值也要相同

2.重写equals时使用的条件, 重写hashCode时也要用
代码如下:

public int hashCode(){return this.name.hashCode()*13+this.sex.hashCode()*17;   }
System.out.println(s.hashCode());System.out.println(s1.hashCode());

3.为什么要质数?

好的hashCode算法要保证一个桶里最好只有一个对象
四、Object类的finalize方法

不需要程序员写 finalize方法是对象被回收前调用的最后一个方法

1.垃圾回收器: 垃圾回收器是一个系统级的线程,作用是帮助程序员回收无用内存... 回收的重点是堆的内存...

2.java中的对象分为三种状态

(1)激活状态:一个或一个以上的引用 引用对象的时候 对象处于激活状态

(2)去活状态:没有引用 引用该对象时 该对象处于去活状态

(3)死亡状态:在某一个时间 垃圾回收器 会在去活状态对象上 调用它的finalize()方法,如果在finalize()方法中没有引用从新把

这个对象再激活,这时对象就会从去活状态转换成死亡状态..垃圾回收器真正回收的是死亡状态的对象

注意知识点:System.gc();提示垃圾回收器进行回收 只是提示作用

五、简述final、finalize、finally三者的区别

1、final关键字(略)

2、finalize 对象被回收前调用的最后一个方法...
3.finally异常处理中的关键字,finally表示无论如何总要执行的代码会放到finally中,一般放的是释放资源的代码...如果finally前 加了 强制退出System.exit(0)  finally不会执行

六、补充内存管理的关键字

c语言:

 分配内存   malloc(sizeof(obj))
 释放内存   free(obj);

c++语言:  
 分配内存 Object *obj = new Object();
 释放内存  delete (obj);

java语言:

 程序员不需要管理内存的分配和释放、内存的释放工作由垃圾回收器完成....

 程序员可以使用System.gc()方法来提示垃圾回收器进行回收...



 

原创粉丝点击