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) ? ? ? ?两者效果一样
?