1、重写hashCode和equals()
类型相同,值相等
hashCode()绑定的方法,equals重写,hashcode()必须重写
1)、equals() 约定:
自反:x.equals(x)
对称性:x.equals(y)=true 、y.equals(x)=true
传递性:x.equals(y)=true、y.equals(z)=true、则 z.equals(x)=true
一致性: 多次调用没有变化的统一,x,y结果相同
对于任何非空引用值x, x.equals(null)应该返回false
2)、hashcode()
Object类中的默认散列方法总是为每一个对象产生一个唯一号,即使重写的equals方法认为两个或多个对象是相等的也是这样。
如果两个相等,则它们的散列码也必须相等。
无论实例变量是否相等都为他们返回相同的值这样地的hashCode()仍然是相等的。
hashCode()约定:
x.equals(y)==true 则必须 x.hashCode()==y.hashCode()
x.equals(y)==false x.hashCode()与y.hashCode()无要求
x.hashCode()==y.hashCode() 可以 x.equals(y)==true
x.hashCode()!=y.hashCode() 可以 x.equals(y)==false
可以均匀的散列每个桶里一个值,也可以只有一个桶每个实例的hashCode()相同。
关键点:瞬态变量不要用于确定或等于对象的散列码。
2、集合
接口:Collection、Set、Sorted Set、List、Map、Sorted Map
设计类:
Collection.Set 的设计类:关心不重复
- HashSet:散列码 未分类、未排序的集合
- LinkedhashSet (HashSet 的排序版,插入顺序)
- TreeSet (分类 自然排序)
Collection.List 的设计类:与索引相关
- ArrayList:(索引)
- Vector:(ArrayList的同步版)
- LinkedList (双链表)
Map的设计类:关心唯一标识符
- HashMap: 未分类、未排序的集合
- Hashtable:HashMap的同步版
- TreeMap:(分类的 自然排序)
- LinkedhashMap:(HashMap 的排序版,插入顺序)
3、垃圾搜集
符合删除条件的:
1)、空引用
2)、重新为新引用赋值
3)、隔离引用
垃圾搜集申请:System.gc()申请
Finalize()对任何指定的对象,Finalize将执行一次。在gc()前挽救对象仅一次。
4、使用Wrapper类与字符串、封装器和对象一起使用equals()方法
StringBuffer没有实现对equals、hashCode的重写
Wrapper类与集合、String重写equals、hashCode()方法