gpt4 book ai didi

java - 如何对 Iterable 进行排序

转载 作者:行者123 更新时间:2023-12-01 16:52:49 25 4
gpt4 key购买 nike

我有一个实现 Iterable 的自定义列表(不是集合!!)。我不实现 List,因为这会带来太多我不想要、也不需要的方法。

有关我的自定义列表的更多信息:

  • 所有成员均为最终成员
  • 每个 CustomList 都可以有一个“SubList”,它是另一个 CustomList
  • 每个 CustomList 都必须有一个 MyThing
  • 示例:假设 A 是 MyThing 的一个对象,B 是 MyThing 的一个对象,则可以存在一个仅包含 A 的 CustomList(我们称之为 AList)和一个包含 Item B 和 AList 作为子列表的 CustomList。
  • CustomList 有一个构造函数,可以采用 MyThings 数组

这是我的类(class):

public class CustomList implements Iterable<MyThing> {

private final CustomList sublist;

private final MyThing thing;

// getters and other methods
}

我有一个

Comparator<MyThing>

我的事情:

public class MyThing {

private final IntArrayList values;
// more members and methods
}

我想获得一个排序副本作为我的一个自定义列表的自定义列表(如果我不需要我的比较器,那不会是问题,但这就是我到目前为止解决它的方法)

到目前为止我所做的是:

  1. 将我的 CustomList 转换为列表
  2. 对该列表进行排序(使用比较器)
  3. 将其传回自定义列表

这很好用,但我想知道是否还有另一种(也许更优雅的方式)来实现我的目标。

最佳答案

核心 Java 库不公开与 Iterable 一起使用的排序算法。

内置排序将元素复制到临时数组。 (ArrayList 通过将其内部数组传递给排序函数来对此进行优化。)我建议您对当前方法进行的一个小改进是在 Object[] 之间来回复制元素> 而不是 List。然后使用 Arrays.sort() 而不是 Collections.sort()。这样可以节省创建一个未真正使用的 List 对象的时间。

如果您想对自定义集合执行就地排序,您可以自己实现排序算法。这并不是很难,但更多的代码意味着更多的错误、更多的维护,并且您不会从与 JRE 捆绑在一起的改进中受益(例如从“MergeSort”迁移到“TimSort”)。只有您才能说这种好处是否值得。

关于java - 如何对 Iterable 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36553550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com