java list sort(Java的List怎么排序啊)

2024-07-01 16:45:15 73

java list sort(Java的List怎么排序啊)

本文目录

Java的List怎么排序啊


用Collections.sort就可以排序,
里面的排序是默认的按自然顺序排列
也就是1,2,3,4这种
参数要求实现了Comparable的数据才能排序,
如果你自己写的类,你就要实现Comparable接口,然后在接口里面自动生成的方法里面
指定排序方法,一般的String Inteneger类都是实现了这个接口的 不用自己操作的。
你可以取看源代码

java 怎么将List里面数据排序


学生实体类,包含姓名和年龄属性,

比较时先按姓名升序排序,如果姓名相同则按年龄升序排序。

第一种:实体类自己实现比较

(实现comparable接口:public interface Comparable《T》 ,里面就一个方法声明:public int compareTo(T o); )

然后利用List类的sort(Comparator《? super E》 c)方法或java.util.Collections工具类的sort(List《T》 list) (其实里面就一句:list.sort(null); )进行排序:

结果:

第二种:借助比较器进行排序。

示例代码:

比较器java.util.Comparator类是一个接口(public interface Comparator《T》 ),包含int compare(T o1, T o2);等方法:

我们的比较器要实现该接口并实现compare方法:

比较的时候可以利用List的sort(Comparator《? super E》 c)方法(或者java.util.Collections工具类的sort(List《T》 list, Comparator《? super T》 c)方法)进行排序。

结果跟第一种方法一样:


java arraylist 的sort怎么用


在排序中,最重要的是自己实现自己的比较的行数,即是implements Comparator
实现方法 public int compare(Object o1, Object o2) 最为重要..
举个例子:
package book.arrayset;
import java.util.Comparator;
/**
* 整数比较器,将整数按降序排列
*/
class MyIntComparator implements Comparator{
/**
* o1比o2大,返回-1;o1比o2小,返回1。
*/
public int compare(Object o1, Object o2) {
int i1 = ((Integer)o1).intValue();
int i2 = ((Integer)o2).intValue();
if (i1 《 i2){
return 1;
}
if (i1 》 i2){
return -1;
}
return 0;
}
}
//上面的为比较的函数实现,下面真正的添加数据,
//通过调用上面的比较函数实现自定义排序的功能
package book.arrayset;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* 对List中的元素排序
*/
public class SortList {
public static void output(List list){
if (list == null){
return;
}
for (int i=0; i《list.size(); i++){
System.out.print(list.get(i).toString() + “ “);
}
System.out.println();
}
public static void main(String args) {
List list = new ArrayList();
list.add(new Integer(5));
list.add(new Integer(8));
list.add(new Integer(1));
list.add(new Integer(3));
list.add(new Integer(2));
list.add(new Double(3.1));
System.out.println(“list开始状态“);
SortList.output(list);
//Collections.sort方法将用默认比较器排列list的元素
Collections.sort(list);
System.out.println(“list被默认比较器排序后的状态“);
SortList.output(list);
//下面将list的元素按降序排列
Collections.sort(list, new MyIntComparator());
System.out.println(“list被自定义比较器排序后的状态“);
SortList.output(list);
//因此,对于任意自定义类的对象,当保存在集合类容器中后,如果需要对它们进行排序,
//需要自己提供适应于自定义类的比较器,自定义比较器必须实现Comparator接口。
//然后采用Collections.sort(list, comparator);方法对容器进行排序。
}
}

JAVA中list排序问题


