hashCode()与equals()的相关规定
- API文件有对对象的状态制定出必须遵守的规则:
- 如果两个对象相等,对其中一个对象调用equals()必须返回true。也就是说,若a.equals(b)则b.equals(a)
- 如果两个对象有相同的hashcode值,它们也不一定是相等的。但若两个对象相等,则hashcode值一定是相等的
- 因此若equals()被覆盖过,则hashCode()也必须被覆盖
- hashCode()的默认行为是对在heap上的对象产生独特的值。如果你没有override过hashCode().则该class的两个对象怎样都不会被认为是相同的
- equals()的默认行为是执行==的比较。也就是说会去测试两个引用是否对上heap上同一个对象。如果equals()没有被覆盖过。两个对象永远都不会被视为相同的,因为不同的对象有不同的字节组合
- a.equals(b)必须与a.hashCode()==b.hashCode()等值。反之,则否。
ArrayList不是唯一的集合
- 虽然ArrayList会是最常用的,但偶尔还是会有特殊情况。下面列出几个较为重要的
- TreeSet
- 以有序状态保持并可防止重复
- HashMap
- 可用成对的name/value来保存与取出
- LinkedList
- 针对经常插入或删除中间元素所设计的高效率集合(实际上ArrayList还是比较实用)
- HashSet
- 防止重复的集合,可快速地找寻相符的元素
- LinkedHashMap
- 类似HashMap,但可记住元素插入的顺序,也可以设定成依照元素上次存取的先后来排序