我创建了一个ArrayList,其中包含对包含各种数据量的对象的引用。
我希望通过数据的某些元素对对象进行排序。
我使用collections.sort
以及定义新比较器的匿名类成功地完成了这项工作。
我在我创建的每个新比较器中都取得了成功,这导致了正确的排序顺序。
对于相同的ArrayList,你如何制作一个比较器来提供ArrayList顺序的原始输入。我知道ArrayList保存了添加对象的顺序,即插入顺序。但是在使用其他比较器对ArrayList进行排序后,我如何将ArrayList排序回原来的顺序?这是困扰我的一件事,我似乎无法弄明白。
编辑:我应该澄清这是一个赋值,其中指令说包括一个默认/原始比较器来获取未排序的输入。鉴于我们提到的内容,这对我来说没有意义。 ArrayList将在添加时保存插入顺序,但是当您对它进行排序时它会丢失。我不知道如何创建一个比较器来对原始列表进行排序。
Edit2:我得到一个ArrayList,它应该存储一些包含一些数据元素的对象,这些数据元素将被排序,例如按名称或年龄排序。这些比较器很容易制作,我成功了。该分配还需要一个原始比较器,用于显示插入时的数据。现在这些比较器正在方法调用中传递,其中该方法将在每个不同的比较器上使用collections.sort。它要求首先使用原始比较器。
原始比较器的想法似乎不合逻辑。首先使用的事实,所以还没有进行其他排序,这使得它似乎只是因为它适合调用方法来显示数据的参数列表。换句话说,我想原来的比较器应该什么也不返回..?
答案 0 :(得分:0)
除了制作克隆(上面评论)之外,对象还包含一个单独的字段,用于跟踪插入到数组中的顺序并为其编写比较器。
答案 1 :(得分:0)
要求首先使用原始比较器。
这意味着比较器不需要恢复原始订单,这是没有意义的(不可能的),但是没有< / em>用于排序时,即保留原始订单不变。
引用sort()
的javadoc:
此类保证稳定:由于排序,相同的元素不会被重新排序。
这意味着如果您传入一个声称所有对象都相等的比较器,则不会重新排序。
// Java 8 example using lambda expression
Collections.sort(list, (a,b) -> 0); // No-op. All elements compare equal