一、
重写equals方法时有以下几步工作需要完成
a、首先应该测试两个引用是否指向同一个对象
b、接下来应该测试传递进来的引用是否为null
c、然后测试传递进来的对象应用是否通过自己类型的instanceof测试
d、将传递进来的引用强制类型转换为自己的类型,测试相关的成员是否等价
重写了equals方法就必须重写hashcode方法,否则两个等价的对象可能是得到了不同的哈希吗,这在集合框架的使用中有可能产生严重的问题。
二、
下面几个类与接口是属于ordered排序的
ArrayList 类、Vector类、LinkedList类、List接口、LinkedHashSet类
三、
下面几个类与接口是属于sorted排序的
TreeSet类、TreeMap类、SortedSet接口、SortedMap接口
四、
若开发人员需要一个不能有重复元素并且不考虑索引的集合时,可以使用实现了Set接口的类
五、
LinkedHashSet---------------------------有序、不重复元素
六、局部变量与局部内部类
在非静态成员内部类中可以访问外部类的任何成员,而在局部内部类中一样可以访问外部类的成员,但却不可以访问同在一个局部的普通局部变量。
局部内部类可以访问final的局部变量,原因如下:
①普通的局部变量随着所在语句块的执行结束而消亡,而创建的局部内部类对象并不会随着语句块的结束而消亡。如果在语句块结束后,调用了局部内部类对象中访问普通局部变量的方法就要出现问题,因为此时要访问的局部变量不存在了。
②final的局部变量的存储方式与普通局部变量不同,其不会因为语句块的结束而消失,还会长期存在,因此可以被局部内部类访问。
七、静态/非静态内部类的区别
①非静态内部类应该与外部类的对象存在着对成员的共享关系,其是外部类对象组成的一部分,用来辅助外部类对象工作。
②而静态内部类与外部类对象之间则没有这样的关系,静态内部类其实已经脱离了外部类的控制。在创建其对象时已经不再需要外部类对象的存在,其实质上只是一个放置在别的类中的普通类而已。而static关键字只是说明其在创建对象时,不依赖于外部类对象的存在,并不是说这个类本身是静态的。
八、
匿名内部类没有名称,因此匿名内部类在声明类的同时也创建了对象。匿名内部类的声明要么是基于继承的,要么是基于实现接口的。
在特定情况下匿名内部类可以减少很多冗余的代码,大大简化开发。