读书人

collection聚合

发布时间: 2012-06-26 10:04:13 作者: rapoo

collection集合


?1. Collection集合:

?TreeSet: 以有序状态保持并可防止重复,每次都会自动的按字母顺序排序

?HashMap: 可用成对的 name/value 来保存与取出

?LinkedList: 针对经常插入或删除中间元素所设计的高效率集合

?HashSet: 防止重复的集合,可快速的照相相符的元素

?

?2. Collections.sort(List list) 方法,对 list 按字母排序?

?3. System.out.println(a) 会自动调用 a.toString() 方法

==============================================================

?

1. 关于泛型知道的三件事情:

?a. 创建被泛型化类的实例 ? ? ?eg: new ArrayList<Song>()

?b. 声明与指定泛型类型的变量 ?eg: List<Song> songList = new ArrayList<Song>()

?c. 声明(与调用)取用泛型类型的方法

??eg: ?void foo(List<Song> List)

??? ? ?x.foo(songList)

??? ?

?2. ArrayList 的说明文件

?public class ArrayList<E> extends AbstractList<E> implements List<E>..

?{

?public boolean add(E o)

?.

?.

?.

?}

? ? ?E 部分会用你所声明与创建的真正类型来取代,ArrayList 是 AbstractList 的子类,所以指定给 ArrayList 的类型会自动地用在 AbstractList 上 ,E类型也会用在 List 这个接口上。 ? ?

?

?3. 使用未定义在类声明的类型参数

?public <T extends Animal> void takeThing(ArrayList<T> list)

?在返回类型之前,这个方法意味着 T 可以是"任何一种 Animal" ,因此 你可以使用

??ArrayList<Dog>, ArrayList<Cat> 或者 ArrayList<Animal> 来调用上面的方法

?

?4. public static <T extends Comparable<? super T>> void sort(List<T> list)

? ? sort() 方法只能接受 Comparable 对象的 list. 这里的 Comparable 是一个接口

?

?5. 从泛型的观点来说,extend 代表 extend或implement。它代表"是一个...",且不管是接口或类都适用。?

?

?6. public static <T> void sort(List<T> list, Comparator<? super T> c)

? ? java.util Interface Comparator<T> 有两个方法:

? ??int compare(T o1, T o2)

? ??boolean equals(Object obj)

? ? 如果传 Comparator 给 sort()方法,则排序是由Comparator而不是元素的compareTo()方法来决定

?

?7. sort() 规则:

?1. 调用单一参数的 sort(List o) 方法代表由 list 元素上的 compareTo() 方法来决定顺序。因此元素必须要实现 Comparable 这个接口。

?2. 调用 sort(List 0,Comparator c) 方法代表不会调用 list 元素的 compareTo()方法,而会使用 Comparator 的 compare() 方法。这意味着 list 元素不需要实现 Comparable。

?

?8. List:是一种知道索引位置的集合,可以有多个元素引用相同的对象。

? ? Set: ?不允许重复的集合,不会有多个元素引用相同的对象。

? ? Map: 使用成对的键值和数据值,Map 会维护与 key 有关联的值。两个 key 可以引用相同的对象,但 key 不能重复

?

?9. 自创的类没有覆盖equals方法,那你的类使用equals和使用==会得到同样的结果,==比较的是地址,equals比较的是值

?

?10. HashSet 检查重复与否:hashCode() 与 equals() 相关规定:

?1> 如果两个对象相等,则 hashcode 必须也是相等的。

?2> 如果两个对象相等,则其中一个对象调用 equals() 必须返回 true

?3> 如果两个对象有相同的哦 hashcode 值,他们也不一定相等

?4> 如果 equals() 被覆盖过,hashCode() 也必须被覆盖

?5> 如果你没有 override 过 hashCode(),则 class 两个对象怎样都不会被视为相同的,hashCode() 的默认行为是在 heap(堆)上对象产生独特的值

?6> equals() 的默认行为是执行 == 的比较,也就是说会去测试两个引用是否对上 ?heap 上同一个对象。如果equals() 没有被覆盖过,两个对象永远都不会被视为相同的

?

?11. TreeSet 在防止重复上面与 HashSet 是一样的。但它还会一直保持集合处于有序状态。如果使用 TreeSet 默认的构造函数,它工作起来就像 sort() 一样使用对象的compareTo() 方法来处理。但也可以选择传入 Comparator 给 TreeSet 的构造函数。

?

?12. 要使用TreeSet,集合中的元素必须是:有实现 Comparable 类的 compareTo() 或 有实现 Comparator<T> 类的 compare(T t1,T t2) ;来创建 TreeSet。

?

?

======================================================================

?

?1. ?数组的类型是在运行期间检查的,但集合的类型检查只会发生在编译期间

?

? 2. ?ArrayList<? extends Pet> 你可以调用 list 中任何元素的方法,但不能加入元素

?

? 3. public <T extends Animal> void takeThing(ArrayList<T> list)

? ? ?public void takeThing(ArrayList<? extends Animal> list) ? ? ? ?两者效果一样

?

读书人网 >移动开发

热点推荐