JAVA如何以数组中的一列作为标准进行排序。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA如何以数组中的一列作为标准进行排序。相关的知识,希望对你有一定的参考价值。

private Student stu[]= new Student(1,"张三",2),new Student(2,"李四",4),new Student(3,"王五",1),new Student(4,"赵六",0);

代码如上,如何对上面的stu[]数组第三列从大到小进行排序
输出stu[0]的时候是 李四那一行。

这是对对象数组进行排序,有两种方法:1、一种是实现Comparable接口,复写compareTo()方法。2、另一种是自定义一个比较器即实现Comparator接口,复写compare()方法。


import java.util.Arrays;

import java.util.Comparator;

class Student 

public  int id;

public  String name;

public  int age;

public Student(int id,String name,int age)

this.id=id;

this.name=name;

this.age=age;

public String toString()

return "根据第三列排序:"+this.name+".."+this.age;

class StudentComparator implements Comparator<Student>//定义一个Student比较器

public int compare(Student stu1,Student stu2)

if(stu1==stu2)

return 0;

if(stu1.age<stu2.age)

return 1;

else if(stu1.age>stu2.age)

return -1;

else

return 0;

public class StudentTest

public static void main(String[] args)

Student stu[]= new Student(1,"张三",2),new Student(2,"李四",4),

new Student(3,"王五",1),new Student(4,"赵六",0);

StudentComparator sc=new StudentComparator();

Arrays.sort(stu,sc);

for(int i=0;i<stu.length;i++)

System.out.println(stu[i]);

参考技术A 你这是对对象实现比较大小。这个对对象的编译器肯定不知道。要你自己做好告诉编译器我这个对象是个大的对象。在java中有两种方式
1:实现Comparable 接口 的 public int compareTo(T o) 方法;

2:实现Comparator 接口 的 int compare(T o1, T o2)方法;
在这里你没有贴出你Student类的源码。我就假定只有三个成员变量。如下:

class Student implements Comparable
private int no, grade;
private String name;
public Student(int no, String name, int grade)
this. no = no;
this.grade = grade;
this.name = name;


public int getGrade()
return grade;

//override
public int compareTo(Object arg0)
Student stu = (Student) arg0;
if(this.getGrade()>=arg0.getGrade())
return this.getGrade;
else
return 0;




然后在你的主函数里面
private Student stu[]= new Student(1,"张三",2),new Student(2,"李四",4),new Student(3,"王五",1),new Student(4,"赵六",0);

for(int i = 0 ; i< stu.length-1; i++)
if(stu[i].compareto(stu[i+1]))=0)//如果比较等于0, 说明i<i+1,然后一环
Student student = stu[i];
stu[i] = stu[i+1];
stu[i+1] = student;


//// 补充/////
有了比较之后,那就是排序的事情了。 上面写错了。。。。 最起码要用个冒泡排序。 这只是两两一环。。。 。。 不过交换的方法就是上面写的。排序的算法就不写了。。 自己看书就可以啦

JAVA中如何对二维数组的每一列进行排序

排成一个每列都是有序的,但每行无序的二维数组
也就是说只对列排序
对一个已有的二维数组每列排序
谢谢各位了,我会补加分数的!!!

我就是举一个num[3][3]的例子啊
如果是更大的数组,只要改动一下代码中 i,j的值就可以了
我也正在学java,
QQ:374122021,希望能多交流,一起进步

刚开始忽略了一个小东西,现在可以了

public class Test

public static void main(String[] args)

MyTest t=new MyTest();
t.f();
t.print();


class MyTest

int [][] num=new int[][]2,3,8,9,1,6,3,5,7;
int t;
void f()

for(int j=0;j<3;j++)
for(int k=0;k<2;k++)
for(int i=0;i<2;i++)

if(num[i][j]>num[i+1][j])
t=num[i][j];num[i][j]=num[i+1][j];num[i+1][j]=t;


void print()

for(int i=0;i<3;i++)

for(int j=0;j<3;j++)
System.out.print(num[i][j]+" ");
System.out.println();



参考技术A import java.util.Iterator;
import java.util.TreeSet;
import java.util.Vector;

public class Test
//转置方法
public int[][] transpose(int[][] org)
int temp[][]=new int[org[0].length][org.length];
for(int i=0;i<temp.length;i++)
for(int j=0;j<temp[i].length;j++)
temp[i][j]=org[j][i];

return temp;

//TreeSet 排序
public int[][] sortedByCol(int[][] org)
TreeSet[] temp=new TreeSet[org.length];
//Vector 初始化
for(int i=0;i<temp.length;i++)
temp[i]=new TreeSet();
//放入Vector自动排序
for(int i=0;i<org.length;i++)
for(int j=0;j<org[i].length;j++)
temp[i].add(org[i][j]);

//替换数组元素
for(int i=0;i<temp.length;i++)
Iterator it=temp[i].iterator();
for(int j=0;j<temp[i].size();j++)
org[i][j]=(Integer)it.next();

return org;

public void run(int[][] org)
//打印原数组
printArray(org);
System.out.println();
//转置
int[][] temp=transpose(org);
//放入TreeSet排序
temp=sortedByCol(temp);
//转置
int[][] newArr=transpose(temp);
//打印新数组
printArray(newArr);

//打印
public void printArray(int[][] array)
for(int i=0;i<array.length;i++)
for(int j=0;j<array[i].length;j++)
System.out.print(array[i][j]);
System.out.println();


public static void main(String[] args)
int a[][]=9,2,3,4,5,6,7,8,0,6,2,3;
new Test().run(a);




把二维数组传到run方法中就可以拉,随便输!
参考技术B public void sortlie()//标准的冒泡

for(int j=0;j<lie;j++)

for(int outer=hang-1;outer>0;outer--)

for(int inner=0;inner<outer;inner++)

if(a[inner][j]>a[inner+1][j])

int temp=a[inner][j];
a[inner][j]=a[inner+1][j];
a[inner+1][j]=temp;




本回答被提问者采纳
参考技术C import java.lang.Math;
import java.util.Scanner;
class AarrayReverse

public static void main(String args[])

int a[]=new int[20];
for(int i=0;i<=15;i++)

Scanner sca=new Scanner(System.in);
System.out.println("请输数组元素a["+"]");
a[i]=sca.nextInt();

for(int i=0;i<=100;i++)

int middle=(int)(a.length/2*Math.random());
int radius=(int)(middle*Math.random());
int t;
t=a[middle-radius+1];
a[middle-radius+1]=a[middle+radius+3];
a[middle+radius+3]=t;

for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
System.out.println();


当然这里的数组可以自己定义.
循环的次数越多越好..
当数组长度为10,middle=5,radius=5时middle+radius+3=13;就越界了。改为:

mid=(int)((a.length/2)*Math.random()); radium=(int)((mid+1)*Math.random()); temp=a[mid-radium]; a[mid-radium]=a[mid+radium+1]; a[mid+radium+1]=temp;
参考技术D 逻辑上未必可行的呀~~
假如用这个数组:
int[] num =
3, 3, 3,
1, 1, 1,
2, 2, 2

列必然是无序的吧~
不晓得是不是误会楼主的意思了~~多多指教~~

以上是关于JAVA如何以数组中的一列作为标准进行排序。的主要内容,如果未能解决你的问题,请参考以下文章

java 如何将二维数组的一列作为参数传进去 求代码

如何在标准化状态下使用结果数组以排序顺序呈现帖子

如何以编程方式根据排序标准对单元格重新排序 SWIFT 4

Java:就地对 ArrayList 进行排序

如何标准化r中的向量[重复]

数组排序