java 集合排序问题,谢谢指导。

问题描述

java 集合排序问题,谢谢指导。

有一串分数我存在了rationalList集合里,然后要求对分数按倒数大小对分数进行排序
ListrationalList = new ArrayList<>();
Collections.sort(rationalList,new InverseComparator());
public class InverseComparator implements Comparator {
// 比较两个分数倒数的大小
@Override
public int compare(Rational obj1, Rational obj2) {
Rational ra1 = obj1;
Rational ra2 = obj2;
int nm1 = obj1.getNumerator();
int dm1 = obj1.getDenominator();
ra1.setDenominator(nm1);
ra1.setNumerator(dm1);

    int nm2 = obj2.getNumerator();
    int dm2 = obj2.getDenominator();
    ra2.setDenominator(nm2);
    ra2.setNumerator(dm2);  这里这样的话就改变了原来的分数,后面输出来的都是倒数,而不是原来的分数,怎么写呢要?
    //……
}
}

解决方案

public int compare(Rational obj1, Rational obj2) {

    int nm1 = obj1.getNumerator();
    int dm1 = obj1.getDenominator();
    Rational ra1 = null;
    try {
        ra1 = new Rational(dm1,nm1);
    } catch (IllegalRationalException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    int nm2 = obj2.getNumerator();
    int dm2 = obj2.getDenominator();
    Rational ra2 = null;
    try {
        ra2 = new Rational(dm2,nm2);
    } catch (IllegalRationalException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    //……这里用前面本身排序的compareTo();只是参数换成了两个比较
    }

    //已解决

解决方案二:

java集合排序问题
Java集合中的排序问题
Java集合中的排序问题

解决方案三:

继承Comparable接口,自己写排序方法
class Name implements Comparable{

public String firstName,lastName;

public Name(String firstName,String lastName){

this.firstName=firstName;

this.lastName=lastName;

}

public int compareTo(Name o) { //实现接口

int lastCmp=lastName.compareTo(o.lastName);

return (lastCmp!=0?lastCmp:firstName.compareTo(o.firstName));

}

public String toString(){ //便于输出测试

return firstName+" "+lastName;

}

}

时间: 2024-10-30 19:53:08

java 集合排序问题,谢谢指导。的相关文章

关于java 快速排序问题 这个输出报错 我认为 while 有问题 求大神指导

问题描述 关于java 快速排序问题 这个输出报错 我认为 while 有问题 求大神指导 package QuickSort; import java.util.ArrayList; public class QuickSort { public static void main(String[] args) { ArrayList<Integer> lists = new ArrayList<Integer>(); lists.add(5); lists.add(2); lis

java 集合问题找出两个集合中相同的元素并打印出来

问题描述 java 集合问题找出两个集合中相同的元素并打印出来 把1-100 数随机放入到 数组长度为[97] 并且这些元素不能重复,找出未输入进数组的数! 解决方案 package set; import java.util.HashSet; /* 作业: 把1-100 数随机不重复放入到 数组[97] ,找出未存入的数! */ public class Test5 { public static void main(String[] args) { // 1.创建 一个 HashSet集合,

[Java] 集合框架的层次结构和使用规则梳理

在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类).所有抽象出来的数据结构和操作(算法)统称为Java集合框架(JavaCollectionFramework). Java程序员在具体应用时,不必考虑数据结构和算法实现细节,只需要用这些类创建出来一些对象,然后直接应用就可以了,这样就大大提高了编程效率. 概述 什么是框架?  类库的集合 什么是集合? 存放数据的容器 集合框架用来干什么? 用来表示和操作的统一的架构 集合框架包含了两部分:一

Java初学者求过来人指导点经验

问题描述 网络专业学生,最近在自学java,看的是尚学堂的java300集视屏,过来人给菜鸟一点指导一点经验 解决方案 解决方案二:我也是新手啊,一起学习解决方案三:边看边做,不懂多问解决方案四:多写代码多看书,学生时代需要增加知识的广度.解决方案五:多看多学多做,加油,一起进步!解决方案六:代码的话要敲一遍会非常有好处,相信我,不要只是看.解决方案七:有时候你看一些代码觉得有些地方不明白,你在工具上照着敲出来,运行一遍,你就能大概理解什么意思了,不懂的可以百度下,我也是自学,解决方案八:请问在

sql-SQL max,all 谢谢指导。

问题描述 SQL max,all 谢谢指导. sql中 x=select max(x) x>all(select x --) 这两种写法有什么区别呢? 解决方案 all是对这个结果集合的每一条数据进行比较相当进行了某种排序算法的操作. max是聚集时候的优化算法. 二者的效果是一样的 但是 哈哈 肯定是max得效率高一些. 解决方案二: 前者效率高一些.后者更灵活.因为要执行那个子查询. 解决方案三: My SQL数据库引擎快速指导ALL与max 何时等价linq to sql (Group B

Java集合源码剖析:Java集合框架

Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组.链表.栈.队列.集合.哈希表等.学习Java集合框架下大致可以分为如下五个部分:List列表.Set集合.Map映射.迭代器(Iterator.Enumeration).工具类(Arrays.Collections). Java集合类的整体框架如下: 从上图中可以看出,集合类主要分为两大类:Collection和Map. Collection是List.Set等集合高度抽象出来的接口,它包含了这些集合的基本操作,它主

JAVA集合框架之List接口实现类

上一篇博客<JAVA集合框架之Set接口实现类>中介绍了Set接口的相关实现类,这一篇将介绍List接口的实现类. java.util.ArrayList< E > ArrayList有点类似于数组,相比较于数组而言,ArrayList可以动态的更改元素个数,相对于数组较为灵活. 每个 ArrayList 实例都有一个容量.该容量是指用来存储列表元素的数组的大小.它总是至少等于列表的大小.随着向 ArrayList 中不断添加元素,其容量也自动增长.并未指定增长策略的细节,因为这不

Java集合源码剖析:Hashtable源码剖析

Hashtable简介 Hashtable同样是基于哈希表实现的,同样每个元素是一个key-value对,其内部也是通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长. Hashtable也是JDK1.0引入的类,是线程安全的,能用于多线程环境中. Hashtable同样实现了Serializable接口,它支持序列化,实现了Cloneable接口,能被克隆. HashTable源码剖析 Hashtable的源码的很多实现都与HashMap差不多,源码如下(加入了比较详细的注释):

Java集合源码剖析:HashMap源码剖析

HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长. HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap. HashMap 实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆. HashMap源码剖析 HashMap的源码如下(加入了比较详细的注释): pac