日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java實現儲存對象并按對象某屬性排序的幾種方法示例

瀏覽:124日期:2022-09-01 10:43:26

本文實例講述了Java實現儲存對象并按對象某屬性排序的幾種方法。分享給大家供大家參考,具體如下:

在編程的時候,經常會出現對某一種類的對象們按照某屬性進行自定義的排序,比如:學生對象按照age大小排序。

有一種方法就是把age單獨提出來排好序,然后按照ages數組的順序把students重存一次。但是這樣太繁瑣了,有沒有更好的方法呢?

有滴~

第一種,可以實現邊添加邊排序,需要用到TreeSet。

第二種,用數組存放對象們,但是不需單獨取出某屬性排列好再重存,而是在原數組上用比較器重新排一次序。需要用到Arrays.sort(arr,comparator)。

第三種,用集合類中的list的子類存放對象們,然后排序。需要用到Collections.sort(list,comparator)。

以下分別討論:

一、TreeSet

創建:

序號 構造函數的說明 1 TreeSet ()

此構造函數構造空樹集,將在根據其元素的自然順序按升序排序。

2 TreeSet (集合 c)

此構造函數生成樹的集合,它包含的元素的集合 c。

3 TreeSet (比較器 comp)

此構造函數構造一個空樹集,將根據給定的比較器進行排序。

增:

boolean add(E e) 將指定的元素添加到這套,如果它已不存在。 boolean addAll(Collection<? extends E> c) 在加入這一組指定的集合中添加的所有元素。

刪:

boolean remove(Object o) 從這一組中移除指定的元素,如果它存在。 void clear() 從這一組中移除所有元素。

查:

Comparator<? super E> comparator() 返回用于排序在這集,或空元素,如果這套使用自然排序其元素的比較。 boolean contains(Object o) 如果此集合包含指定的元素,則返回true 。 boolean isEmpty() 如果此集不包含任何元素,則返回true 。 Iterator<E> iterator() 返回迭代器中這套以升序排序的元素。 int size() 在這套 (其基數) 中返回的元素的數目。

遍歷:通過迭代器遍歷。

