對List集合中的元素進行排序

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

ollections對List集合中的數據進行排序

有時候需要對集合中的元素按照一定的規則進行排序,這就需要用到

Java中提供的對集合進行操作的工具類Collections,其中的sort方法

?

先看一個簡單的例子:

?

[java]?view plain?copy
  1. public?static?void?main(String[]?args)?{??
  2. ????List<Integer>?nums?=?new?ArrayList<Integer>();??
  3. ????????nums.add(3);??
  4. ????????nums.add(5);??
  5. ????????nums.add(1);??
  6. ????????nums.add(0);??
  7. ????????System.out.println(nums);??
  8. ????????Collections.sort(nums);??
  9. ????????System.out.println(nums);??
  10. }??

輸出結果:
[3, 5, 1, 0]
[0, 1, 3, 5]

稍微復雜的List里面放一個復雜的對象

?

[java]?view plain?copy
  1. package?core.java.collection.collections;??
  2. ??
  3. public?class?User?implements?Comparable<User>{??
  4. ??????
  5. ????private?int?score;??
  6. ??????
  7. ????private?int?age;??
  8. ??????
  9. ????public?User(int?score,?int?age){??
  10. ????????super();??
  11. ????????this.score?=?score;??
  12. ????????this.age?=?age;??
  13. ????}??
  14. ??
  15. ????public?int?getScore()?{??
  16. ????????return?score;??
  17. ????}??
  18. ??
  19. ????public?void?setScore(int?score)?{??
  20. ????????this.score?=?score;??
  21. ????}??
  22. ??
  23. ????public?int?getAge()?{??
  24. ????????return?age;??
  25. ????}??
  26. ??
  27. ????public?void?setAge(int?age)?{??
  28. ????????this.age?=?age;??
  29. ????}??
  30. ??
  31. ????@Override??
  32. ????public?int?compareTo(User?o)?{??
  33. ????????int?i?=?this.getAge()?-?o.getAge();//先按照年齡排序??
  34. ????????if(i?==?0){??
  35. ????????????return?this.score?-?o.getScore();//如果年齡相等了再用分數進行排序??
  36. ????????}??
  37. ????????return?i;??
  38. ????}??
  39. ??????
  40. }??
  41. ??
  42. public?static?void?main(String[]?args)?{??
  43. ????????List<User>?users?=?new?ArrayList<User>();??
  44. ????????users.add(new?User(78,?26));??
  45. ????????users.add(new?User(67,?23));??
  46. ????????users.add(new?User(34,?56));??
  47. ????????users.add(new?User(55,?23));??
  48. ????????Collections.sort(users);??
  49. ????????for(User?user?:?users){??
  50. ????????????System.out.println(user.getScore()?+?","?+?user.getAge());??
  51. ????????}??
  52. }??

輸出結果:
55,23
67,23
78,26
34,56
我們會發現sort(List<T>)方法中List中的T必須實現Comparable<T>接口,然后實現
compareTo()方法,該方法的返回值0代表相等,1表示大于,-1表示小于;為什么
在簡單例子中沒有看到實現Comparable接口呢?是因為Integer類其實自己已經實現
了Comparable接口,Java已經給我們做好了。

Collections提供的第二種排序方法sort(List<T> list, Comparator<? super T> c)
先看例子:

?

