我想创建一个输入 int 值的优先级列表。我知道该列表通常具有升序的自然顺序(如果我弄错了,请纠正我)。但作为新手,我想做的就是对相同的值进行排序。
假设我输入了值 3、6、4、1、2、4、7、4,我期望得到一个升序 int 值列表。但我希望在上面的列表中第二个 4 具有较低的优先级,因此我希望它紧随第一个 4 值之后,第三个 4 值紧随第二个值之后,等等。
Java 中有相关的类/方法吗?我应该在哪里寻找提示?
最佳答案
1如果你想区分4和4,你必须添加一些东西=>创建一个类
2 不要重新发明轮子,使用集合(接受重复项)并排序
3那么你必须实现一些比较(implements Comparable)
看到这个:How to sort an ArrayList in Java
它给出了这个:
// It is like Integer + !
public class IntegerPlus implements Comparable<IntegerPlus>
{
int value=0;
String id="";
public IntegerPlus(int _val) {value=_val;}
public IntegerPlus(int _val, String _id) {value=_val; id=_id;}
@Override
public String toString() {return value+"("+id+")";}
@Override
public int compareTo(IntegerPlus _other)
{
if (value>_other.value) return 1;
if (value<_other.value) return -1;
return 0;
}
}
4 祝你好运:您可以使用常规排序:它保留重复项的初始顺序:
查看这篇文章:Does Collections.sort keep order on equal elements?
它给出:
IntegerPlus ip1=new IntegerPlus(4,"first");
System.out.println(ip1);
List<IntegerPlus> lipl=new ArrayList<IntegerPlus>();
lipl.add(ip1);
lipl.add(new IntegerPlus(2,"b"));
lipl.add(new IntegerPlus(4,"second"));
lipl.add(new IntegerPlus(1));
lipl.add(new IntegerPlus(3));
lipl.add(new IntegerPlus(5));
lipl.add(new IntegerPlus(6));
lipl.add(new IntegerPlus(4,"third"));
lipl.add(new IntegerPlus(2,"c"));
System.out.println("BEFORE SORT:"+lipl);
=> 排序前:[4(第一), 2(b), 4(第二), 1(), 3(), 5(), 6(), 4(第三), 2(c)]
Collections.sort(lipl);
System.out.println("AFTER SORT:"+lipl);
=> 排序后:[1(), 2(b), 2(c), 3(), 4(第一), 4(第二), 4(第三), 5(), 6()]
希望对你有帮助!
关于java - 如何制作一个考虑插入顺序的优先级 int 列表,以防 Java 中出现重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34377845/