gpt4 book ai didi

java - 对对象进行排序的数据结构

转载 作者:行者123 更新时间:2023-11-30 06:32:14 24 4
gpt4 key购买 nike

我正在寻找一种可以根据给定整数对对象进行排序的数据结构。像这样:

Object    Score
Object1 86
Object2 85
Object3 85

每个对象都是唯一的,但可以有重复的分数。试图设计一种方法来说明 Map 对象如何执行此操作,但无法弄清楚。

结构可以在插入期间/之后对对象进行排序,或者当我隐式调用排序时。

是否已经有一个结构可以做到这一点?还是我应该自己编码?

最佳答案

如果您想要唯一值,请尝试将对象放在 SortedSet 中;如果您想要查看重复项,请尝试将对象放在 List 中,以及自定义 Comparator 根据他们的“分数”对他们进行排序。

提供您自己的比较器将允许您指定对象应该根据它们的 score 字段排序以及如何排序。

比较器也是可重复使用的,如果您愿意,可以轻松换入/换出,比如对项目进行降序排序。

举个例子:

  class ScoreComparator implements Comparator <ObjectHolder> {
@Override
public int compare(ObjectHolder o1, ObjectHolder o2) {
return o1.getScore().compareTo(o2.getScore());
}
}

class DescendingScoreComparator implements Comparator <ObjectHolder> {
@Override
public int compare(ObjectHolder o1, ObjectHolder o2) {
return o2.getScore().compareTo(o1.getScore());
}
}


class ObjectHolder {
Object obj;
Integer score;

public ObjectHolder(Object o, Integer score) {
this.obj = o;
this.score = score;
}

public Object getObject() {
return obj;
}
public Integer getScore() {
return score;
}
}


public void showExample() {
SortedSet<ObjectHolder> sortedSet = new TreeSet<ObjectHolder>(new ScoreComparator());
sortedSet.add(new ObjectHolder("addedFirst", 55));
sortedSet.add(new ObjectHolder("addedSecond", 25));
sortedSet.add(new ObjectHolder("addedThird", 75));
sortedSet.add(new ObjectHolder("addedFourth", 25));
sortedSet.add(new ObjectHolder("addedFifth", 95));

// The resulting set will only have 4 items since sets don't allow duplicates
for (ObjectHolder holder : sortedSet) {
System.out.println(holder.getScore());
}

List<ObjectHolder> list = new LinkedList<ObjectHolder>();
list.add(new ObjectHolder("addedFirst", 55));
list.add(new ObjectHolder("addedSecond", 25));
list.add(new ObjectHolder("addedThird", 75));
list.add(new ObjectHolder("addedFourth", 25));
list.add(new ObjectHolder("addedFifth", 95));

Collections.sort(list, new ScoreComparator());

// The resulting set will only have 5 items since lists allow duplicates
System.out.println();
for (ObjectHolder holder : list) {
System.out.println(holder.getScore());
}

Collections.sort(list, new DescendingScoreComparator());

System.out.println("\nWill print 5 items, but this time in descending order");
for (ObjectHolder holder : list) {
System.out.println(holder.getScore());
}
}

下面是上面代码的输出:

Will print 4 unique items since sets don't allow duplicates

25 55 75 95

Will print 5 items since lists do allow duplicates

25 25 55 75 95

Will print 5 items, but this time in descending order

95 75 55 25 25

关于java - 对对象进行排序的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8946104/

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