- 浏览: 89362 次
- 性别:
- 来自: 厦门
最新评论
-
zhengyong7232:
SELECT t.province,DECODE(landsc ...
列转行 -
meepo3927:
不是特么很懂
列转行
java如何对ArrayList中对象按照该对象某属性排序
增加排序功能,打印时:输出学生对象的时候,需要先按照年龄排序,如果年龄相同,则按照姓名排序,如果姓名也相同,则按照学号排序。
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; public class ComparableTest { public static void main(String[] args) { Comparator<Student> comparator = new Comparator<Student>(){ public int compare(Student s1, Student s2) { //先排年龄 if(s1.age!=s2.age){ return s1.age-s2.age; } else{ //年龄相同则按姓名排序 if(!s1.name.equals(s2.name)){ return s1.name.compareTo(s2.name); } else{ //姓名也相同则按学号排序 return s1.id-s2.id; } } } }; Student stu1 = new Student (1,"zhangsan","male",28,"cs"); Student stu2 = new Student (2,"lisi","female",19,"cs"); Student stu3 = new Student (3,"wangwu","male",22,"cs"); Student stu4 = new Student (4,"zhaoliu","female",17,"cs"); Student stu5 = new Student (5,"jiaoming","male",22,"cs"); ArrayList<Student> List = new ArrayList<Student>(); List.add(stu1); List.add(stu2); List.add(stu3); List.add(stu4); List.add(stu5); //这里就会自动根据规则进行排序 Collections.sort(List,comparator); display(List); } static void display(ArrayList<Student> lst){ for(Student s:lst) System.out.println(s); } } class Student{ int age; int id; String gender; String name; String cs; Student(int id,String name,String gender,int age,String cs){ this.age=age; this.name=name; this.gender=gender; this.id=id; this.cs=cs; } public String toString(){ return id+" "+name+" "+gender+" "+age+" "+cs; } }
以一个point点类做例子:
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->import java.util.*; public class Test { public static void main(String[] args){ List<Point> points=new ArrayList<Point>(); Point point1=new Point(); point1.setX(1324); point1.setY(345); point1.setZ(436); points.add(point1); Point point2=new Point(); point2.setX(23); point2.setY(8941.656); point2.setZ(431412); points.add(point2); Point point3=new Point(); point3.setX(786584); point3.setY(23452); point3.setZ(43563); points.add(point3); //根据X排序 Collections.sort(points,new SortByX()); for(Point p:points){ System.out.print(p.getX()+"\t"+p.getY()+"\t"+p.getZ()); System.out.println(); } //根据Y排序 // Collections.sort(points,new SortByY()); // // for(Point p:points){ // System.out.print(p.getX()+"\t"+p.getY()+"\t"+p.getZ()); // System.out.println(); // } // // //根据Z排序 // Collections.sort(points,new SortByZ()); // // for(Point p:points){ // System.out.print(p.getX()+"\t"+p.getY()+"\t"+p.getZ()); // System.out.println(); // } } } class Point{ private double x; private double y; private double z; public double getX() { return x; } public void setX(double x) { this.x = x; } public double getY() { return y; } public void setY(double y) { this.y = y; } public double getZ() { return z; } public void setZ(double z) { this.z = z; } public Point(){} } //根据X排序 class SortByX implements Comparator{ public int compare(Object obj1,Object obj2){ Point point1=(Point)obj1; Point point2=(Point)obj2; if(point1.getX()>point2.getX()) return 1; else return 0; } } //根据Y排序 class SortByY implements Comparator{ public int compare(Object obj1,Object obj2){ Point point1=(Point)obj1; Point point2=(Point)obj2; if(point1.getY()>point2.getY()) return 1; else return 0; } } //根据Z排序 class SortByZ implements Comparator{ public int compare(Object obj1,Object obj2){ Point point1=(Point)obj1; Point point2=(Point)obj2; if(point1.getZ()>point2.getZ()) return 1; else return 0; } }
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->//一个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
http://zhidao.baidu.com/question/135304880.html?push=ql
最后这个没有用java的Comparable接口,自己写的排序函数。
要用JAVA写个东西读取TXT中的数据 且要计算出平均值和总值 最后还要按总值排序。 TXT的文件如下: 学号 姓名 语文 数学 英语 平均值 总值 排序 1 李守东 83 73 75 2 徐贤坤 58 58 87 3 钱云宋 41 86 90 4 陈平 83 43 65 5 金荣权 93 88 63 6 陈如棉 99 93 43 7 章可可 98 62 72 8 陈伟奔 87 43 76 9 张如祥 69 58 78 10 丁尚游 80 56 57 11 林宏旦 91 90 76 12 曾上腾 100 96 54 13 谢作品 82 100 55 14 温从卫 73 46 101 15 李明察 81 41 75 16 彭鸿威 46 46 89 17 翁文秀 57 43 58 18 陈家伟 63 58 98 19 温正考 100 64 57 20 周文湘 50 50 79 21 吴杰 65 65 83 22 赖登城 60 79 53 23 聂树露 51 76 45 24 张雅琴 68 95 56 25 曾瑞约 88 63 58 26 王志强 96 79 78 27 徐贤所 66 46 74 28 陈祥枭 82 96 91 29 温婷婷 41 73 96 30 应孔余 66 81 71 31 宋成取 71 68 62 32 黄益省 65 56 43 33 陈思文 55 100 44 34 上官福新 64 62 70 35 钟国横 49 69 56 36 林型涨 78 73 50
代码:
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Testa { public static void main(String[] args) { //传入参数为文件目录 test("d:/a.txt"); } public static void test(String filePath){ BufferedReader br = null; try { br = new BufferedReader(new FileReader(filePath)); } catch (FileNotFoundException e) { e.printStackTrace(); return; } String []columnName = {"Id", "Name", "Languages", "Math", "English"}; //列名 int []courseIndexs = {2, 3, 4}; //课程对应的列 int i,j,index; String line; List<Map<String, Object>> students = new ArrayList<Map<String, Object>>(); //记录Id和总值,用于排序 List<Map<String, Object>> sortList = new ArrayList<Map<String, Object>>(); try { br.readLine(); //去掉第一行 while((line = br.readLine()) != null){ index = 0; String []se = line.split(" "); Map<String, Object> student = new HashMap<String, Object>(); for(i = 0; i < se.length; i++){ if("".equals(se[i])){ continue; } if(index >= columnName.length){ continue; } student.put(columnName[index], se[i]); index++; } //计算平均值,总值 double total = 0; for(j = 0; j < courseIndexs.length; j++){ total += Double.parseDouble((String) student.get(columnName[courseIndexs[j]])); } double average = total / courseIndexs.length; //只取一位小数 average = Math.round(average * 10)/10; student.put("Total", total); student.put("Average", average); Map<String, Object> sort = new HashMap<String, Object>(); sort.put("Id", student.get("Id")); sort.put("Total", student.get("Total")); sortList.add(sort); students.add(student); } br.close(); //选择排序 for(i = 0; i < sortList.size(); i++){ for(j = i + 1; j < sortList.size(); j++){ if((Double)sortList.get(i).get("Total") < (Double)sortList.get(j).get("Total")){ Map<String, Object> temp = sortList.get(i); sortList.set(i, sortList.get(j)); sortList.set(j, temp); } } } Map<Object, Integer> sortedId = new HashMap<Object, Integer>(); for(i = 0; i < sortList.size(); i++){ sortedId.put(sortList.get(i).get("Id"), i+1); } //设定序号 for(j = 0; j < students.size(); j++){ students.get(j).put("Order", sortedId.get(students.get(j).get("Id"))); } //输出(写到原文件) //PrintWriter pw = new PrintWriter(new File(filePath)); //输出(写到其他文件) PrintWriter pw = new PrintWriter(new File("D:/b.txt")); pw.println("Id\tName\tLan\tMath\tEnglish\tAverage\tTotal\tSort"); int cIndex; for(i = 0; i < students.size(); i++){ Map<String, Object> st = students.get(i); cIndex = 0; pw.println(st.get(columnName[cIndex++]) + "\t" + st.get(columnName[cIndex++]) + "\t" + st.get(columnName[cIndex++])+ "\t" + st.get(columnName[cIndex++]) + "\t" + st.get(columnName[cIndex++]) + "\t" + st.get("Total") + "\t" + st.get("Average") + "\t" + st.get("Order")); } pw.flush(); pw.close(); } catch (IOException e) { e.printStackTrace(); } } }
发表评论
-
最小生成树之Kruskal算法
2013-12-15 00:54 1092这篇文章实现最小生成树的Kruskal算法Kruskal算 ... -
排序算法--插入排序
2013-12-15 00:47 1068插入排序原理:假设 ... -
poi创建下拉框
2013-04-16 19:01 0package finance.tools.salesper ... -
Spring中Transactional配置
2013-04-11 20:43 1007Spring中Transactional配置 标签: 杂谈 分 ... -
Hibernate将Enum枚举类型映射为Int类型 .
2013-04-09 16:46 1542最近要用Hibernate做一个枚举类型的映射,在MySQL ... -
Hibernate 更灵活的用法 HibernateCallback
2013-01-22 14:41 1437在项目中用Hibernate的DetachedCriter ... -
spring源代码分析(2)--BeanFactory
2013-01-20 12:38 1435我们首先来看下BeanFacroty接口 pa ... -
spring源代码分析(1)--Resource的分析
2013-01-20 12:22 4050我们知道,在spring中,配置文件是通过资源形式加载的, ... -
DefaultListableBeanFactory研究
2013-01-18 10:49 5914DefaultSingletonBeanRegistry完 ... -
jvm的内存调优
2013-01-11 15:54 8681) 堆 运行时数 ... -
struts2中Action的name 和package的name和namespace是什么作用
2013-01-02 12:16 9642在struts2的 struts.xml 配置中 例: ... -
深入探索 高效的Java异常处理框架
2012-10-22 14:09 917摘要:本文从Java异常最基本的概念、语法开始讲述了Java异 ... -
ThreadPoolExecutor使用和思考(中)-keepAliveTime及拒绝策略
2012-09-11 00:48 961工作中多处接触到了ThreadPoolExecutor。趁着现 ... -
ThreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别
2012-09-11 00:45 1657工作中多处接触到了ThreadPoolExecutor。趁着现 ... -
Spring IOC之BeanFactory
2012-09-10 12:39 1317BeanFactory ,作为 Spring 基础的 IoC ... -
Java5 并发学习
2012-09-10 11:33 825在Java5之后 ... -
Spring对事务管理的支持的发展历程(基础篇
2012-08-31 17:43 943Connection conn = DataS ... -
CXF ,在Client端用于把 Date 类型转换成 XMLGregorianCalendar .
2012-08-31 16:54 1664import javax.xml.datatype.Datat ... -
《Spring技术内幕》学习笔记10——Web环境中Spring的启动过程
2012-07-30 09:04 10091.Spring 不但可以在 JavaSE 环境中应用,在 W ... -
spring 加载bean过程源码简易解剖
2012-07-30 08:45 1215这一篇主要是讲用载入bean的过程。其实就是IOC.低调 低调 ...
相关推荐
java中对ArrayList进行排序的方法参考
本文将通过三个示例详细讲解如何在Java中对ArrayList进行排序。 首先,我们来看一个简单的例子,创建一个名为`term`的类,包含一个字符串`str`和一个整型`id`: ```java class term { String str; int id; ...
ArrayList作为Java集合框架中的一员,它提供了丰富的操作接口,包括对元素的添加、删除、修改以及排序等。本篇将重点讲解如何利用ArrayList实现快速排序(Quick Sort)、归并排序(Merge Sort)和堆排序(Heap Sort...
- 对于大量数据的排序,ArrayList的性能可能不如使用LinkedList,因为ArrayList排序时涉及到大量的索引计算和元素移动。 - 如果ArrayList中元素的类型不一致,`Collections.sort()`会抛出ClassCastException异常,...
在这个示例中,我们将深入探讨如何对ArrayList中的对象进行排序,以及ArrayList的一些基本用法。 首先,我们创建了一个名为`Test`的类,其中包含主方法`main`,这是程序的入口点。在`main`方法中,我们实例化了几个...
ArrayList排序和遍历补充案例.java
本文将详细介绍如何在 Java 中对包含中文姓氏的对象列表或字符串列表进行排序。 #### 二、基本概念 1. **Collator 类**:这是 Java 中用于文本排序和检索的标准类。`Collator` 类提供了与语言环境相关的字符串排序...
在java中,ArrayList的排序是通过Collections.sort()方法实现的,该方法可以对ArrayList中的元素进行排序。但是,defaults不能对存储对象进行排序,需要我们自己实现比较对象Comparator。 下面是一个实例,演示如何...
1. `sort(Comparator<? super E> c)`:根据提供的比较器对列表进行排序。 2. `reverse()`:反转列表中元素的顺序。 示例代码如下: ```java ArrayList<Integer> list = new ArrayList(); list.add(1); list.add(3);...
- 如果需要保持元素的排序,LinkedList 不支持快速的二分查找,而ArrayList 可以结合TreeSet或TreeMap等数据结构实现高效的排序查找。 综上所述,选择ArrayList 还是LinkedList 应根据具体应用场景的需求来决定。...
用java语言编写一个程序实现学员成绩管理,每个学员包括3门课的成绩,从键盘输入学员信息, 包括学号、姓名、三门课成绩,计算出学员的平均成绩,按照学员平均成绩由大到小排序 插入功能:在排序后的学员成绩表中...
这个方法首先对ArrayList进行排序,然后遍历列表,如果相邻的两个元素相等,则移除重复项。这种方法的缺点是改变了原列表的顺序,且在元素数量较大时,排序操作可能会比较耗时。 ```java private ArrayList...
本主题将深入探讨如何对ArrayList中的对象按照多个属性进行排序。 首先,我们来看`Student.java`类,它通常会包含一个或多个属性,比如学生的姓名(name)、学号(id)或其他信息。例如: ```java public class ...
它直接在原地对列表进行排序,无需额外的流处理。例如: ```java List<Person> people = ...; Collections.sort(people, Comparator.comparing(Person::getName)); ``` - 流API的`sorted()`:适用于任何可...
总结一下,Java中对ArrayList排序的步骤包括: 1. 创建一个ArrayList,并填充需要排序的对象。 2. 实现Comparator接口,创建一个或多个比较器类,覆盖`compare()`方法,定义排序规则。 3. 使用`Collections.sort()`...
4. **排序功能**:为了方便管理,系统可能需要提供按照不同标准(如姓名、工号或薪资)对员工列表进行排序的功能。这可以通过实现Comparator接口并调用Collections.sort()方法实现。 5. **数据持久化**:虽然...
Java针对ArrayList自定义排序的2种实现方法 Java语言中提供了多种方式来实现ArrayList的自定义排序,今天我们将介绍其中的两种实现方法。首先,让我们了解一下ArrayList的基本概念。ArrayList是一种动态数组,能够...
在Java编程语言中,ArrayList是...总的来说,对ArrayList中的对象进行排序涉及到Java集合框架的核心概念,包括List接口、Collections工具类以及Comparator接口。理解这些知识点对于编写高效、灵活的Java代码至关重要。