set——hashset和treeset

下面是學(xué)習(xí)的時候?qū)懙囊恍┐a:

1.hashSet的基本使用

2.hashset的特性

3.treeSet的基本使用

4.使用treeSet存自定義對象

5.比較器和對象的自然排序


?1.hashSet的基本使用

privatestaticvoid demo05() {

? ? ? ? //初始化HashSet hSet =new HashSet();

? ? ? ? //添加hSet.add(45);

? ? ? ? hSet.add(77);

? ? ? ? hSet.add(26);

? ? ? ? hSet.add(185);

? ? ? ? hSet.add(523);

? ? ? ? hSet.add(94);

? ? ? ? hSet.add(45);


? ? ? ? //特點(diǎn)一:無序

? ? ? ? //特點(diǎn)二:元素不能重復(fù)? ? ? ? System.out.println(hSet);


? ? ? ? //移除hSet.remove(45);

? ? ? ? //hSet.clear();? ? ? ? System.out.println(hSet);


? ? ? ? //獲取? ? ? ? System.out.println(hSet.size());

? ? ? ? System.out.println(hSet.isEmpty());

? ? ? ? System.out.println(hSet.contains(88));


? ? ? ? /*? ? ? ? * hashSet的迭代方法,同list

? ? ? ? */? ? ? ? Iterator it = hSet.iterator();


? ? }


2.hashset的特性

privatestaticvoid demo06() {

? ? /*? ? * hashset特性

? ? *//*? ? * hashset默認(rèn)大小為16,在存數(shù)據(jù)時,先通過hash函數(shù)算出一個返回值,然后根據(jù)返回值計(jì)算存在哪個位置

? ? * 不會按照順序存進(jìn)去

? ? * 哈希表中存儲數(shù)據(jù)是由哈希函數(shù)來分布,哈希函數(shù)就是元素的hashcode函數(shù)

? ? *

? ? * 如果兩個元素的hash值相同,

? ? *? ? ? ? ? ? ->再次調(diào)用元素的equals方法來比較兩個對象是否相同,如果相同就忽略

? ? *? ? ? ? ? ? ->如果equals判斷不相同,就會以鏈表的方式進(jìn)行掛桶

? ? */? ?

? ? ? ? HashSet hSet =new HashSet();

? ? ? ? hSet.add("t1");

? ? ? ? hSet.add("t1");

? ? ? ? hSet.add("t1");

? ? ? ? hSet.add("t4");

? ? ? ? hSet.add("t5");

? ? ? ? hSet.add("t6");


? ? ? ? //迭代for (String str : hSet) {

? ? ? ? ? ? System.out.println(str);

? ? ? ? }


? ? ? ? //整數(shù)的哈希值是?System.out.println(newInteger(50).hashCode());//50,整數(shù)的hash值就是它本身System.out.println("a".hashCode());//97,字符的hash值就是ASCII碼System.out.println("abc".hashCode());//96354,通過hashcode方法進(jìn)行計(jì)算


? ? ? ? //對象默認(rèn)的hash值就是地址的10進(jìn)制值

? ? ? ? //計(jì)算hash值得屬性,一般用特殊屬性值來進(jìn)行計(jì)算}


3.treeSet的基本使用

privatestaticvoid demo07() {

? ? ? ? /*? ? ? ? * treeSet的基本使用

? ? ? ? * 判斷大小是compareTo方法,判斷元素相同時compareTo返回0就表示相同,

? ? ? ? *///保存整數(shù)TreeSet tSet =newTreeSet<>();

? ? //添加tSet.add(12);

? ? tSet.add(5);

? ? tSet.add(97);

? ? tSet.add(21);

? ? tSet.add(-1);

? ? tSet.add(21);

? ? System.out.println(tSet);


? ? /*? ? * treeSet特點(diǎn):

? ? *? ? 一:唯一性

? ? *? ? 二:會自動排序

? ? */for (Integer integer : tSet) {

? ? ? ? System.out.println(integer);

? ? }


? ? //字符串TreeSet tSet2 =newTreeSet<>();

? ? tSet2.add("aaa");

? ? tSet2.add("bbbb");

? ? tSet2.add("ccccc");

? ? tSet2.add("dddddd");

? ? tSet2.add("OOObb");

? ? tSet2.add("aaa");

? ? System.out.println(tSet2);//字符串排序,如果第一個相同就比較第二個大小,以此類推? ?


? ? }


