1.set集合
set集合是一種不包含重複元素的collection,set集合中主要有兩個類:hashset類和treeset類。一般情況我們使用hashset比較多。因為set集合預設是無序的。當我們想要對set集合進行排序時,會使用到treeset。
2.hashset的使用及遍歷
/**
* @program:
* @description
* @author:mr.jia
* @return:
* @creattime:2019-03-11 21:55:50
**/public class testset
system.out.println("");
//增強for循壞遍歷
for (string string:set)}}
輸出結果如下
當然set是不允許存放重複元素的,當我再一次新增乙個「a」進入再輸出set時
輸出結果仍然為乙個a。
這裡我們在set中存放的是乙個string型別的字串,當我們存放的是我們的自定義類時,需要在類中重寫equals方法和hashcode方法。(簡單說一下為什麼重寫equals必須重寫hashcode方法,是因為重寫equals時,我們會對該類中的某些屬性進行判斷。而為了保證equals一致hashcode也一致,故需要重寫hashcode方法)
@override這裡我重寫了equals方法,其中對student類中的id進行了比較,當這兩個類的id是相同的時候,equals便返回true。而如果我們沒有重寫hashcode方法,則會出現hashcode不一致而equals一致的情況。(因為沒重寫hashcode實際上是這兩個物件在jvm記憶體堆上的位址,兩個物件的位址肯定不同)public boolean equals(object o)
@override
public int hashcode()
因為往hashset中存放元素時,缺省會對兩個元素進行比較,首先會比較它們的hashcode,當hashcode相同時,再進行equals比較,如果返回true則證明兩個元素相同,將不對該元素進行存放,如果是false,則會進行雜湊,然後存放。
3.treeset的排序
建立方法也是通過new關鍵字進行建立。與hashset的極大不同是,你可以對treeset的元素進行排序。
排序分為自然排序與指定排序。
這裡set1自動對集合內元素進行了公升序排序。
這裡我定義了乙個類實現comparator介面,其中定義了以降序的方式對set1中的元素進行排序。
那麼如果是我們自定義的乙個型別呢?
這裡我定義乙個student類:
再寫乙個類實現comparator介面,以id進行排序。
輸出結果如下
這裡以id進行了降序排列。
主要是為了讓自己鞏固一下treeset。
參考部落格:
set集合的排序
在hibernate的onetomany的實體關聯的時候,one端的set是無序的,可是需要按照順序來搞的話就比較麻煩了。下面給出乙個例子。setdiarypictureset growthdiary.getdiarypictures listdiarypicturelist new arrayli...
Set集合的排序
treeset使用元素的自然順序對元素進行排序,或者根據建立set時提供的comparator進行排序,具體取決於使用的構造方法。通俗一點來說,就是可以按照排序後的列表顯示,也可以按照指定的規則排序。setset new treeset set.add f set.add a set.add b s...
排序之set集合排序
include include include include using namespace std setdict int main cout 排序之後 iterator it dict.begin it dict.end it cout 公升序排列 include 對於重複的數字將會忽略 in...