Iterator it=treeset.iterator();while(it.hasNext()){ //操作當前結點。}

代碼實現:

TreeSet是一個有序集合,TreeSet中的元素將按照升序排列。

TreeSet存儲對象的時候, 可以排序, 其中Integer有默認排序方法, String有默認排序方法,,而自定義的類對象存儲的時候則沒有順序,需要自定義排序算法。

如果想把自定義類的對象存入TreeSet進行排序,或者對int,String對象想定義自己的排序方法,有以下兩種方法:

排序的第一種方式:

讓元素自身具備比較性。讓元素實現Comparable接口,覆蓋compareTo方法,在方法內定義比較算法, 根據大小關系, 返回正數負數或零。在使用TreeSet存儲對象的時候, add()方法內部就會自動調用compareTo()方法進行比較, 根據比較結果使用二叉樹形式進行存儲。

排序的第二種方式:

自定義比較器。 定義一個類實現Comparator接口,覆蓋compare方法。將該Comparator接口子類對象傳遞給TreeSet集合構造函數。

第一種:類定義時實現Comparable接口,定義自身的比較算法。

此處以Person類為例,把人名和年齡作為對象屬性,存放進treeset中,按照年齡的升/降序保存。

public class TreeSetTest {public static void main(String[] args) {TreeSet people=new TreeSet();people.add(new Person('小明', 20));people.add(new Person('小張', 30));people.add(new Person('小劉', 18));people.add(new Person('小林', 17));people.add(new Person('小劉', 35));Iterator it=people.iterator();while(it.hasNext()){System.out.println(it.next());}}}class Person implements Comparable{//定義類時,實現比較接口String name;int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String toString(){return '姓名:'+name+',年齡:'+age;}/*compareTo(Object o):參數是從根節點開始依次傳進來的結點,直到確定合適的位置用來安插新節點。方法返回三個值,分別對應三種動作:返回1,則繼續遞進,把新結點與下一層的結點進行比較;返回0,則該屬性值不足以決定兩結點位置區別,再定義其他屬性的比較算法來進一步比較兩對象;返回-1,則新結點優先級大于當前層,往上一層比較;*/public int compareTo(Object o) {Person curr=(Person) o;//int result = this.age<curr.age?1:(this.age==curr.age?0:-1);//降序排列:新插入結點與當前比較層結點的屬性比較,小則返回1,繼續往下一層比較int result = this.age>curr.age?1:(this.age==curr.age?0:-1);//升序排列:新插入結點與當前比較層結點的屬性比較,大則返回1,繼續往下一層比較if(result==0){result=this.name.compareTo(curr.name);//age相同時,則以姓名的字母序來排列。前面說過,int、string類型是有默認排列算法的,所以此處直接用 }return result;} }

第二種:定義Comparator接口的實現類(比較器),在類中定義對象的比較算法。在創建Treeset時把比較器對象傳進去。

public class TreeSetTest {/*** @param args the command line arguments*/public static void main(String[] args) {TreeSet people=new TreeSet(new MyComparator());//把比較器對象作為TreeSet的構造函數參數people.add(new Person('小明', 20));people.add(new Person('小張', 30));people.add(new Person('小劉', 18));people.add(new Person('小林', 17));people.add(new Person('小劉', 35));Iterator it=people.iterator();//用迭代器遍歷treesetwhile(it.hasNext()){System.out.println(it.next());}}}class Person {String name;int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String toString(){return '姓名:'+name+',年齡:'+age;}}class MyComparator implements Comparator{//實現Comparator接口,自定義比較器,實現compare方法定義比較算法/*compare(o1,o2):參數o1是待插入的結點,o2是從樹根節點逐層遍歷下來的結點,用于當前比較。方法返回三個值,分別對應三種動作:返回1,則繼續遞進,把新結點與下一層的結點進行比較;返回0,則該屬性值不足以決定兩結點位置區別,再定義其他屬性的比較算法來進一步比較兩對象;返回-1,則新結點優先級大于當前層,往上一層比較;*/public int compare(Object o1, Object o2) {Person p1=(Person)o1;Person p2=(Person)o2;int result=p1.age<p2.age?1:(p1.age==p2.age?0:-1);//降序排列//int result=p1.age<p2.age?1:(p1.age==p2.age?0:-1);//升序排列if(result==0){result=p1.name.compareTo(p2.name);}return result;}}

二、用數組存放對象,用比較器改變sort()排序方法。

數組本身有默認的排序方法,針對int、string等基本類型有默認的sort()方法。而針對類對象的排序,可以給sort()方法傳進一個比較器對象,賦予其排序的算法。

public class ArraysTest {public static void main(String[] args) {Person[] people=new Person[5];people[0]=(new Person('小明', 20));people[1]=(new Person('小張', 30));people[2]=(new Person('小劉', 18));people[3]=(new Person('小林', 17));people[4]=(new Person('小劉', 35));Arrays.sort(people,new MyCompare());//傳進來一個比較器對象,使數組按比較器定義的規則來排序for(Person i:people){System.out.println(i);}}}class Person {String name;int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String toString(){return '姓名:'+name+',年齡:'+age;}}class MyCompare implements Comparator<Person>{//定義比較器/*重寫比較方法compare(o1,o2):方法傳進來兩個對象,用兩個對象的某屬性進行對比,返回一個int。int>0,則o1排在o2后面;int<0,則o1排在o2前面;int=0,則維持原相對位置,即原來存放時o1、o2的前后地址順序。*/public int compare(Person o1, Person o2) {int result;if(o1.age>o2.age){result=1;}else if(o1.age<o2.age){result=-1;}else{result=0;}return result;}}

第三種:用list的子類:Vector、ArrayList存放對象們,調用Collections.sort(list,comparator)方法進行排序。

public class CollectionsTest {public static void main(String[] args) {Vector<Person> people=new Vector<>();//用向量保存對象//ArrayList<Person> people=new ArrayList<>()://用ArrayList保存對象。people.add(new Person('小明', 20));people.add(new Person('小張', 30));people.add(new Person('小劉', 18));people.add(new Person('小林', 17));people.add(new Person('小劉', 35));Collections.sort(people,new MyComparator());//調用方法進行排序Iterator it=people.iterator();while(it.hasNext()){System.out.println(it.next());}}}class Person {String name;int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String toString(){return '姓名:'+name+',年齡:'+age;}}class MyComparator implements Comparator<Person>{//實現Comparator接口,自定義比較器,實現compare方法定義比較算法/*compare(o1,o2):方法傳進兩個對象,根據某屬性進行比較,返回一個int值。int>0,o1排在o2后;int<0,o1排在o2前;int=0,維持原來存放時的相對位置。*/public int compare(Person p1, Person p2) {int result=p1.age<p2.age?1:(p1.age==p2.age?0:-1);//降序排列//int result=p1.age<p2.age?1:(p1.age==p2.age?0:-1);//升序排列if(result==0){result=p1.name.compareTo(p2.name);}return result;}}

更多關于java相關內容感興趣的讀者可查看本站專題:《Java面向對象程序設計入門與進階教程》、《Java數據結構與算法教程》、《Java操作DOM節點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》

希望本文所述對大家java程序設計有所幫助。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久中文欧美| 日韩av网站在线免费观看| 九九久久国产| 美女视频网站久久| 国产a久久精品一区二区三区| 久久精品午夜| 日韩一区自拍| 欧美日韩激情| 99国产精品视频免费观看一公开| 五月婷婷亚洲| 免播放器亚洲| 日本aⅴ亚洲精品中文乱码| 欧美亚洲一区二区三区| 综合一区在线| 欧美天堂一区| 捆绑调教美女网站视频一区| 国内精品美女在线观看| 日韩国产欧美| 在线视频精品| 日本午夜精品| 狠狠躁少妇一区二区三区| 欧美日韩精品在线一区| 亚洲一本视频| 亚洲永久精品唐人导航网址| 欧美一级二级三级视频| 丁香婷婷久久| 激情欧美日韩一区| 天海翼亚洲一区二区三区| 国产日韩欧美一区二区三区 | 日韩区欧美区| 国产福利资源一区| 日韩不卡免费高清视频| 91久久久久| 欧美日韩中出| 日韩国产在线| 国产精品嫩草99av在线| 香蕉久久一区| 97精品国产福利一区二区三区| 欧美a级一区| 日韩va亚洲va欧美va久久| 国产va在线视频| 午夜在线精品偷拍| 老牛国内精品亚洲成av人片| 在线日韩av| 国产日韩欧美一区二区三区在线观看| 日韩一区电影| 日本一区二区三区视频在线看| 国产一区丝袜| 视频一区视频二区中文| 精品国产精品久久一区免费式 | 自拍自偷一区二区三区| 久久香蕉网站| 久久亚洲视频| 国产不卡精品| 中文字幕免费一区二区| 日韩精品不卡一区二区| 亚洲理论在线| 国产精品亚洲一区二区三区在线观看| 亚洲精品护士| 亚洲精品在线影院| 欧美精品国产一区| 黄色成人91| 欧美日韩亚洲一区三区| 欧美不卡在线| 精品日本视频| 免费人成黄页网站在线一区二区 | 四虎国产精品免费观看| 亚洲tv在线| 久久三级视频| 欧美激情福利| 日韩三级精品| 999国产精品视频| 国产激情久久| 亚洲一二av| av一区二区高清| 精品视频在线你懂得| 蜜桃久久av一区| 91精品韩国| 久久精品国产精品亚洲毛片| 亚洲va久久| 欧美日韩三区| 91av亚洲| 精品香蕉视频| 国产精品亚洲一区二区在线观看| 亚洲免费在线| 欧美成人综合| 蜜桃av在线播放| 麻豆精品视频在线观看视频| 综合欧美亚洲| 黄页网站一区| 久久久久.com| 精品国产精品久久一区免费式| 亚洲精品亚洲人成在线观看| 美女毛片一区二区三区四区| 久久影院午夜精品| 麻豆国产一区| 国产麻豆精品| 日本免费一区二区视频| 亚洲主播在线| 亚洲黄色在线| 亚洲二区视频| 久久久久久久久久久9不雅视频| 欧美1区二区| 国产精品亚洲二区| 久久狠狠亚洲综合| 欧美日韩午夜| 亚洲综合福利| 一区二区三区四区在线观看国产日韩| 国产精品99一区二区| 成人精品亚洲| 久久精品青草| 国产综合亚洲精品一区二| 久久精品1区| 色爱av综合网| 久久国产中文字幕| 久久精品国产亚洲夜色av网站| 日韩国产欧美| 99精品国产一区二区三区| 国产91久久精品一区二区| 欧美日一区二区| 婷婷六月综合| 婷婷成人在线| 欧美国产91| 9国产精品视频| 丝袜美腿一区二区三区| 在线精品亚洲| 日本va欧美va瓶| 日韩福利在线观看| 国产日产精品_国产精品毛片| 国产欧美日韩一区二区三区四区| 国产欧美日韩一区二区三区四区| 亚洲网址在线观看| 日韩精品久久理论片| 国产日韩高清一区二区三区在线| 国产精品欧美三级在线观看 | 免费观看久久av| 波多野结衣一区| 一区免费在线| 亚洲精品少妇| 国产欧美日韩视频在线| 国产精品久久免费视频| 日本久久综合| 在线日韩电影| 视频一区二区三区入口| 日韩欧美另类中文字幕| 国产精品久久免费视频| 久久一区欧美| 亚洲a在线视频| 模特精品在线| 麻豆一区二区99久久久久| 91视频一区| 中文日韩欧美| 久久国产婷婷国产香蕉| 91亚洲国产高清| 免费国产自久久久久三四区久久| 中文字幕一区二区三区日韩精品| 国产精品视频3p| 日韩在线高清| 男女男精品视频网| 美女性感视频久久| 国产一区日韩一区| 色综合视频一区二区三区日韩 | 日韩av网站在线免费观看| 久久这里只有| 欧美~级网站不卡| 亚洲天堂日韩在线| 国产精品a久久久久| 亚洲视频综合| 天堂av一区| 伊人久久国产| 亚洲精品进入| 日韩欧美中文| 日韩精品中文字幕吗一区二区 | 少妇精品久久久一区二区| 精品一区二区三区免费看 | 日韩亚洲国产欧美| 国产精品天天看天天狠| 国内精品福利| 国产精品亚洲产品| 久久精品不卡| 日韩精品亚洲专区| 日韩精品不卡一区二区| 中文字幕免费一区二区| 91一区二区| 日韩精品成人在线观看| 欧洲一级精品| 久久精品99国产精品| 91精品久久久久久久久久不卡| 日韩精品电影一区亚洲| 久久久国产精品一区二区中文| 日韩中文av| 99久久www免费| 久久国产三级| 日韩视频二区| 久久午夜影院| 亚洲精品美女91| 欧美搞黄网站| 精品九九在线| 日韩精品视频在线看| 亚洲精品中文字幕乱码|