日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(转载)java list排序

發布時間:2024/4/13 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (转载)java list排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、簡介                                

這個和數組的排序又不一樣了。

其實Java針對數組和List的排序都有實現,對數組而言,你可以直接使用Arrays.sort對于List和Vector而言,你可以使用Collections.sort方法。

Java API針對集合類型的排序提供了2個方法:

java.util.Collections.sort(java.util.List)java.util.Collections.sort(java.util.List, java.util.Comparator)

如果集合里面的元素都是相同類型的,并且實現了Comparable接口,那么可以直接調用第一個方法。

如果你有其它的排序的想法,比如你不想按照自然排序進行,還可以傳一個Comparator過去,比如反向。

元素不相同的情況比較復雜,可以暫時不用考慮。

?

2、通過實現Comparable接口來實現list的排序    

假如現在我們有一個Person類的list集合,要讓其按照一個Order屬性進行排序,我們可以讓Person類實現Comparable接口,重寫其CompareTo方法即可。具體實現如下:

1)、Person實體類

public class Person implements Comparable<Person> {private String name;private Integer order;/*** @return the name*/public String getName() {return name;}/*** @param name* the name to set*/public void setName(String name) {this.name = name;}/*** @return the order*/public Integer getOrder() {return order;}/*** @param order* the order to set*/public void setOrder(Integer order) {this.order = order;}@Overridepublic int compareTo(Person arg0) {return this.getOrder().compareTo(arg0.getOrder()); //這里定義你排序的規則。 }}

通過重寫Comparable接口的compareTo方法,可以讓程序按照我們想要的排列方式進行排序,如:這里我讓Person按照order屬性升序排序。

2)、測試類

public static void main(String[] args) {//初始化數據List<Person> listA = new ArrayList<Person>();Person p1 = new Person();Person p2 = new Person();Person p3 = new Person();p1.setName("name1");p1.setOrder(1);p2.setName("name2");p2.setOrder(2);p3.setName("name3");p3.setOrder(3);listA.add(p2);listA.add(p1);listA.add(p3);//排序 Collections.sort(listA);//打印排序后的Personfor (Person p : listA) {System.out.println(p.getName());} }

3)、結果:

name1 name2 name3

3、通過重載Collections.sort方法                    

直接重載java.util.Collections.sort(java.util.List, java.util.Comparator)?方法。可以靈活的修改我們排序的方式,具體實現如下:

1)、Person實體類

  和上面的類相同,但沒實現Comparable接口

public class Person {private String name;private Integer order;/*** @return the name*/public String getName() {return name;}/*** @param name* the name to set*/public void setName(String name) {this.name = name;}/*** @return the order*/public Integer getOrder() {return order;}/*** @param order* the order to set*/public void setOrder(Integer order) {this.order = order;}}

2)、測試類

public static void main(String[] args) {List<Person> listA = new ArrayList<Person>();Person p1 = new Person();Person p2 = new Person();Person p3 = new Person();p1.setName("name1");p1.setOrder(1);p2.setName("name2");p2.setOrder(2);p3.setName("name3");p3.setOrder(3);listA.add(p2);listA.add(p1);listA.add(p3);//直接在這里添加我們的排序規則Collections.sort(listA, new Comparator<Person>() {public int compare(Person arg0, Person arg1) {return arg0.getOrder().compareTo(arg1.getOrder());}});for (Person p : listA) {System.out.println(p.getName());}}

從上面看到,直接在Conllections.sort()方法中重寫了一個Comparator接口,可以在不同的地方使用Person集合的不同排序方法。如上面還是按照Person的order屬性升序排列,我只要改寫該方法,就可以在其他地方按照其他的規則對我的list集合進行排序,但是這樣子代碼看起來會比前面的那種方式繁瑣。

3)、結果

name1 name2 name3

  致謝:感謝您的閱讀!

?

?

4.擴展:按照兩個字段排序      

比如先按照名字排序,如果名字相同,按照小名排序;例子如下:

package com.cy.model;import java.util.ArrayList; import java.util.Collections; import java.util.List;public class Student implements Comparable<Student>{private int id;private String name; //名字private String sname; //小名public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}public Student(int id, String name, String sname) {super();this.id = id;this.name = name;this.sname = sname;}@Overridepublic String toString() {return "Student [id=" + id + ", name=" + name + ", sname=" + sname+ "]";}/*** student類的排序方法* 先按照name排序,如果name相同按照sname排序*/@Overridepublic int compareTo(Student o) {int r1 = this.getName().compareToIgnoreCase(o.getName());int r2 = this.getSname().compareToIgnoreCase(o.getSname());return r1>0?1:r1<0?-1:r2>0?1:r2<0?-1:0;}//測試程序public static void main(String[] args) {Student s1 = new Student(2,"zhangsan","z");Student s2 = new Student(1, "zhangsan","b");Student s3 = new Student(3, "zhangsan","y");Student s4 = new Student(0, "lisi","s");Student s5 = new Student(5, "wangwu","w");Student s6 = new Student(10, "wangwu","xx");Student s7 = new Student(8, "aming","ming");List<Student> list = new ArrayList<Student>();list.add(s1);list.add(s2);list.add(s3);list.add(s4);list.add(s5);list.add(s6);list.add(s7);Collections.sort(list);for(Student s : list){System.out.println(s);}}}

打印:

Student [id=8, name=aming, sname=ming] Student [id=0, name=lisi, sname=s] Student [id=5, name=wangwu, sname=w] Student [id=10, name=wangwu, sname=xx] Student [id=1, name=zhangsan, sname=b] Student [id=3, name=zhangsan, sname=y] Student [id=2, name=zhangsan, sname=z]

?

轉載于:https://www.cnblogs.com/tenWood/p/9023090.html

總結

以上是生活随笔為你收集整理的(转载)java list排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。