「java排序list」java排序例题

博主:adminadmin 2022-12-26 07:27:10 118

今天给各位分享java排序list的知识,其中也会对java排序例题进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Java的List怎么排序啊?

用Collections.sort就可以排序,

里面的排序是默认的按自然顺序排列

也就是1,2,3,4这种

参数要求实现了Comparable的数据才能排序,

如果你自己写的类,你就要实现Comparable接口,然后在接口里面自动生成的方法里面

指定排序方法,一般的String Inteneger类都是实现了这个接口的 不用自己操作的。

你可以取看源代码

java中list排序

第一种方法,就是list中对象实现Comparable接口,代码如下:

public class Person implements ComparablePerson {

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;

}

@Override

public int compareTo(Person arg0) {

return this.getOrder().compareTo(arg0.getOrder());

}

}

public static void main(String[] args) {

ListPerson listA = new ArrayListPerson();

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);

for (Person p : listA) {

System.out.println(p.getName());

}

}

第二种方法,就是在重载Collections.sort方法,代码如下:

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;

}

}

public static void main(String[] args) {

ListPerson listA = new ArrayListPerson();

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 ComparatorPerson() {

public int compare(Person arg0, Person arg1) {

return arg0.getOrder().compareTo(arg1.getOrder());

}

});

for (Person p : listA) {

System.out.println(p.getName());

}

}

两次执行的结果都是:

name1

name2

name3

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(ListE 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.Collections;

import java.util.Comparator;

import java.util.List;

public class ArrayListOrder {

public static void main(String[] args) {

ListListInteger list = new ArrayListListInteger();

ListInteger arrayList1 = new ArrayListInteger();

arrayList1.add(2);

arrayList1.add(5);

arrayList1.add(6);

list.add(arrayList1);

ListInteger arrayList2 = new ArrayListInteger();

arrayList2.add(2);

arrayList2.add(4);

arrayList2.add(6);

list.add(arrayList2);

ListInteger arrayList3 = new ArrayListInteger();

arrayList3.add(2);

arrayList3.add(6);

arrayList3.add(6);

list.add(arrayList3);

ListInteger arrayList4 = new ArrayListInteger();

arrayList4.add(2);

arrayList4.add(1);

arrayList4.add(6);

list.add(arrayList4);

for (ListInteger tmpList : list) {

System.out.print(tmpList.get(1)+"   ");

}

System.out.println("");

//排序

Collections.sort(list,new ComparatorListInteger(){

public int compare(ListInteger list1, ListInteger list2) {

//比较每个ArrayList的第二个元素

if(list1.get(1)==list2.get(1)){

return 0;

}else if(list1.get(1)list2.get(1)){

return 1;

}else{

return -1;

}

}

});

for (ListInteger tmpList : list) {

System.out.print(tmpList.get(1)+"   ");

}

}

}

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(){

ListStudentstudents=new ArrayListStudent();

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!=o1null!=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(num1num2){

return 1;

}else if(num1num2){

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(){

ListStudentstudents=new ArrayListStudent();

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);

SortListStudent sortList = new SortListStudent();

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 SortListE {

public void Sort(ListE 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中的排序问题

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

public class BuyFeiJiPiao{

public void buyNum(int num){

if(0 num num = 10){

System.out.println("价格:¥"+(1000*num*0.9));

}else if(10 num num = 20){

System.out.println("价格:¥"+(1000*num*0.8));

}else{

System.out.println("价格:¥"+(1000*num*0.7));

}

}

public void buyDaZe(int num){

switch (num) {

case 9:

System.out.println("打折数量范围:1 - 10");

break;

case 8:

System.out.println("打折数量范围:11 - 20");

break;

case 7:

System.out.println("打折数量大于20张");

break;

default:

break;

}

}

public static void main(String[] args) {

ListInteger l = new ArrayListInteger();

l.add(1);

l.add(4);

l.add(40);

l.add(24);

l.add(7);

l.add(30);

l.add(15);

l.add(19);

l.add(50);

for(int j = 0 ; j l.size()-1 ; j++){

for(int i = j ; i l.size()-1 ; i++){

int b = 0 ;

if(l.get(i) l.get(i+1)){

b = l.get(i);

l.set(i, l.get(i+1));

l.set(i+1, b);

}

}

}

System.out.println("升序:");

for(int i = 0 ; i l.size() ; i++){

System.out.println(l.get(i));

}

System.out.println("降序:");

for(int i = 0 ; i l.size() ; i++){

System.out.println(l.get(l.size()-i-1));

}

}

}

关于java排序list和java排序例题的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-26,除非注明,否则均为首码项目网原创文章,转载请注明出处。