使用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())
- 您可以阅读由Vogella撰写的an example(link here)。请仔细阅读。
-
Another example这表明你实现..检查
Fruit
类
还有的Collections.sort()
两个版本。
Collections.sort(List)和Collections.sort(List,Comparator)。一个需要List
,另一个需要List
和Comparator
的实例。单个参数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()));
}
我必须使用刚才调用Collections.sort(items) – bassandguitar 2013-04-21 19:32:30
的那个好,但是基于什么字段? – NINCOMPOOP 2013-04-21 19:39:12
你是什么意思,我不明白对不起 – bassandguitar 2013-04-21 19:41:33
由于Java 8:
List<Item> items = new ArrayList<>();
// add elements
Collections.sort(items, Comparator.comparingLong(Item::getId));
所以我有项目实现可比- ,然后在我的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
是的......应该是这样的...... – Alex 2013-04-21 19:34:02
这就是我的想法,但是当我写Collections.sort(items)时它给了我一个错误;它说:\t - 令牌“项目”语法错误,VariableDeclaratorId预期后 \t此令牌 \t - 令牌(S),错位构建体 – bassandguitar 2013-04-21 19:40:58