熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Comparable 接口和 Collection 接口分析

2013-11-23 19:09:17  來源: Java核心技術 

  
  現看一下該接口的定義:
  public interface Comparable{
  public int compareTo(Object o);
  }
  該接口定義類的自然順序實現該接口的類就可以按這種方式排序
  一般要求:
  eequals((Object)e)和pareTo((Object)e)==具有相同的值
  這樣的話我們就稱自然順序就和equals一致
  這個接口有什麼用呢?
  如果數據或者List中的元素實現了該接口的話我們就可以調用Collectionssort或者Arrays方法給他們排序
  
  如果自然順序和equals不一致的話如果出現在Sorted Map和Set裡面
  就會出現預想不到的邏輯錯誤可能你調用add的時候添加不了而集合裡面確沒有這個元素具體的討論要接口哈希表的應用
  
  
  java中定義了很多集合類(也叫聚集或者容器)Collection是所有集合類的父接口Collection接口定義了方法沒有任何常量定義這裡簡要說明這些方法
  size()
  獲得集合中元素的個數如果個數大於IntegerMAX_VALUE返回IntegerMAX_VALUE
  isEmpty()
  如果不含任何元素返回true
  ntains(Object o)
  如果包含指定元素返回true
  erator()
  返回迭代器
  toArray()
  返回數組Object[]
  toArray(Object[] a)
  返回數組Object[]如果a可以包含集合中的元素返回a否則生成一個新的數組
  add(Object o)
  添加一個元素成功返回true
  remove(Object o)
  刪除一個數據成功返回true
  addAll(Collection c)
  添加包含在集合c中的所有元素如果集合有改變返回true
  removeAll(Collection c)
  刪除包含在集合c裡的所有元素如果集合有改變返回true
  retainAll(Collection c)
  刪除不包含在集合c裡的所有元素如果集合有改變返回true
  ntainsAll(Collection c)
  如果包含集合c裡的所有元素返回true
  clear()
  清除集合調用後isEmpty應該為true
  equals(Object c)
  判斷是否相等
  hashCode()
  返回哈希值
  
  這裡有幾點要注意的地方:
  修改集合的時候如果集合有變化就返回true這個定義是不嚴格的對於單條紀錄來說(addremove)
  如果添加或者刪除了指定的對象返回true對於add操作如果返回false表示集合已經存在相同的對象而且不
  允許重復對於remove操作如果返回false表示集合中並沒有這個對象對於批量操作就更不嚴謹了如果調用
  addAll(Collection c)c中有條紀錄而結果只添加了一條紀錄也返回true但是集合中肯定已經含有其他的
  那些元素了否則就應該拋出一個異常也就是說如果返回true的話containsAll(Collection c)應該為true
  toArray(Object[] a)方法到底有什麼呢?因為toArray()方法需要重新生成一個數組雖然Collection內部有
  這種數組結構但是必須得生成一個新的數組而不能直接返回內部的數組那樣的話Collection就不安全了
  toArray(Object[] a)利用現成的a數組(如果可以容納的話)而不需要重新分配空間
  equals()和hashCode()方法有點多余因為在Object中已經定義了這兩個方法任何類都繼承Object所以顯得
  多余但是加上也無可厚非
  在Java類庫中沒有直接繼承Collection的類都是繼承Collection的子接口比如ListSetMap等而且都不相交
  也就是不可以既是List又是Set
  
  

From:http://tw.wingwit.com/Article/program/Java/hx/201311/26366.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.