1.hashCode()方法使用来提高Map里面的搜索效率的,Map会根据不同的hashCode()来放在不同的桶里面,Map在搜索一个对象的时候先通过hashCode()找到相应的桶,然后再根据equals()方法找到相应的对象.要正确的实现Map里面查找元素必须满足一下两个条件:
(1)当obj1.equals(obj2)为true时obj1.hashCode() == obj2.hashCode()必须为true
(2)当obj1.hashCode() != obj2.hashCode()为true时obj.equals(obj2)必须为true
2.一个类实现Comparable接口是用来决定该类对象的自然顺序,这样把该类对象放入TreeSet,TreeMap,时会根据该类对象的自然顺序自动进行排序,另外往Queue里面存的时候也会根据对象自然顺序排序
3.光实现Comparable只能决定该类对象自然顺序,但是很多时候需要自定义排序规则,那么就要实现
Comparator接口,例如一个People实现了Comparable接口并且定义自然顺序为按照名字字母顺序排序,那么把People存到List里面的时候可以用Collections.sort()方法根据自然顺序对该List进行排序,问题就在于我现在要把People按照年龄排序该怎么办呢?一个类实现了Comparable只能重写compareTo()方法一次,那么也只能有一种顺序--自然顺序,但是为了可以用age大小排序这个List的话,就必须使用一个类实现Comparator并且重写compare()方法,定义按照age排序的规则,然后调用Collections 的 static <T> void sort(List <T> list, Comparator <? super T> c) 这个方法来按照指定比较器规定的顺序来对List排序
在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。 |