亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

黑馬程序員【TreeSet集合】

2019-11-15 00:19:45
字體:
來源:轉載
供稿:網友
黑馬程序員【TreeSet集合】

------- android培訓、java培訓、期待與您交流! ----------

TreeSet集合

TreeSet集合是一個依靠TreeMap實現的有序集合,內部存儲元素是自動按照自然排序進行排列,所以如果想要保留存儲時的順序,那么就不建議使用TreeSet。

TreeSet繼承了Set的特性,也就是不允許有重復元素,他會通過compareTo方法對所有元素進行比較,此方法認為相等的元素就是相同元素。并且TreeSet存儲元素的方式是根據二叉樹的形式,這樣在一定程度上提高了效率,下面我們用一張簡單的圖展示一下TreeSet的存儲原理:

這就是TreeSet存儲元素的基本原理,下面我們用代碼驗證一下元素的值是否是按我們所說的排列:

    public static void main(String[] args) {        // TODO Auto-generated method stub        TreeSet set = new TreeSet();        set.add(24);        set.add(30);        set.add(12);        set.add(16);        set.add(24);        for (Iterator iterator = set.iterator(); iterator.hasNext();) {            System.out.PRintln(iterator.next());                    }    }

好了,程序運行的結果和我們所說的是一樣的,按照自然排序的方法進行排列,這樣直接放入數字或字符串的排列很容易,那么如果我們在集合中存儲的是一個對象呢?我們先來看一段代碼:

public static void main(String[] args) {        TreeSet<Student> set = new TreeSet<Student>();        set.add(new Student("張三",20));        set.add(new Student("李四",19));        set.add(new Student("王五",23));        set.add(new Student("啊啊",16));        set.add(new Student("趙六",25));       for(Iterator<Student> it = set.iterator();it.hasNext();){           Student stu = (Student)it.next();           System.out.println(stu.getName()+stu.getAge());       }    }

如果直接運行這段代碼,我們會發現他報出了一個Student cannot be cast to java.lang.Comparable的錯誤,也就是說Student類不能比較值,我們知道數字可以比較大小,字母或漢字也可以根據一定順序排列先后,可是如果你直接給TreeSet一個類,他就蒙了,他會很疑惑你到底讓他比較什么呢。那么我們就需要通過自己手動給他一個比較方案,也就是讓Student類實現Comparable接口中的compareTo方法,這個方法的返回值類型是一個int類型,通過查看API我們可以發現如果該方法返回0,就是值相同,如果返回-1就是小于,如果返回的是一個正整數,就是大于,好了我們知道了他的比較原理,現在就可以輕松的實現這個方法了。

class Student implements Comparable{    private String name;    private int age;    public Student(String name,int age){        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    @Override    public int compareTo(Object o) {        if(!(o instanceof Student)){            throw new RuntimeErrorException(null, "不是學生對象!");        }        Student stu = (Student)o;        if(stu.getAge()>this.age){            return 1;        }else if(stu.getAge()<this.age){            return -1;        }else{            return this.name.compareTo(stu.getName());        }    }}

這樣就實現了一個通過年齡排序的方法,并且如果年齡相同,會按照姓名的先后排序。compareTo的Object參數表示的是集合中的下一個元素,需要先通過轉換再進行比較,如果不是相同類,那么拋出異常。

在上面我們說到TreeSet集合會通過compareTo方法進行比較,那么在我們這段程序中,如果有相同姓名和年齡的Student那么就不會添加到集合中。

下面我們再考慮一種場景,比如在公司中上面這段代碼別人已經寫好了,而我們又需要另一種排序方式,比如按姓名排序,那么怎么辦呢?我們總不能去修改別人寫好的代碼吧,這時候我們就需要通過實現Comparator接口來實現compare方法,再將這個實現類通過構造函數傳遞給TreeSet就OK了,要注意的是compare方法的返回值依舊是int,他的兩個參數都是Object類型,分別代表了當前元素和后一個元素。

class Comp implements Comparator<Student>{    @Override    public int compare(Student o1, Student o2) {        return o1.getName().compareTo(o2.getName());    }}//在main方法中    TreeSet<Student> set = new TreeSet<Student>(new Comp());

這樣就實現了自定義的排序方法。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区中文字幕| 日韩在线中文视频| 亚洲天堂av电影| 91欧美精品成人综合在线观看| 日韩高清电影免费观看完整版| 人妖精品videosex性欧美| 亚洲电影免费观看高清完整版在线观看| 91精品国产色综合| 国产日韩av在线播放| 亚洲第一黄色网| 欧美日韩福利电影| 成人激情电影一区二区| 91在线视频成人| 国产色婷婷国产综合在线理论片a| 国产精品免费电影| 91精品视频一区| 中文国产亚洲喷潮| 在线视频国产日韩| 国产福利精品av综合导导航| 久久精品久久久久| 亚洲成avwww人| 国产主播欧美精品| 久久精品免费电影| 欧美电影在线观看完整版| 色综合久久88色综合天天看泰| 久久精品视频99| 亚洲自拍欧美色图| 成人免费视频在线观看超级碰| 91精品视频在线免费观看| 91九色视频导航| 亚洲福利在线视频| 欧美亚洲成人精品| 亚洲日本中文字幕免费在线不卡| 俺去了亚洲欧美日韩| 亚洲无亚洲人成网站77777| 欧美高清性猛交| 91系列在线播放| 日韩精品日韩在线观看| 操91在线视频| 亚洲一级一级97网| 亚洲人成毛片在线播放| 日韩电影免费观看中文字幕| 国产亚洲a∨片在线观看| 国产综合在线看| 国产91精品久久久久| 久久免费视频在线观看| 亚洲色图在线观看| 国产精品免费网站| 美女视频久久黄| 色先锋资源久久综合5566| 欧美老女人性视频| 欧美大荫蒂xxx| 亚洲精品美女久久久久| 国产成人免费av| 亚洲国产精品成人一区二区| 国产精品久久久久久av福利软件| 亚洲欧美激情四射在线日| 国产亚洲成av人片在线观看桃| 亚洲色图国产精品| 国产精品99久久久久久人| 精品日本高清在线播放| 欧美成人网在线| 国产成人精品久久久| 国产精品盗摄久久久| 91chinesevideo永久地址| 久久国产精彩视频| 亚洲高清一区二| 久久中文字幕在线| 7777精品视频| 欧美视频在线观看 亚洲欧| 日本午夜精品理论片a级appf发布| 亚洲国内精品视频| 亚洲精品国产精品国自产观看浪潮| 亚洲一区二区精品| 精品亚洲一区二区三区在线观看| 日韩免费在线视频| 国产欧美精品久久久| 久久精品青青大伊人av| 国产成人aa精品一区在线播放| 亚洲国产中文字幕在线观看| 亚洲欧美制服综合另类| 久久久久久久国产精品视频| 国产精品久久久久久搜索| 日韩av在线直播| 国产一区二区三区高清在线观看| 中文字幕亚洲自拍| 欧美国产高跟鞋裸体秀xxxhd| 98午夜经典影视| 欧美日韩在线视频一区二区| 国产精品91久久久| 亚洲变态欧美另类捆绑| 精品久久久免费| 一本色道久久综合狠狠躁篇的优点| 热久久这里只有| 亚洲一区二区三区成人在线视频精品| 日韩大陆欧美高清视频区| 国产成人短视频| 国产噜噜噜噜久久久久久久久| 久久人人爽人人爽人人片av高请| 色噜噜亚洲精品中文字幕| 在线丨暗呦小u女国产精品| 尤物tv国产一区| 欧洲永久精品大片ww免费漫画| 日av在线播放中文不卡| 国产亚洲精品美女| 欧美猛交免费看| 亚洲欧美精品中文字幕在线| 国产黑人绿帽在线第一区| 青青久久av北条麻妃海外网| 亚洲激情视频在线观看| 狠狠躁夜夜躁人人躁婷婷91| 国产极品精品在线观看| 日本电影亚洲天堂| 日韩亚洲欧美中文高清在线| 精品无人区太爽高潮在线播放| 午夜精品久久久99热福利| 亚洲社区在线观看| 亚洲男人天堂视频| 欧美人与物videos| 欧美电影免费播放| 亚洲欧美另类在线观看| 粉嫩老牛aⅴ一区二区三区| 国产精品爽黄69天堂a| 欧美一区二区三区艳史| 亚洲国产古装精品网站| 不卡av在线网站| 国产精品久久久久久中文字| 亚洲国产精品一区二区久| 亚洲欧美日韩中文在线制服| 性欧美xxxx交| 亚洲黄色av女优在线观看| 欧美日韩中文字幕在线| 26uuu久久噜噜噜噜| www日韩中文字幕在线看| 成人xxxx视频| 亚洲一区二区国产| 久久国产天堂福利天堂| 久久免费在线观看| 日韩有码在线视频| 92裸体在线视频网站| 国产精品久久久久久亚洲调教| 国产精品高潮在线| 日韩欧美综合在线视频| 九色91av视频| 亚洲人成毛片在线播放| 久久精品91久久香蕉加勒比| 欧美日韩在线观看视频小说| 日韩精品一区二区视频| 91久久国产婷婷一区二区| 精品日韩美女的视频高清| 欧美在线视频导航| 57pao精品| 欧美电影免费观看网站| 欧美日韩国产在线看| 亚洲精品日韩丝袜精品| 亚洲人成电影在线| 久久久久国色av免费观看性色| 亚洲第一中文字幕在线观看| 国产精品老女人视频| 久久视频在线视频| 一本色道久久88综合日韩精品| 欧美壮男野外gaytube| 亚洲精品福利资源站| 国产精品久久久久久久久久久久久|