使用Collections.sort(arrayListName)对ArrayList中的对象进行排序ArrayListName

问题描述:

我有一个库存类,它创建一个ArrayList,其中包含一个对象Item,它也是一个类。我知道我必须调用 Collections.sort(items);才能对ArrayList进行排序(通过这种方式称为项目)。这个任务说我必须在Item类上使用一个接口,我不知道是否要实现Comparator或Comparable,然后恭敬地写下compareTo()方法或compare()方法的内容。在声明我的ArrayList之后,我也调用了Collections.sort(items),这样好吗?使用Collections.sort(arrayListName)对ArrayList中的对象进行排序ArrayListName

编辑:我的老师刚才澄清说她希望我们在Item类上实现Comparable<Item>

你必须实现Comparable,也将努力Collections.sort

如果你需要一个新的比较,不希望使用Comparable你可以创建一个新的Comparator,并用它喜欢:Collections.sort(list, new MyComparator())

  1. 您可以阅读由Vogella撰写的an example(link here)。请仔细阅读。
  2. Another example这表明你实现..检查Fruit
+0

所以我有项目实现可比,然后在我的compareTo定义()作为 公众诠释的compareTo类(其他) \t { \t \t if(this.id.compareToIgnoreCase((other.getId())== 0) \t \t \t return 0; \t else if(this.id.compareToIgnoreCase(other.getId())> 0) \t return 1; \t else \t return -1; \t} 现在我只需在库存类中调用Collections.sort(items)? – bassandguitar 2013-04-21 19:30:56

+0

是的......应该是这样的...... – Alex 2013-04-21 19:34:02

+0

这就是我的想法,但是当我写Collections.sort(items)时它给了我一个错误;它说:\t - 令牌“项目”语法错误,VariableDeclaratorId预期后 \t此令牌 \t - 令牌(S),错位构建体 – bassandguitar 2013-04-21 19:40:58

还有的Collections.sort()两个版本。

Collections.sort(List)Collections.sort(List,Comparator)。一个需要List,另一个需要ListComparator的实例。单个参数sort()将会期望您的班级实施Comparable并覆盖compareTo()方法。两个参数sort()方法需要Comparator的实例,其中您已实施Comparator并覆盖其compare()方法。

对象应该实现Comparable如果这是对类进行排序的明确自然方法,并且任何需要对类进行排序的人通常都希望这样做。

但是,如果排序是该班级的不常见用例,或者可能有多个排序顺序,那么Comparator是更好的选择。

此外,我声明我的ArrayList后,我有Collections.sort(项目)调用权,这是好吗?

当您需要对List进行排序时,您会拨打sort()。在sort()之后添加项目将不会自动对List进行排序,以适应由于添加新元素而导致列表项目排序的变化。

样品实施:

public int compareTo (Item other) { 
    return new Integer(this.getID()).compareTo(new Integer(other.getID())); 
} 
+0

我必须使用刚才调用Collections.sort(items) – bassandguitar 2013-04-21 19:32:30

+0

的那个好,但是基于什么字段? – NINCOMPOOP 2013-04-21 19:39:12

+0

你是什么意思,我不明白对不起 – bassandguitar 2013-04-21 19:41:33

由于Java 8:

List<Item> items = new ArrayList<>(); 
// add elements 
Collections.sort(items, Comparator.comparingLong(Item::getId));