[java]?view plain?copy
  1. package?core.java.collection.collections;??
  2. ??
  3. public?class?Students?{??
  4. ??????
  5. ????private?int?age;??
  6. ????private?int?score;??
  7. ??????
  8. ????public?Students(int?age,?int?score){??
  9. ????????super();??
  10. ????????this.age?=?age;??
  11. ????????this.score?=?score;??
  12. ????}??
  13. ??????
  14. ????public?int?getAge()?{??
  15. ????????return?age;??
  16. ????}??
  17. ????public?void?setAge(int?age)?{??
  18. ????????this.age?=?age;??
  19. ????}??
  20. ????public?int?getScore()?{??
  21. ????????return?score;??
  22. ????}??
  23. ????public?void?setScore(int?score)?{??
  24. ????????this.score?=?score;??
  25. ????}??
  26. }??
  27. public?static?void?main(String[]?args)?{??
  28. ????????List<Students>?students?=?new?ArrayList<Students>();??
  29. ????????students.add(new?Students(23,?100));??
  30. ????????students.add(new?Students(27,?98));??
  31. ????????students.add(new?Students(29,?99));??
  32. ????????students.add(new?Students(29,?98));??
  33. ????????students.add(new?Students(22,?89));??
  34. ????????Collections.sort(students,?new?Comparator<Students>()?{??
  35. ??
  36. ????????????@Override??
  37. ????????????public?int?compare(Students?o1,?Students?o2)?{??
  38. ????????????????int?i?=?o1.getScore()?-?o2.getScore();??
  39. ????????????????if(i?==?0){??
  40. ????????????????????return?o1.getAge()?-?o2.getAge();??
  41. ????????????????}??
  42. ????????????????return?i;??
  43. ????????????}??
  44. ????????});??
  45. ????????for(Students?stu?:?students){??
  46. ????????????System.out.println("score:"?+?stu.getScore()?+?":age"?+?stu.getAge());??
  47. ????????}??
  48. }??

輸出結果:
score:89:age22
score:98:age27
score:98:age29
score:99:age29
score:100:age23

從上面的例子我們可以看出Students類沒有實現Comparable<T>接口,只是在sort()方法
中多傳入一個參數,只不過該參數是一個接口我們需要實現其compare方法。

以上就是是Java中Colelctions工具類為我們提供的兩種集合排序方法。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449796.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449796.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449796.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Jmeter----5.1 設置中文

注意&#xff1a;JMeter5需要Java8 以上&#xff0c;本文環境是Win7 64位 設置永久默認漢化&#xff1a;在Jmeter的安裝目錄下的bin目錄中找到 jmeter.properties這個文件&#xff0c;用文本編輯器打開。在#languageen下面插入一行languagezh_CN 這樣&#xff0c;再次打開Jmete…

pandas計算移動平均值

本人今天遇到遇到一個任務&#xff0c;計算同月份合約當天各合約總持倉量的移動平均值。立刻寫下了這個函數&#xff1a; group df.groupby([合約系列,date]) f pd.DataFrame(group[持倉量].sum().rolling(20).mean()) 上交后&#xff0c;提出要求&#xff0c;不行&#xff…

一個優美的架構需要考慮的幾個問題

隨著公司的架構逐步發展&#xff0c;越來越多的問題被提出來&#xff0c;也發現一個良好的技術架構需要考慮的問題 1 架構的可擴展性 這里面又包括以下幾個方面 水平垂直可拆分服務無狀態數據可緩存可異步處理&#xff08;提高性能&#xff09;可復制&#xff08;提高效率&…

HSTS的來龍去脈

前言 安全經常說“云、管、端”&#xff0c;“管”指的是管道&#xff0c;傳輸過程中的安全。為了確保信息在網絡傳輸層的安全&#xff0c;現在很多網站都開啟了HTTPS&#xff0c;也就是HTTPTLS&#xff0c;在傳輸過程中對信息進行加密。HTTPS使用了對稱加密、非對稱加密、消息…

利用XShell上傳、下載文件(使用sz與rz命令) 超實用!

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 rz、sz 安裝方式&#xff1a;sz/rz命令安裝方式 借助XShell&#xff0c;使用linux命令sz可以很方便的將服務器上的文件下載到本地&#…

quantaxis使用docker安裝,解決了一個很奇特的問題

之前使用docker-compose pull 更新之后&#xff0c;使用docker-compose up進行安裝。出現 qaweb顯示address already in web,cmd中顯示Starting qa_web is wrong。之前一直覺得什么毛病啊&#xff0c;試了很多辦法。 比如關閉8010接口&#xff1a; netstat -ano|findstr “801…

基礎數學落后與高端人才流失

這個話題令人感到很痛苦&#xff0c;也很無奈。我本不該提起這個話題。但是&#xff0c;無窮小微積分專業網站不久即將開通&#xff0c;我不得不認真備課&#xff0c;仔細研讀 J.Keisler 的“初等微積分”電子版教材。在研究該教材內容的過程中&#xff0c;參照國內的《高等數學…

