java-ArrayList 和TreeSet排序问题

问题描述

ArrayList 和TreeSet排序问题

import java.util.*;

public class Test {
public static void main(String[] args) {

    Employee Allan = new Employee("Allan");
    Employee Bell = new Employee("Bell");
    Employee Chris = new Employee("Chris");
    Employee David = new Employee("David");
    Employee Eric = new Employee("Eric");

    //TreeSet<Employee> staff = new TreeSet<Employee>();

    ArrayList<Employee> staff = new ArrayList<Employee>();

    staff.add(David);
    staff.add(Bell);
    staff.add(Chris);
    staff.add(Eric);
    staff.add(Allan);

    //Collections.shuffle(staff);

    System.out.println(staff);

}

}

我已经在Emploee类里重写了compareTo方法,方法如下:

public int compareTo(Object o) {
if(o instanceof Employee) {
Employee p =(Employee)o;
return this.name.compareTo(p.name);
}
return 0;
}

在代码执行过程中发现,如果是TreeSet,就算打乱了Employee的顺序,输出结果仍然完成排序。

如果换成ArryList,就是没有拍过序的,可是我不是已经重写了compareTo方法了么。。。求解

解决方案

你的类是否继承了icompare接口,你调试看看是否执行了比较函数

解决方案二:

TreeSet 自动排序的,不管怎么打乱顺序。ArryList是有序不排序的,当然会乱

解决方案三:

TreeSet 自动排序的,不管怎么打乱顺序。ArryList是有序不排序的,当然会乱

解决方案四:

TreeSet 自动排序的,不管怎么打乱顺序。ArryList是有序不排序的,当然会乱

解决方案五:

虽然重写了compareTo()方法,但是是不起作用的。因为你的代码中没有调用Collections.sort()这个方法,可以查看api来使用这个函数

解决方案六:

TreeSet是自动排序的。。。。。建议多看API

解决方案七:

TreeSet是在add的时候会根据Comparable实现的接口继续拧排序,add完也就拍完序了。最终实际上用的是treemap
ArryList在add的时候是不排序的,可以通过Collections.sort(staff)的方式进行排序

解决方案八:

TreeSet是有序的集合,如果默认的排序方式不符合要求可以自定义一个比较器:实现接口Comparator 中的compare方法,然后在new TreeSet的时候把这个
比较器以参数的方式穿进去.
List是按照加入顺序add的,如果想排序的话也可以按照上面说的实现compar接口然后Collections.sort(list,(new Mycompare()));

时间: 2024-11-26 11:17:28

java-ArrayList 和TreeSet排序问题的相关文章

浅谈java Collection中的排序问题_java

这里讨论list.set.map的排序,包括按照map的value进行排序. 1)list排序 list排序可以直接采用Collections的sort方法,也可以使用Arrays的sort方法,归根结底Collections就是调用Arrays的sort方法. public static <T> void sort(List<T> list, Comparator<? super T> c) { Object[] a = list.toArray(); Arrays.

Java使用Comparable解决排序问题_java

本文实例讲述了Java使用Comparable解决排序问题的方法.分享给大家供大家参考.具体实现方法如下: 一次举重竞赛的比赛规则是:选手的成绩以成功举起的总重量来排序,举起总重量多的排在前面:当举起总重量相同时,按照体重来排序,体重轻的排在前面:要求程序读取数据文件作为输入,并按照上述规则排序后,打印出选手编号:数据文件说明如下:现有5名选手,其选手编号.成功举起的总重量及其体重如数据文件data4.txt,样例内容为: <p> <no>1</no> <lw&g

对象-java中有关TreeSet的一个小疑问

问题描述 java中有关TreeSet的一个小疑问 看书上说java所有集合框架的具体类都至少有两种构造方式,一种是无参构造方法,一种是用另一个已有的容器来构造. 比如先前已经有了一个HashSet类的对象hh,但是他内部的元素是无序的,而我们这时再创建一个TreeSet(hh),他就会根据hh中存有元素自带的compareTo方法自动排好序,并且这个排序过程只进行一次.而如果我们将这些带排序的元素逐个加入到TreeSet中去,则就要加一次排一次序,会更耗时间. 请问,是不是有所遇到这种用到Tr

Java ArrayList的不同排序方法_java

由于其功能性和灵活性,ArrayList是 Java 集合框架中使用最为普遍的集合类之一.ArrayList 是一种 List 实现,它的内部用一个动态数组来存储元素,因此 ArrayList 能够在添加和移除元素的时候进行动态的扩展和缩减.你可能已经使用过 ArrayList,因此我将略过基础部分.如果你对 ArrayList 还不熟悉,你可以参考它的 API 文档,可以很容易理解在 ArrayList 上执行基本的操作. 在这篇文章中,我将讨论 ArrayList 中一种极其重要的操作,你很

Java ArrayList 实现实例讲解_java

 ArrayList概述:  ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存.     ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,也可以使用concurrent并发包下的CopyOnWriteArrayList类.     ArrayList实现了Serializable接口,因此

Java ArrayList.toArray(T[]) 方法的参数类型是 T 而不是 E的原因分析_java

前两天给同事做 code review,感觉自己对 Java 的 Generics 掌握得不够好,便拿出 <Effective Java>1 这本书再看看相关的章节.在 Item 24:Eliminate unchecked warnings 这一节中,作者拿 ArrayList 类中的 public <T> T[] toArray(T[] a) 方法作为例子来说明如何对变量使用 @SuppressWarnings annotation. ArrayList 是一个 generic

JAVA ArrayList详细介绍(示例)_java

第1部分 ArrayList介绍ArrayList 是一个数组队列,相当于 动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口.ArrayList 继承了AbstractList,实现了List.它是一个数组队列,提供了相关的添加.删除.修改.遍历等功能.ArrayList 实现了RandmoAccess接口,即提供了随机访问功能.Randmo

[Java] ArrayList、LinkedList、Vector的区别

版权声明:请尊重个人劳动成果,转载注明出处,谢谢! 首先我们来看一下继承关系: 我们可以看出ArrayList.LinkedList.Vector都实现了List的接口.  接下来分别看一下三个数据结构的说明. public class ArrayList extends AbstractList  implements List, RandomAccess, Cloneable, Serializable List 接口的大小可变数组的实现.实现了所有可选列表操作,并允许包括 null 在内的

Java ArrayList 的不同排序方法

由于其功能性和灵活性,ArrayList是 Java 集合框架中使用最为普遍的集合类之一.ArrayList 是一种 List 实现,它的内部用一个动态数组来存储元素,因此 ArrayList 能够在添加和移除元素的时候进行动态的扩展和缩减.你可能已经使用过 ArrayList,因此我将略过基础部分.如果你对 ArrayList 还不熟悉,你可以参考它的 API 文档,可以很容易理解在 ArrayList 上执行基本的操作. 在这篇文章中,我将讨论ArrayList中一种极其重要的操作,你很有可