ArrayList与linkedList的区别 重写hashCode()和equals()方法,linkedlisthashcode
分享于 点击 31326 次 点评:170
ArrayList与linkedList的区别 重写hashCode()和equals()方法,linkedlisthashcode
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。 */
相关文章
- 暂无相关文章
用户点评