【发布时间】:2016-08-08 03:27:28
【问题描述】:
我创建了一个 ArrayList,其中包含对包含各种数据量的对象的引用。
我希望按对象数据的某些元素对对象进行排序。
我使用collections.sort 以及定义新比较器的匿名类成功地做到了这一点。
我在创建的每个新比较器中都取得了成功,这导致了正确的排序顺序。
对于同一个 ArrayList,您如何制作一个比较器来提供 ArrayList 顺序的原始输入。我知道 ArrayList 保存了它们添加的对象的顺序,即插入顺序。但是在使用其他比较器对 ArrayList 进行排序之后,我将如何将 ArrayList 排序回原来的顺序?这是困扰我的一件事,我似乎无法弄清楚。
编辑:我应该澄清这是一个分配,其中的说明说包括一个默认/原始比较器来获取未排序的输入。鉴于我们提到的,这对我来说没有意义。 ArrayList 在添加时会保存插入顺序,但在排序时会丢失。我不明白如何创建一个比较器来对原始列表进行排序。
Edit2:我得到一个 ArrayList,它预计会存储一些对象,这些对象包含一些将被排序的数据元素,例如按他们的名字或他们的年龄。这个比较器很容易制作,我成功地做到了。该分配还需要一个原始比较器,以在插入数据时显示数据。现在这些比较器在方法调用中传递,其中该方法将在每个不同的比较器上使用 collections.sort。它要求首先使用原始比较器。
原始比较器的想法似乎完全不合逻辑。首先使用的事实,所以还没有进行其他排序,这使得它看起来只是为了适合调用方法来显示数据的参数列表。所以换句话说,我猜原来的比较器应该什么都不返回......?
【问题讨论】:
-
我不确定我是否理解您发布的问题。上半场似乎与下半场完全无关。排序后先前的排序会丢失,因此无法返回插入顺序,因为没有任何跟踪。如果您需要跟踪,请不要对数组进行排序,而是创建一个列表副本并对其进行排序,保留原始列表。
-
在排序之前克隆你的
ArrayList以存储状态;并且您可以稍后使用该克隆副本。 -
如果是家庭作业问题,请给出准确的措辞,不要用自己的话来描述。但是,请注意how do I ask homework questions? 线程,因为家庭作业问题通常是人为设计的,有时对于那些以您提出问题的语言谋生、尝试或习惯使用的人来说是无稽之谈(这感觉就像是废话类)