ArrayList与linkedList的区别 重写hashCode()和equals()方法

ArrayList底层使用数组实现的,而LinkedList底层使用链表实现的。
对ArrayList与linkedList而言,在末尾增加一个元素的效率是一样的,
对ArrayList而言,在其内部数组增加一个元素是比较麻烦的,偶尔会导致数组进行重新分配。
对于随机访问set和get,ArrayList优于LinkedList,因为LinkedList是指针移动。
对于删除与增加操作,LinkedList是比较占优势,效率高。因为ArrayList需要移动元素。而LinkedList
只需要指针指到另一个地方。比较方便快捷。
对于查找操作,两者都是差不多的。
ArrayList比较浪费空间。

LinkedList实现了List接口,允许空元素。



  重写hashCode()和equals()方法

/**
  * * 重写equals必须注意:
  *   1 自反性:对于任意的引用值x,x.equals(x)一定为true
  *   2 对称性:对于任意的引用值x 和 y,当x.equals(y)返回true,y.equals(x)也一定返回true
  *   3 传递性:对于任意的引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,那么x.equals(z)也一定  *       返回 true
  *   4 一致性:对于任意的引用值x 和 y,如果用于equals比较的对象信息没有被修改,
  *           多次调用x.equals(y)要么一致地返回true,要么一致地返回false
  *   5 非空性:对于任意的非空引用值x,x.equals(null)一定返回false
  * 
  *  请注意:
  * 重写equals方法后最好重写hashCode方法,否则两个等价对象可能得到不同的hashCode,这在集合框架中使用可能产生严重后    * 果
  */
 
 public int hashCode(){                 //hashCode主要是用来提高hash系统的查询效率。当hashCode中不进行任何操作时,可以直接让其返回 一常数,或者不进行重写。
  int result = getName().hashCode();
  result = 29 * result +getBirthday().hashCode();
  return result;
  //return 0;
 }

/* * 1.重写equals方法修饰符必须是public,因为是重写的Object的方法. * 2.参数类型必须是Object. */


 
 public boolean equals(Object other){       //重写equals方法,后面最好重写hashCode方法
  
  if(this == other)                                      //先检查是否其自反性,后比较other是否为空。这样效率高
   return true;
  if(other == null)         
   return false;
  if( !(other instanceof Cat))
   return false;
  
  final Cat cat = (Cat)other;
  /*
   * 比较hashCode方法中返回的值
   * 如果equals返回为true,则hashCode一定返回true。
   * 如果equals返回为false,hashCode返回值不一定不相同。
   * 如果hashCode返回值不同,则equals返回值一定为false。
   * 如果hashCode返回值不同,则equals返回值不一定为false。
   */





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值