如果 Java 中出现重复项,如何制作一个考虑插入顺序的优先级 int 列表?
How to make a priority int list that regards the insertion order in case of duplicates in Java?
我想制作一个输入 int 值的优先级列表。我知道该列表通常具有升序的自然顺序(如果我弄错了请纠正我)。但是我作为新手想要做的是对相同的值进行排序。
比如说,我输入了值 3、6、4、1、2、4、7、4,我期待一个升序 int 值列表。但我希望在上面的列表中第二个 4 具有较低的优先级,因此我希望它紧随第一个 4 值之后,第三个 4 值紧随第二个等等。
在 Java 中有任何 类 /方法吗?我应该在哪里寻找提示?
1如果要区分4和4,还得加点东西=>做一个class
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 祝你好运:您可以使用常规排序:它保留重复项的初始顺序:
看到这个post:
它给出:
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( )]
希望对您有所帮助!
我想制作一个输入 int 值的优先级列表。我知道该列表通常具有升序的自然顺序(如果我弄错了请纠正我)。但是我作为新手想要做的是对相同的值进行排序。
比如说,我输入了值 3、6、4、1、2、4、7、4,我期待一个升序 int 值列表。但我希望在上面的列表中第二个 4 具有较低的优先级,因此我希望它紧随第一个 4 值之后,第三个 4 值紧随第二个等等。
在 Java 中有任何 类 /方法吗?我应该在哪里寻找提示?
1如果要区分4和4,还得加点东西=>做一个class
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 祝你好运:您可以使用常规排序:它保留重复项的初始顺序:
看到这个post:
它给出:
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( )]
希望对您有所帮助!