Java 如何为重复的对象列表排序

Java 如何为重复的对象列表排序,java,Java,如何在java中对重复的对象列表进行排序?基本上,排序后列表中的每个对象都应该是uniqe。也许有人知道一个很好的例子。要从列表中仅获取唯一元素的集合,只需将所有元素添加到列表中即可 listl=newarraylist(); Set s=新哈希集(l); 如果您只想删除重复项,请尝试以下操作: List<Object> l; //Your list of data for(int i = l.size()-1; i > 0; i--) for(int j = i; j

如何在java中对重复的对象列表进行排序?基本上,排序后列表中的每个对象都应该是uniqe。也许有人知道一个很好的例子。

要从列表中仅获取唯一元素的集合,只需将所有元素添加到列表中即可

listl=newarraylist();
Set s=新哈希集(l);

如果您只想删除重复项,请尝试以下操作:

List<Object> l; //Your list of data

for(int i = l.size()-1; i > 0; i--)
  for(int j = i; j > 0; j--)
    if(l.get(i).equals(l.get(j))) //or == for primitives
      l.remove(j);
列表l//您的数据列表
对于(int i=l.size()-1;i>0;i--)
对于(int j=i;j>0;j--)
if(l.get(i).equals(l.get(j))//或==对于原语
l、 移除(j);

如果要应用特定的排序,可以在
If
语句之后的相同
for
循环中执行。这实际上是与HashSet相比的唯一优势。您可以将列表中的元素添加到集合中,然后使用这些元素创建一个新列表,如下所示:

List<Object> originalList = new ArrayList<Object>();
// the elements of originalList get added here

Set<Object> set = new HashSet<Object>(originalList);
List<Object> newList = new ArrayList<Object>(set);
List originalList=new ArrayList();
//这里添加了originalList的元素
Set Set=新哈希集(原始列表);
List newList=新阵列列表(集合);
请注意:

  • 我使用
    Object
    作为列表和集合的类型,将其替换为适合您需要的适当类型
  • 要使上述操作正常工作,列表中的对象必须同时覆盖
    hashCode
    equals
  • 新列表中的元素顺序将与原始列表中的元素顺序不同

正如其他人已经指出的,您可以使用一套数据结构。但是,由于您正在寻找一个排序的列表,而不是使用HashSet,因此您可以选择a,它的元素默认按自然顺序排序

例如:

List List=new ArrayList();
增加(8);
增加(5);
增加(3);
增加(5);
增加(9);
设置s=新树集(列表);
迭代器itr=s.Iterator();
while(itr.hasNext()){
System.out.print(itr.next()+);
}
输出:


3 5 8 9

如何使用构造函数:HashSet(CollectionThis不按编写的方式工作,因为当您从列表l中删除第j个元素时,所有较高的元素都会向下移动,索引也会混乱。当使用索引删除元素时,请始终向后工作,例如(
)for(int i=l.size()-1;i>=0;i--)
非常低效,你在集合的每个项目中循环一次集合,如果你有一个8个项目的集合,即8+7+6+5+4+3+2+1或36,就像你每次少做一个一样),但然后说你有24个项目。。。(298),每次向大小中添加一个,它都会增加最大值,但速度不是很快。您想“排序然后删除重复项”还是简单地“删除重复项”就足够了?如果没有,那么“删除重复项然后排序”呢?例如,是否有特别的理由首先排序(或根本不排序)--如果不创建自己的重复删除程序,将相同价值的项目的排序考虑在内?;-)请相应地更新标题/问题。他希望对其进行排序的原因是为了便于删除重复项。然而+1是唯一一个似乎阅读了整个作品的人。
List<Object> originalList = new ArrayList<Object>();
// the elements of originalList get added here

Set<Object> set = new HashSet<Object>(originalList);
List<Object> newList = new ArrayList<Object>(set);
List<Integer> list = new ArrayList<Integer>();

list.add(8);
list.add(5);
list.add(3);
list.add(5);
list.add(9);

Set<Integer> s = new TreeSet<Integer>(list);

Iterator<Integer> itr = s.iterator();
while(itr.hasNext()) {
    System.out.print(itr.next() + " ");
}