❶ java中怎麼實現set類里的數據隨機數據
可以使用LinkedHashSet
LinkedHashSet
LinkedHashSet集合同樣是根據元素的hashCode值來決定元素的存儲位置,但是它同時使用鏈表維護元素的次序。這樣使得元素看起 來像是以插入順序保存的,也就是說,當遍歷該集合時候,LinkedHashSet將會以元素的添加順序訪問集合的元素。
LinkedHashSet在迭代訪問Set中的全部元素時,性能比HashSet好,但是插入時性能稍微遜色於HashSet。
❷ java 關於集合Set介面的實現類中 元素相等的問題
HashSet確實是靠hashcode來運算出這個元素應該存放在什麼地方。
但是不同的對象,hashcode也可能會相同。
這時就發生了沖突,需要再次比較發生沖突的兩個或多個元素是否相同(通過equals方法)。
如果相同添加失敗,如果不同添加成功。
為什麼不直接用equals比較是否相同?
因為不知道該跟哪個元素比較啊,難不成遍歷整個Set來比較?
如果有一萬個元素呢,那麼將會很費時間。
而先算出hashcode在比較有個好處。
只要hashcode不同,則可以確定元素不同。只有hashcode相同的情況下,元素才有可能相同。
hashcode的性質:
如果兩個元素相同,那麼其hashcode必定相同。
如果兩個元素不同,那麼不要求其hashcode一定不同。(但是如果不同的元素盡量能返回不同的hashcode,那麼將有助於提高HashSet的性能)
❸ JAVA 連續.set()方法是怎麼實現的
你這是不是進入了誤區了?? get set 是javaBean 中方法,一般get有返回值,set是void,
只有設置setName等等,方法返回值不能為空,return CatClass對象才能實現
❹ java集合set有哪些方法
set是一個介面,一般實現類用HashSet
方法摘要
boolean add(E e)
如果 set 中尚未存在指定的元素,則添加此元素(可選操作)。
boolean addAll(Collection<? extends E> c)
如果 set 中沒有指定 collection 中的所有元素,則將其添加到此 set 中(可選操作)。
void clear()
移除此 set 中的所有元素(可選操作)。
boolean contains(Object o)
如果 set 包含指定的元素,則返回 true。
boolean containsAll(Collection<?> c)
如果此 set 包含指定 collection 的所有元素,則返回 true。
boolean equals(Object o)
比較指定對象與此 set 的相等性。
int hashCode()
返回 set 的哈希碼值。
boolean isEmpty()
如果 set 不包含元素,則返回 true。
Iterator<E> iterator()
返回在此 set 中的元素上進行迭代的迭代器。
boolean remove(Object o)
如果 set 中存在指定的元素,則將其移除(可選操作)。
boolean removeAll(Collection<?> c)
移除 set 中那些包含在指定 collection 中的元素(可選操作)。
boolean retainAll(Collection<?> c)
僅保留 set 中那些包含在指定 collection 中的元素(可選操作)。
int size()
返回 set 中的元素數(其容量)。
Object[] toArray()
返回一個包含 set 中所有元素的數組。
<T>
T[] toArray(T[] a)
返回一個包含此 set
中所有元素的數組;返回數組的運行時類型是指定數組的類型。
❺ Java中Set、List、Map集合類(介面)的特點及區別。分別有哪些常用實現類。
Set無序,元素唯一
常用實現類有HashSet,TreeSet
List有序的,可以重復
常用實現類有ArrayList,LinkedList
Map是以鍵值出現的
常用實現類有HashMap,TreeMap
❻ 1. 如何用java設計一個集合類Set,並編寫應用程序創建兩個Set對象
Set中的對象不按特定方式排序,並且沒有重復對象。但它的有些實現類能對集合中的對象按特定方式排序,例如TreeSet類,它可以按照默認排序,也可以通過實現java.util.Comparator<Type>介面來自定義排序方式。Set中不能有重復對象,那麼它是如何判斷要加入到集合中的對象是否重復呢?當要加入一個對象到Set集合中時,會先調用該對象的hashcode()方法,根據hashcode來確定該對象應該放在哪個內存地址上。如果計算出的內存地址中已經放入了對象,那說明這兩個對象相同,就不會將這個對象加入到集合中。如果計算出的內存地址中沒有放入對象,則調用該對象的equals()方法,把它與集合中每一個對象進行比較,看這兩個對象是否相同。如果相同,則不加入這個對象到Set集合中。如果不同則加入該對象。