一 現看一下該接口的定義:
public interface Comparable{
public int compareTo(Object o);
}
該接口定義類的自然順序
實現該接口的類就可以按這種方式排序
一般要求:
e
equals((Object)e
)和pareTo((Object)e
)==
具有相同的值
這樣的話我們就稱自然順序就和equals一致
這個接口有什麼用呢?
如果數據或者List中的元素實現了該接口的話
我們就可以調用Collections
sort或者Arrays方法給他們排序
如果自然順序和equals不一致的話
如果出現在Sorted Map和Set裡面
就會出現預想不到的邏輯錯誤
可能你調用add的時候添加不了
而集合裡面確沒有這個元素
具體的討論要接口哈希表的應用
二 java中定義了很多集合類(也叫聚集或者容器)
Collection是所有集合類的父接口
Collection接口定義了
方法
沒有任何常量定義
這裡簡要說明這些方法
size()
獲得集合中元素的個數
如果個數大於Integer
MAX_VALUE
返回Integer
MAX_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
這個定義是不嚴格的
對於單條紀錄來說(add
remove)
如果添加或者刪除了指定的對象
返回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的子接口
比如List
Set
Map等
而且都不相交
也就是不可以既是List又是Set
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26366.html