4.使用treeSet存自定義對象

privatestaticvoid demo08() {

? ? ? ? /*? ? ? ? * 使用treeSet存自定義對象

? ? ? ? * 判斷是否相同的方法不再是hashcode和equals方法,而是compareTo是否返回0

? ? ? ? */? ? TreeSet tSet =newTreeSet<>();

? ? tSet.add(newStudent("小明8", 25));

? ? tSet.add(newStudent("小明", 21));

? ? tSet.add(newStudent("小明6", 20));

? ? tSet.add(newStudent("小明3", 29));

? ? tSet.add(newStudent("小明9", 18));

? ? tSet.add(newStudent("小明", 21));

? ? tSet.add(newStudent("小明9", 18));


? ? for (Student stu : tSet) {

? ? ? ? System.out.println(stu);

? ? }

? ? }


5.比較器和對象的自然排序

比較器,是自己新建一個類,實(shí)現(xiàn)comparator接口。

publicclassComparatorWithPersonimplementsComparator{

? ? /** 1.不需要定制自然規(guī)則,使用比較器來實(shí)現(xiàn)排序

* 此處我新建了一個ComparatorWithPerson類,實(shí)現(xiàn)Comparator接口,該接口實(shí)現(xiàn)的類型是我定義的person類。

*/? ?

? ? @Override

? ? publicint compare(Person o1, Person o2) {

? ? ? ? intageRes = o1.getAge()-o2.getAge();

? ? ? ? intnameRes = o1.getName().compareTo(o2.getName());

? ? ? ? // 年齡優(yōu)先

? ? ? ? //return ageRes == 0 ? nameRes : ageRes;

? ? ? ? // 姓名優(yōu)先returnnameRes == 0 ? ageRes : nameRes;

? ? }

自然排序就是在我定義的person類中,重寫compareTo方法

/*? ? * 2.定制person對象的自然排序規(guī)則

? ? */? ? @Override

? ? publicint compareTo(Person o) {

? ? // 定制排序規(guī)則intageRes =this.age - o.getAge();

? ? intnameRes =this.name.compareTo(o.getName());

? ? // 年齡優(yōu)先

? ? //return ageRes == 0 ? nameRes : ageRes;

? ? // 姓名優(yōu)先returnnameRes == 0 ? ageRes : nameRes;

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Set接口 set一個最大的特點(diǎn)就是無序,無重復(fù) 今天主要內(nèi)容 HashSetHashSet的工作原理存儲自定義對...
    須臾之北閱讀 297評論 0 0
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,652評論 18 399
  • 公認(rèn)的“性趣”識別器點(diǎn)擊上方關(guān)注“百分之三”每天有情、有趣、有料! 當(dāng)年齡慢慢增長,男人的選擇伴侶的條件也隨之改變...
    巨梨App閱讀 307評論 0 0
  • 我現(xiàn)在是一名大二的普通本科生。大學(xué)才兩年,我發(fā)現(xiàn)我已經(jīng)完全變成了另外一個人。 以前在高中,尤其是在高三的時候,我很...
    了不起的Kingdom閱讀 2,600評論 11 51
  • 轉(zhuǎn)眼在家休息已有半月,倒覺得年把有矣,每日來不用為起早貪黑擔(dān)心,也不必考慮風(fēng)餐露宿,每日里吃不愁穿不愁,被...
    舍我其誰也閱讀 117評論 0 1

友情鏈接更多精彩內(nèi)容