我是使用该Collections
课程的新手。
我想按降序对一堆考试分数进行排序,假设(430,400,372,500)
然后System.out.println()
按优点顺序显示数字(),这样 500 分获得第 1 位,430 分获得第 2 位等。
我怎么做?
我是使用该Collections
课程的新手。
我想按降序对一堆考试分数进行排序,假设(430,400,372,500)
然后System.out.println()
按优点顺序显示数字(),这样 500 分获得第 1 位,430 分获得第 2 位等。
我怎么做?
您可以通过多种方式实现这一目标。
假设我们有List
如下...
List<Integer> marks = new ArrayList<>(5);
marks.add(430);
marks.add(400);
marks.add(372);
marks.add(500);
你可以简单地做...
Collections.sort(marks);
int row = 0;
for (Integer mark : marks) {
System.out.println((++row) + ": " + mark);
}
这将输出...
1: 372
2: 400
3: 430
4: 500
但是等等,这不是我们想要的!
但是使用排序列表,我们可以...
Collections.reverse(marks);
row = 0;
for (Integer mark : marks) {
System.out.println((++row) + ": " + mark);
}
哪个输出...
1: 500
2: 430
3: 400
4: 372
好多了:D
现在,如果这看起来工作量很大,您还可以使用 aComparator
来更改项目的排序方式...
Collections.sort(marks, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return (o2 - o1);
}
});
它将按以下顺序生成列表...
1: 500
2: 430
3: 400
4: 372
更新
根据Iterating through a list in reverse order in java的答案,如果您只想显示结果(感谢 Boris the Spider),您还可以对列表进行反向迭代
Collections.sort(marks);
int row = 0;
ListIterator li = a.listIterator(a.size());
while(li.hasPrevious()) {
System.out.println(li.previous());
}
更新了线宽
如果您有兴趣了解标记上的“重量”,则需要修改线标记,使其仅在最后一个标记和下一个标记不再相等时增加...
List<Integer> marks = new ArrayList<>(Arrays.asList(new Integer[]{430, 400, 372, 400, 500}));
Collections.sort(marks, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return (o2 - o1);
}
});
int row = 0;
int last = -1;
for (Integer mark : marks) {
if (mark != last) {
row++;
}
System.out.println(row + ": " + mark);
last = mark;
}
哪个输出...
1: 500
2: 430
3: 400
3: 400
4: 372
现在,如果你想让输出更像......
1: 500
2: 430
3: 400
3: 400
5: 372 // Not the skipped line...
您需要知道单个标记匹配了多少次并相应地增加“行”...
int row = 0;
int last = -1;
int matches = 1;
for (Integer mark : marks) {
if (mark != last) {
row += matches;
matches = 1;
} else {
matches++;
}
System.out.println(row + ": " + mark);
last = mark;
}
Try Collections.sort, Collections.reverse
Collections.sort(sampleList);
Collections.reverse(sampleList);
First Collection.sort()
will arrange the assending order. And the use the Collection.reverse()
it will arrage all the list values into decending order.
只需您可以使用它
我假设你有array(int type) of marks
int MarksArr[] = { 421,421,416,430 }; // Array of your All Marks
List<Integer> marks = new ArrayList<Integer>();
for (int i = 0; i < MarksArr.length; i++)
marks.add(MarksArr[i]);
Collections.sort(marks);// this Will Sort in Acceding order
Collections.reverse(marks);// this will reverse the ArrayList (Descending order)
// Will Also Handle the Tie Case as per Your Comment o/p for position should be 1,2,2,4
for (int i = 0; i < marks.size(); i++) {
int pos = -1;
if (i != 0)
if (marks.get(i - 1).equals(marks.get(i)))
pos = i;
else
pos = i+1;
else {
pos = i + 1;
}
System.out.println("Pos :" + pos + " Marks:" + marks.get(i));
}
输出:
Pos :1 Marks:430
Pos :2 Marks:421
Pos :2 Marks:421
Pos :4 Marks:416