分不多,不过正好我研究了这里,也算给自己做个总结:
我为了方便解释、写了一个测试类
/** test for reflex */
public class Model {
private String name;
private String content;

public Model(){
this.name = “my name“;
this.content = “a long text“;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String getContent() {
return content;
}
//测试
public void test() throws Exception{
Model model = new Model();
Method m1 = model.getClass().getMethod(“getName“, null);
System.out.println(m1.invoke(model, null));
}
public static void main(String args){
try {
new Model().test(“getName“);
} catch (Exception e) {
e.printStackTrace();
}
}
}
首先调用test,传递一个method过去;
通过反射机制(这里用到了getMethod、invoke,我比较喜欢getField)、获取到m1对象的getName方法,getMethod第一个参数为方法名、第二个是给这个method的参数的类型,
If parameterTypes is null, it is treated as if it were an empty array,如果为null,表示没有参数;(即 getName()方法);
然后在通过 invoke 注入参数;第一个是相应对象的引用、第二个是参数值(刚刚的是类型,现在才是值);
If the underlying method is static, then the specified obj argument is ignored. It may be null,也就是说static的方法第一个参数是null;
我们要调用的是getName(),那么就是 m1.invoke(model,null)了;
执行结果为:my name ;相当于调用了getName()方法.
绕了一圈也就是 model.getName() == model.getClass().getMethod(“getName“,null).invoke(model,null);
对于有参数的,调整为
public void test(String method) throws Exception{
Model model = new Model();
Method m1 = model.getClass().getMethod(method, String.class);
m1.invoke(model, “can you“);
System.out.println(model.getName());
}
结果:can you
接下来上边的题目就简单了,
public void Sort(List《E》 list, final String method, final String sort){
这里给出了method,接下来是一个内部类的处理;自定义一个comparator,
Method m1 = ((E) a).getClass().getMethod(method, null);
这里就是获取method方法,他没有参数。
m1.invoke(((E)a), null).toString()
这里是得到对象a调用方法method之后的返回值。
ret = m1.invoke(((E)a), null).toString().compareTo(m2.invoke(((E)b), null).toString());
而这里就是比较两个对象method方法的返回值
将ret交给sort进行排序;
就像3楼说的、真正排序的是sort方法,下面的只是对一个类中某个方法的返回值进行比较

java list 排序


import java.util.ArrayList;
import java.util.List;
public class App {
public static void main(String args) {

List《Integer》 list = new ArrayList《》();
list.add(85);
list.add(35);
list.add(20);
list.add(60);
list.add(54);

list.sort((x, y) -》 Integer.compare(x, y));

list.forEach(System.out::println);
}
}

java怎么对list进行排序


1,使用Comparator 接口
Student类 结构如下:(省略getter,setter方法)
public class Student {
/***
* 姓名
*/
private String name;
private int age;
private String address;
/***
* 考试得分
*/
private int score;
//省略getter,setter方法
@Override
public String toString() {
return “Student [name=“ + name + “, age=“ + age + “, score=“ + score
+ “]“;
}
}
测试方法:
@Test
public void test_ListComparator(){
List《Student》students=new ArrayList《Student》();
Student stu=null;
stu=new Student();
stu.setName(“whuang“);
stu.setAge(12);
stu.setScore(80);
students.add(stu);
stu=new Student();
stu.setName(“rong“);
stu.setAge(11);
stu.setScore(90);
students.add(stu);
stu=new Student();
stu.setName(“zhu“);
stu.setAge(15);
stu.setScore(100);
students.add(stu);
Collections.sort(students,new SystemHWUtil. ListComparator(true,“age“));
System.out.println(students);
}
运行结果:
[Student [name=rong, age=11, score=90], Student [name=whuang, age=12, score=80], Student [name=zhu, age=15, score=100]]
核心类:
public static class ListComparator implements Comparator{
/***
* 是否转化为Int之后再比较
*/
private boolean isConvertInteger;
/***
* 对哪个列进行排序
*/
private String comparedProperty;
public ListComparator(boolean isConvertInteger,String comparedProperty) {
super();
this.isConvertInteger = isConvertInteger;
this.comparedProperty=comparedProperty;
}
public int compare(Object o1, Object o2) {
if(null!=o1&&null!=o2)
{
try {
Object obj1=ReflectHWUtils.getObjectValue(o1, comparedProperty);
Object obj2=ReflectHWUtils.getObjectValue(o2, comparedProperty);
if(isConvertInteger){
int num1;
int num2;
if(obj1 instanceof Integer){
num1=(Integer)obj1;
num2=(Integer)obj2;
}else{
num1=Integer.parseInt(obj1.toString());
num2=Integer.parseInt(obj2.toString());
}
if(num1》num2){
return 1;
}else if(num1《num2){
return -1;
}else{
return 0;
}
}else{
return obj1.toString().compareTo(obj2.toString());
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return 0/*等于*/;
}
}
2,可以指定是升序还是降序
实例:
@Test
public void test_ListComparator(){
List《Student》students=new ArrayList《Student》();
Student stu=null;
stu=new Student();
stu.setName(“whuang“);
stu.setAge(12);
stu.setScore(80);
students.add(stu);
stu=new Student();
stu.setName(“rong“);
stu.setAge(11);
stu.setScore(90);
students.add(stu);
stu=new Student();
stu.setName(“zhu“);
stu.setAge(15);
stu.setScore(100);
students.add(stu);
SortList《Student》 sortList = new SortList《Student》();
sortList.Sort(students, “getAge“, “asc“);
System.out.println(students);
}
注意:sortList.Sort 的第二个参数是方法名,不是成员变量名.
核心代码
package com.common.util;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class SortList《E》 {
public void Sort(List《E》 list, final String method, final String sort) {
Collections.sort(list, new Comparator() {
public int compare(Object a, Object b) {
int ret = 0;
try {
Method m1 = ((E) a).getClass().getMethod(method, null);
Method m2 = ((E) b).getClass().getMethod(method, null);
if (sort != null && “desc“.equals(sort))// 倒序
ret = m2.invoke(((E) b), null).toString()
.compareTo(m1.invoke(((E) a), null).toString());
else
// 正序
ret = m1.invoke(((E) a), null).toString()
.compareTo(m2.invoke(((E) b), null).toString());
} catch (NoSuchMethodException ne) {
System.out.println(ne);
} catch (IllegalAccessException ie) {
System.out.println(ie);
} catch (InvocationTargetException it) {
System.out.println(it);
}
return ret;
}
});
}
}

Java里面List排序


摘自:http://www.blogjava.net/zygcs/archive/2008/01/17/176032.html
//一个POJO例子
class User {
String name;
String age;

public User(String name,String age){
this.name=name;
this.age=age;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//具体的比较类,实现Comparator接口
import java.util.Comparator;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
public class ComparatorUser implements Comparator{
public int compare(Object arg0, Object arg1) {
User user0=(User)arg0;
User user1=(User)arg1;
//首先比较年龄,如果年龄相同,则比较名字
int flag=user0.getAge().compareTo(user1.getAge());
if(flag==0){
return user0.getName().compareTo(user1.getName());
}else{
return flag;
}
}

}
//测试类
public class SortTest {

public static void main(String args){
List userlist=new ArrayList();
userlist.add(new User(“dd“,“4“));
userlist.add(new User(“aa“,“1“));
userlist.add(new User(“ee“,“5“));
userlist.add(new User(“bb“,“2“));
userlist.add(new User(“ff“,“5“));
userlist.add(new User(“cc“,“3“));
userlist.add(new User(“gg“,“6“));

ComparatorUser comparator=new ComparatorUser();
Collections.sort(userlist, comparator);

for (int i=0;i《userlist.size();i++){
User user_temp=(User)userlist.get(i);
System.out.println(user_temp.getAge()+“,“+user_temp.getName());
}

}
}
//首先年龄排序,如果年龄相同,则按名字排序
结果:
1, aa
2, bb
3, cc
4, dd
5, ee //注意:同样是5岁的人,则比较名字(ee,ff),然后排序
5, ff
6, gg

Java List提供的默认排序方法sort()用的是什么排序策略


你好,很高兴回答你的问题。
List只是个接口,sort方法具体是怎么排序的是在具体的实现类中的。
不同的实现类排序实现是不一样的。有的同一个实现类在java的不同版本中排序的实现也可能是有差别的。
如果有帮助到你,请点击采纳。

java list sort(Java的List怎么排序啊)

本文编辑:admin

更多文章:


优慕课在线教育平台app(优慕课能检测到切屏吗)

优慕课在线教育平台app(优慕课能检测到切屏吗)

这篇文章给大家聊聊关于优慕课在线教育平台app,以及优慕课能检测到切屏吗对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录优慕课能检测到切屏吗优慕课播课视频在哪看优慕课和优慕课v8的区别优慕课和课程伴侣一样吗课程伴侣和优慕课一样

2024年6月28日 15:45

teamviewer怎么读(TeamViewer如何使用)

teamviewer怎么读(TeamViewer如何使用)

本文目录TeamViewer如何使用teamviewer无法捕捉画面怎么办及解决方法vivo手机怎么远程控制华为荣耀teamviewer是什么软件可以卸载吗如何用英语读“TeamViewer”teamviewer怎么用TeamViewer怎

2024年7月23日 10:09

plot3画点(怎样用matlab画三维三点分布图)

plot3画点(怎样用matlab画三维三点分布图)

本文目录怎样用matlab画三维三点分布图matlab三维plot3用法matlab里面怎么画点matlab plot3 如何判断点的属性,用不同的颜色画出来matlab已知三点坐标如何用plot3画出这3个点并连接起来matlab plo

2024年6月14日 22:35

2022年腾讯php招聘(腾讯公司有哪些部门哪些岗位)

2022年腾讯php招聘(腾讯公司有哪些部门哪些岗位)

本文目录腾讯公司有哪些部门哪些岗位腾讯招电子科学与技术专业的吗腾讯是怎么招聘员工的腾讯公司有哪些部门哪些岗位腾讯公司部门有:1.总公司 Head Office2.分公司 Branch Office3.行政部: Administration4

2024年6月10日 12:20

win10自带虚拟机好用吗(国产操作系统好用的是什么能和Windows10兼容成双系统吗)

win10自带虚拟机好用吗(国产操作系统好用的是什么能和Windows10兼容成双系统吗)

本文目录国产操作系统好用的是什么能和Windows10兼容成双系统吗在Win10上跑虚拟机,用VBox好还是VMware好或者其他的国产操作系统好用的是什么能和Windows10兼容成双系统吗目前我所知道的国产操作系统有2个,分别是优麒麟,

2024年7月16日 11:43

编程语言总共哪几种分别是用来干什么的!?Java语言有哪些特点

编程语言总共哪几种分别是用来干什么的!?Java语言有哪些特点

本文目录编程语言总共哪几种分别是用来干什么的!Java语言有哪些特点Java到底是一门怎样的编程语言什么叫做Java语言JAVA语言介绍是什么为什么人工智能岗位有些招聘C\u002FC++,有些招聘Python到底哪门编程语言更重要你觉得哪

2024年7月1日 19:43

echarts实时动态折线图(关于echarts 使用 dataZoom 中动态配置 start、end 值出现折线图错乱问题)

echarts实时动态折线图(关于echarts 使用 dataZoom 中动态配置 start、end 值出现折线图错乱问题)

本文目录关于echarts 使用 dataZoom 中动态配置 start、end 值出现折线图错乱问题Echarts折线图显示最高最低点以及首尾两点的标注Vue-ele中echart折线图动态展示和修改Echarts折线图实现 多条折线e

2024年5月24日 13:35

编程导航网站(用什么软件制作导航网站最好)

编程导航网站(用什么软件制作导航网站最好)

本文目录用什么软件制作导航网站最好推荐一个好的编程导航网站优化了破网站的搜索功能有哪些不太出名,但是内容不错的网站用什么软件制作导航网站最好网址导航站,只要用dreamweaver就可以做的很漂亮,加上PHOTOSHOP专门处理图片的,在照

2024年7月20日 06:06

傅里叶逆变换(如何用MATLAB完成傅里叶变换和逆变换)

傅里叶逆变换(如何用MATLAB完成傅里叶变换和逆变换)

本文目录如何用MATLAB完成傅里叶变换和逆变换如何证明傅里叶逆变换傅里叶逆变换cos2ω的傅里叶逆变换怎么求傅里叶变换的概念为什么学习傅里叶变换同时要学习傅里叶逆变换如何用MATLAB完成傅里叶变换和逆变换用MATLAB进行傅里叶变换用f

2023年8月3日 03:20

js闭包的理解(大白话面试--闭包)

js闭包的理解(大白话面试--闭包)

大家好,今天小编来为大家解答以下的问题,关于js闭包的理解,大白话面试--闭包这个很多人还不知道,现在让我们一起来看看吧!本文目录大白话面试--闭包js闭包函数为什么说JS的函数都可以称为闭包js 闭包 有什么作用javascript怎么实

2024年7月22日 23:06

ios widget开发(iOS14 Widget小组件开发实践5——网络图片的加载)

ios widget开发(iOS14 Widget小组件开发实践5——网络图片的加载)

本文目录iOS14 Widget小组件开发实践5——网络图片的加载2022-04-02 -- iOS 14 widget 小组件开发【iOS14】仿网易云桌面小组件(三)iOS 14 小组件(1):WidgetExtension 创建及报错

2024年7月10日 21:37

jquery trigger(jquery怎么主动触发右键事件)

jquery trigger(jquery怎么主动触发右键事件)

本文目录jquery怎么主动触发右键事件jquery的trigger触发多次是什么原因求jquery的trigger()方法原理jquery中radio元素的trigger(“change“)不能触发的问题jquery怎么主动触发右键事件《

2024年7月16日 17:04

vim配置文件在哪里(我现在用的是mac电脑,想请教一下,在mac终端下,自带的vim的配置文件在什么地方,我为什么找不到vimrc)

vim配置文件在哪里(我现在用的是mac电脑,想请教一下,在mac终端下,自带的vim的配置文件在什么地方,我为什么找不到vimrc)

本文目录我现在用的是mac电脑,想请教一下,在mac终端下,自带的vim的配置文件在什么地方,我为什么找不到vimrclinux的vi的配置文件vi.config在哪个目录下vim 配置问题 :ctags 在windows 下怎样安装.vi

2024年7月19日 08:54

dumptruck是什么意思(翻斗车英文dumptruck)

dumptruck是什么意思(翻斗车英文dumptruck)

本文目录翻斗车英文dumptruckdump truck英语dumper truck是什么意思dump truck是什么意思有谁知道说英语国家中tipper和dump truck的区 听一个外国人说dump truck要大些翻斗车英文dum

2024年7月1日 11:56

vcl控件为什么不能多线程访问(关于DELPHI7 vcl控件TPagecontrol的疑惑)

vcl控件为什么不能多线程访问(关于DELPHI7 vcl控件TPagecontrol的疑惑)

各位老铁们好,相信很多人对vcl控件为什么不能多线程访问都不是特别的了解,因此呢,今天就来为大家分享下关于vcl控件为什么不能多线程访问以及关于DELPHI7 vcl控件TPagecontrol的疑惑的问题知识,还望可以帮助大家,解决大家的

2024年8月29日 10:10

sql怎么连接数据库(SQL数据库的表与表之间的关系怎么连接(sql表与表之间如何建立关联))

sql怎么连接数据库(SQL数据库的表与表之间的关系怎么连接(sql表与表之间如何建立关联))

大家好,如果您还对sql怎么连接数据库不太了解,没有关系,今天就由本站为大家分享sql怎么连接数据库的知识,包括SQL数据库的表与表之间的关系怎么连接(sql表与表之间如何建立关联)的问题都会给大家分析到,还望可以解决大家的问题,下面我们就

2024年7月19日 01:55

ckfinder(ckfinder 上传图片提示缺少图片地址)

ckfinder(ckfinder 上传图片提示缺少图片地址)

本文目录ckfinder 上传图片提示缺少图片地址maven怎么配置ckfinder jar包ckeditor和ckfinder各自的功能是什么ckfinder 上传图片提示缺少图片地址1,将ckeditor解压打开,打开_Samples,

2024年6月14日 01:05

occasion怎么读(occasionally; occasion ;occasional 这几个英语怎么读)

occasion怎么读(occasionally; occasion ;occasional 这几个英语怎么读)

本文目录occasionally; occasion ;occasional 这几个英语怎么读occasions是什么意思场合的英文读音occasion;occasional;occasionally 这英语怎么读这个单词咋念呢 occas

2024年7月14日 23:29

简述eclipse的作用(eclipse 是什么)

简述eclipse的作用(eclipse 是什么)

本文目录eclipse 是什么eclipse和Dreamweaver在功能上的区别eclipse workspace的作用eclipse写代码有什么好处Eclipse是干什么用的eclipse ide for java developers

2024年7月23日 20:27

前端怎么打断点调试debugger(如何正确使用Eclipse的Debugger)

前端怎么打断点调试debugger(如何正确使用Eclipse的Debugger)

大家好,前端怎么打断点调试debugger相信很多的网友都不是很明白,包括如何正确使用Eclipse的Debugger也是一样,不过没有关系,接下来就来为大家分享关于前端怎么打断点调试debugger和如何正确使用Eclipse的Debug

2024年7月24日 19:25

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1730
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1154
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1151
标签列表

热门搜索