标签: comparable

Java:Integer obj无法强制转换为Comparable

我试图从驱动程序类传递一个Integer对象作为我创建的SortedArray Generic类的函数的参数时遇到问题.从我的驱动程序类,我将用户的int输入转换为Integer对象,以转换为我的SortedArray类的Comparable.

我继续收到错误:"线程中的异常"主"java.lang.ClassCastException:java.lang.Integer无法强制转换为Comparable".我查看了一些同学的源代码,但发现参数/参数设置没什么差别,但是他们的代码工作得很好.我一直在寻找几个小时试图找到我所犯的错误,但我仍然无法找到为什么我的Integer对象无法转换为Comparable.

这里有一点来自我的SortedArray类

public class SortedArray implements Comparable{
    public int size;
public int increment;
public int top;
    Comparable[] a = new Comparable [size];

public SortedArray(int initialSize, int incrementAmount)
{
        top = -1;
        size = initialSize;
        increment = incrementAmount;

}
public int appropriatePosition(Comparable value)
{
        int hold = 0;
        if(top == -1)
        {
            return 0;
        }
        else
        {    
            for(int i = 0; i <= top; i++)
            {
                if(a[i].compareTo(value) > 0)
                {
                    hold = i;
                    break;
                }
            }
        }
        return hold; …
Run Code Online (Sandbox Code Playgroud)

java generic-programming comparable

3
推荐指数
2
解决办法
1万
查看次数

Java:如何解决缺少Equatable接口的问题?

据我所知,事情如SortedMapSortedSet使用compareTo(而不是equals上)Comparable<?>类型检查平等(contains,containsKey).

但是,如果某些类型在概念上是等同的,但具有可比性呢?
(哈希码,内存地址,......)

我必须声明一个Comparator<?>并覆盖该方法int compareTo(T o1, To2).好的,我可以为被认为相等的实例返回0.但是,对于非实际情况,当订单不明显时我会返回什么?

使用SortedMap或SortedSet的方法是否相等,但(概念上)不可比的类型好吗?

谢谢!

编辑:
我不想存储已排序的东西,但我会使用"通常"的Map和Set,我无法"覆盖"相等行为.

编辑2:
为什么我不能覆盖equals(...):
我需要改变外来类的相等行为.我无法编辑它.

编辑3:
想想.NET:它们具有IEquatable接口,可以在不触及可比行为的情况下改变相等行为.

编辑4:
我不能只compareTo返回0表示相等,1表示不相等的实例吗?什么是大问题?我进行了一些测试,似乎SortedMap/SortedSet在一对实例上调用compareTo一次.是的,订单没有意义,但为什么它应该是我的问题呢?我不需要订单.*我只需要改变平等行为.可悲的是,大多数人都无法理解这一点.
注意:现在证明为非平等实例返回1的概念是错误的.

编辑5:
改变外国阶级的平等行为是一个坏主意吗?当然?我不这么认为:为什么我允许改变使用外国类的比较行为Comparator

编辑6:
感谢Mark Peterswaxwing将密钥类型包装在自定义类中的想法.这样,我可以覆盖equals和hashCode,从而改变相等行为.

java collections equals comparable comparator

3
推荐指数
3
解决办法
1740
查看次数

使用泛型创建返回较大函数的最大函数

在Java中,我如何使用泛型来创建一个max函数,该函数将两个相同类型的Comparable对象作为参数并返回较大的对象?

我试过了:

public static <T extends Comparable> T max(T obj1, T obj2)
{
    return ( ((obj1).compareTo(obj2) >= 0) ? obj1 : obj2);
}
Run Code Online (Sandbox Code Playgroud)

(如果它们都相等,则返回obj1.)

该方法基于我在http://www.informit.com/articles/article.aspx?p=170176&seqNum=3上找到的代码.

但是,当我编译它时,我收到此警告(使用-Xlint:unchecked进行编译):warning:[unchecked] unchecked调用compareTo(T)作为原始类型java.lang.Comparable的成员

java generics comparable

3
推荐指数
2
解决办法
1375
查看次数

在界面中实现Comparable

我只使用它的接口调用一个特定的类.问题是,类本身实现了Comparable,但因为我通过不同的接口引用该类,所以编译器不知道它实现了Comparable.我确信有一个简单的解决方案......但我现在想不到它.

java interface comparable

3
推荐指数
1
解决办法
5051
查看次数

如何有效地比较集?

给出两个集合:如何在Java中有效地比较它们?

  • (a)将它们保存为Lists,对它们进行排序并进行比较.(Comparable)
  • (b)将它们保存为Sets并比较hashCode套装?

背景:

需要进行许多比较集很小(通常每组<5个元素).

java set comparable

3
推荐指数
1
解决办法
2万
查看次数

java反射调用一个带有Comparable []参数的方法

我有一个类,其static方法采用Comparable[]as参数.

我需要找到并调用该方法.我尝试了以下内容 java reflection

class X{

    public static void sort(Comparable[] a){
        System.out.println("sorting");
    }
    public static void read(String name){
        System.out.println("name="+name);
    }
}

...
public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException {
        String[] a= new String[]{"E","X","A","M","P","L","E"};
        Class xc = Class.forName("my.javacode.X");

        Method m2 = xc.getMethod("read", java.lang.String.class);
        m2.invoke(null, "jon");

        Method m1 = xc.getMethod("sort", Comparable[].class);
        System.out.println(m1);
        m1.invoke(null, a);

    }
..
Run Code Online (Sandbox Code Playgroud)

这产生了一个例外

name=jon
public static void my.javacode.X.sort(java.lang.Comparable[])
Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments …
Run Code Online (Sandbox Code Playgroud)

java reflection comparable

3
推荐指数
1
解决办法
1074
查看次数

如何从列表中检索所有最大值?

我有一个叫做Employee实现Comparable接口的类.

现在Employee我的列表中有5个对象,每个对象都有自己的salary属性.我想找到所有Employee具有最高工资的对象.

我可以使用单个对象

 Employee employee = Collections.max(employeeList);
Run Code Online (Sandbox Code Playgroud)

但是这只返回一个Employee,而我正在尝试检索具有相同最大值的所有对象的数组或列表.我怎样才能做到这一点?

java collections list max comparable

3
推荐指数
1
解决办法
5616
查看次数

Java,如何使用compareTo对Arraylist进行排序

我试图弄清楚如何使用可比较的方式对ArrayList进行排序,我的代码如下所示:

 public class playerComparsion{

        public static void main(String[] args){ 


    ArrayList<Object> list = new ArrayList<Object>();      

        Player p1 = new Players(1,92,Zlatan);
    Player p2 = new Players(2,92,Hazard);
    Player p3 = new Players(1,82,Klose);

    list.add(p1);
    list.add(p2);
    list.add(p3);
        }
    } 
        class Players implements Comparable{

        int position;
             String name;
            int rating;

            public Players(int i, int j, String string)  {

                this.position=i;
                this.rating=j;
                this.name=string;
            }

             public void getRating() {
                    System.out.println(this.rating);
                    }
             public void getPos() {
                    System.out.println(this.position);
                    }
             public void getName() {
                    System.out.println(this.name);
                    }

            @Override
            public int compareTo(Object o) { …
Run Code Online (Sandbox Code Playgroud)

java compareto comparable

3
推荐指数
2
解决办法
3万
查看次数

集合排序泛型类型java

我一直在寻找我的问题的答案.我发现了大量相似的主题,但我仍然不知道该怎么做.

我有一个类,我想在排序的ArrayList中存储对象.

例如,我创建了这个类:

public class Kwadrat implements Comparable<Kwadrat> {

    private int a;

    public Kwadrat(int a){
        this.a = a;
    }

    public int get_size(){
        return a*a;
    }

    public int compareTo(Kwadrat b){
        if(b.get_size() > get_size()){
            return -1;
        }
        if(b.get_size() < get_size()){
            return 1;
        }
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的Sort班级:

public class Sort <T> {
    ArrayList<T> arraylist;

    public Sort(){
        arraylist = new ArrayList<T>();
    }


    public void add(T element){

        arraylist.add(element);

       Collections.sort(arraylist);



    }
}
Run Code Online (Sandbox Code Playgroud)

Collections.sort(arraylist);仍然告诉我"没有类型变量的实例T存在,所以T conforms to Comparable<? super T> …

java generics collections comparable

3
推荐指数
1
解决办法
881
查看次数

Java 11中的CharSequence接口添加了方法`compare`。为什么不比较接口的“ compareTo”?

CharSequence接口在Java 11中获得了一个新的静态方法:compare

此方法返回一个int

如果两个CharSequence相等,则值为0;否则为0。如果第一个CharSequence在字典上小于第二个,则为负整数;如果第一个CharSequence在字典上大于第二个,则为正整数。

那声音就像compareToComparable。但是Java团队显然选择进行CharSequence扩展Comparable。为什么不?逻辑逃脱了我。

?它是什么CharSequence::compare,不会是一个合适的适合Comparable::compareTo

java compare string-comparison comparable charsequence

3
推荐指数
1
解决办法
64
查看次数