所以我似乎遇到了一个小问题。我试图用字符串存储一些双打(就像它们的名字一样),然后能够按降序排序。
我还希望将它们存储在某个地方,比如hashmap,arraylist,list等......我不确定哪个是最好的。
有点像 让我们假设它们以某种方式存储,如hashmap,list等......
Bob: 6.0
Mary: 5.4
Bill: 6.3
Ann: 5.0
Jim: 6.0
然后将它们输出为:
Bill: 6.3
Bob: 6.0 //Notice, it must be able to support duplicates.
Jim: 6.0
Mary: 5.4
Ann: 5.0
我希望这对其他人有意义,如果不让我知道,我可以尝试清理它。
P.S。我找了这样的其他线程,但找不到适合我需要的线程。
编辑:我似乎找到了一种可以某种方式运作的方式......如果你有兴趣看到,我在这里有一个pastebin链接:http://pastebin.com/qWJbD5MZ
现在,代码是基于Bukkit API构建的,因此它可能对其他人没有用处。
答案 0 :(得分:9)
最简单的方法是创建一个包装类:
class Person {
String name;
double score;
//constructor, getters etc.
}
然后将这些人列入名单:
List<Person> list = Arrays.asList(new Person("Bob", 6),
new Person("Mary", 5.4),
new Person("Bill", 6.3),
new Person("Ann", 5.0),
new Person("Jim", 6.0));
最后用比较分数的自定义比较器对它们进行排序:
Collections.sort(list, comparator);
比较器看起来像:
Collections.sort(list, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
//sort by score
if (o1.score != o2.score)
return Double.compare(o1.score, o2.score);
//if same score, sort by name
return o1.name.compareTo(o2.name);
}
});
答案 1 :(得分:2)
如果您不需要能够按键查找值,最简单的方法是定义一个具有名称和整数属性的类型,然后让它实现java.lang.Comparable
接口通过比较整数值,并将数据存储在TreeSet中以获取已排序的集合。
如果您希望能够通过字符串值查找值并使它们按整数排序,则可能需要组合两个数据结构。您可以通过将数据存储在HashMap中同时具有已排序的集合来完成此操作,但您必须做一些工作以保持两个结构之间的数据同步。
答案 2 :(得分:0)
您可以使用 Arrays.sort 方法
public class Test {
public static void main(String[] args) throws FileNotFoundException, IOException, ParseException {
Person[] personArray = {new Person("Bob", 6), new Person("Mary", 5.4), new Person("Bill", 6.3),new Person("Ann", 5.0),new Person("Jim", 6.0)};
Arrays.sort(personArray,new MyComparator());
for(Person person:personArray){
System.out.println(person.getName()+" : "+person.getScore());
}
}
}
class Person {
String name;
double score;
Person(String name, double score) {
this.name=name;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
}
class MyComparator implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
return o1.name.compareTo(o2.name);
}
}