集合(容器)hoshCode算法

一.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方法 返回的是false
	System.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()方法来提示垃圾回收器进行回收...



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值