Datawhale MySQL 訓練營 Task2 查詢語句

目錄 MySQL 管理MySQL 用戶管理 參考數據庫管理SQ查詢語句1. 導入示例數據庫&#xff0c;教程 MySQL導入示例數據庫2. 查詢語句 SELECT3. 篩選語句 WHERE &#xff0c;過濾4. 分組語句 GROUP BY5. 排序語句 ORDER BY6. 函數作業總結MySQL 管理 MySQL版本 8.0.15 MySQL 用戶管理…

記錄一個相當好用的反編譯工具下載地址

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 下載地址見&#xff1a;https://download.csdn.net/download/stoneepigraph/9817144 下載后直接雙擊該程序就可以用&#xff0c;十分方便…

2021-07-09

#先引入后面可能用到的包&#xff08;package&#xff09; import pandas as pd from datetime import datetime import backtrader as bt import matplotlib.pyplot as plt %matplotlib auto #正常顯示畫圖時出現的中文和負號 from pylab import mpl mpl.rcParams[font.sans…

Patrick Wyatt:代碼沒問題 程序卻有bug?

摘要&#xff1a;相信每個程序員都遇到過“不可能的bug”&#xff0c;代碼沒有任何問題卻出錯了&#xff01;問題肯定是出在操作系統上&#xff0c;或者是工具&#xff0c;甚至是因為計算機硬件的問題&#xff1f;&#xff01;&#xff1f;當然&#xff0c;魔獸之父也不例外&am…

視差滾動(Parallax Scrolling)插件補充

13. Windows Windows (github) 是一個讓你用占據整個屏幕的section來構建單面網站的插件。該插件提供給你一些回調函數&#xff0c;當新的section出現在可視區并且并且處理快照時被調用&#xff0c;所以你可以輕松的繼承它來自定義導航菜單或更多的東西。下面是一個例子&#x…

主流瀏覽器內核

IE trident Firefox Gecko Google chrome Webkit/blink Safar i Webkit Opera presto轉載于:https://www.cnblogs.com/codezhao/p/10451030.html

Quartz使用總結、Cron表達式

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Quartz可以用來做什么&#xff1f; Quartz是一個任務調度框架。比如你遇到這樣的問題 想每月25號&#xff0c;信用卡自動還款想每年4月…

股票數據庫建立

import akshare as ak import baostock as bs import pandas as pd import datetime bs.login()stk_list_place D:/stk_list.csv #股票代碼表存儲地址 stk_place D:/Data/ #股票數據存儲地址 def update_stk_list(dateNone):#獲取指定日期的指數、股票數據stock_rs bs.qu…

利用redis實現分布式鎖:加鎖與解鎖

待補充轉載于:https://www.cnblogs.com/csuliujia/p/10451462.html

MVC日期格式化,后臺使用Newtonsoft.Json序列化日期,前端使用”f”格式化日期

MVC控制器中&#xff0c;經常使用Newtonsoft.Json把對象序列化成json字符串傳遞到前端視圖。當對象中有DateTime類型的屬性時&#xff0c;前后臺如何處理才能把DateTime類型轉換成想要的格式呢&#xff1f; 有這樣的一個類具有DateTime類型屬性&#xff1a; using System; name…

多股回測(backtrader+quantstats+akshare)

導包 #引入技術指標數據 from __future__ import (absolute_import ,division,print_function,unicode_literals) import datetime #用于datetime對象操作 import os.path #用于管理路徑 import sys #用于在argvTo[0]中找到腳本名稱 import backtrader as bt #引入backt…

Cron表達式、定時任務

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Cron表達式。但這個表示式本身就夠復雜了。下面會有說明。 例子&#xff1a; cronSchedule("0 0/2 8-17 * * ?") // 每天8:0…

【轉載】ASP.NET自定義404和500錯誤頁面

在ASP.NET網站項目實際上線運行的過程中&#xff0c;有時候在運行環境下會出現400錯誤或者500錯誤&#xff0c;這些錯誤默認的頁面都不友好&#xff0c;比較簡單單調&#xff0c;其實我們可以自行設置這些錯誤所對應的頁面&#xff0c;讓這些錯誤跳轉到我們指定的路徑。此文將介…