`
beyondbn
  • 浏览: 71554 次
社区版块
存档分类
最新评论

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

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics