Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用集合的ArrayList排序_Java_Sorting_Arraylist_Collections - Fatal编程技术网

Java 使用集合的ArrayList排序

Java 使用集合的ArrayList排序,java,sorting,arraylist,collections,Java,Sorting,Arraylist,Collections,我知道我们使用comparable函数对对象的ArrayList进行排序,以根据对象的特定属性进行排序。 但我总是想知道,当我们直接在对象的ArrayList上调用sort时,例如:Collections.sort(ArrayList) 打印对象时,会出现无法排序的错误,例如: Instances in1=new Instances(); ArrayList al=new ArrayList(); al.add(in1); System.out.println(al.get(0)); 您将获

我知道我们使用comparable函数对对象的ArrayList进行排序,以根据对象的特定属性进行排序。 但我总是想知道,当我们直接在对象的ArrayList上调用sort时,例如:
Collections.sort(ArrayList)
打印对象时,会出现无法排序的错误,例如:

Instances in1=new Instances();
ArrayList  al=new ArrayList();
al.add(in1);
System.out.println(al.get(0));
您将获得以下输出:

Instances@45a8123b

它是对象的id


因此,如果我们在ArrayList上调用排序,那么它可以根据id对对象进行排序。那么,为什么在对对象的ArrayList进行排序时会出现错误?

如果您希望在不提供比较器的情况下对对象进行排序,请通过实现
Compariable
接口定义自然排序:

class Instances implements Comparable<Instances> {

    ....

    @Override
    public int compareTo(Instances other) {
        return Integer.compare(
                System.identityHashCode(this), 
                System.identityHashCode(other)
        );
    }
}
类实例实现了可比较的{
....
@凌驾
公共整数比较(其他实例){
返回整数。比较(
系统识别码(本),
系统识别代码(其他)
);
}
}
现在,
ArrayList
可以按照标识hashcode进行排序(不管这样做多么可笑)


通过这种方式,你实际上必须做出深思熟虑的努力才能实现这一点
Collections.sort
不假设行为可能是错误的是正确的。如果您没有实现
Comparable
,也没有提供
比较器
,那么出错要比只按半随机顺序静默排序好得多。

如果您希望在不提供比较器的情况下对对象进行排序,请通过实现
Comparable
接口定义自然顺序:

class Instances implements Comparable<Instances> {

    ....

    @Override
    public int compareTo(Instances other) {
        return Integer.compare(
                System.identityHashCode(this), 
                System.identityHashCode(other)
        );
    }
}
类实例实现了可比较的{
....
@凌驾
公共整数比较(其他实例){
返回整数。比较(
系统识别码(本),
系统识别代码(其他)
);
}
}
现在,
ArrayList
可以按照标识hashcode进行排序(不管这样做多么可笑)


通过这种方式,你实际上必须做出深思熟虑的努力才能实现这一点
Collections.sort
不假设行为可能是错误的是正确的。如果您没有实现
Comparable
,也没有提供
比较器
,那么出错要比只按半随机顺序静默排序好得多。

如果您希望在不提供比较器的情况下对对象进行排序,请通过实现
Comparable
接口定义自然顺序:

class Instances implements Comparable<Instances> {

    ....

    @Override
    public int compareTo(Instances other) {
        return Integer.compare(
                System.identityHashCode(this), 
                System.identityHashCode(other)
        );
    }
}
类实例实现了可比较的{
....
@凌驾
公共整数比较(其他实例){
返回整数。比较(
系统识别码(本),
系统识别代码(其他)
);
}
}
现在,
ArrayList
可以按照标识hashcode进行排序(不管这样做多么可笑)


通过这种方式,你实际上必须做出深思熟虑的努力才能实现这一点
Collections.sort
不假设行为可能是错误的是正确的。如果您没有实现
Comparable
,也没有提供
比较器
,那么出错要比只按半随机顺序静默排序好得多。

如果您希望在不提供比较器的情况下对对象进行排序,请通过实现
Comparable
接口定义自然顺序:

class Instances implements Comparable<Instances> {

    ....

    @Override
    public int compareTo(Instances other) {
        return Integer.compare(
                System.identityHashCode(this), 
                System.identityHashCode(other)
        );
    }
}
类实例实现了可比较的{
....
@凌驾
公共整数比较(其他实例){
返回整数。比较(
系统识别码(本),
系统识别代码(其他)
);
}
}
现在,
ArrayList
可以按照标识hashcode进行排序(不管这样做多么可笑)


通过这种方式,你实际上必须做出深思熟虑的努力才能实现这一点
Collections.sort
不假设行为可能是错误的是正确的。如果您没有实现
Comparable
,也没有提供
比较器
,那么出错比以半随机顺序静默排序列表要好得多。

为什么要基于
hashCode
对对象进行排序?基于此
id
的排序,实际上是hashCode,没有任何意义,为什么人们要实施它?@Lashane u是对的,我只是问默认情况下你可以有这个选项。例如,如果你想根据输入日期打印学生姓名,那么你可以打印对象。这是一个模糊的例子,但类似于此。@ArjunChaudhary使用Java 8,您可以非常轻松地完成类似的操作。例如,
students.sort(Comparator.comparating(Student::getDate))
。为什么要基于
hashCode
对对象进行排序?基于此
id
的排序,实际上是hashCode,没有任何意义,为什么人们要实施它?@Lashane u是对的,我只是问默认情况下你可以有这个选项。例如,如果你想根据输入日期打印学生姓名,那么你可以打印对象。这是一个模糊的例子,但类似于此。@ArjunChaudhary使用Java 8,您可以非常轻松地完成类似的操作。例如,
students.sort(Comparator.comparating(Student::getDate))
。为什么要基于
hashCode
对对象进行排序?基于此
id
的排序,实际上是hashCode,没有任何意义,为什么人们要实施它?@Lashane u是对的,我只是问默认情况下你可以有这个选项。例如,如果你想根据输入日期打印学生姓名,那么你可以打印对象。这是一个模糊的例子,但类似于此。@ArjunChaudhary使用Java 8,您可以非常轻松地完成类似的操作。例如,
students.sort(Comparator.comparating(Student::getDate))
。为什么要基于
hashCode
对对象进行排序?基于此
id
的排序,实际上是hashCode,d