java - 如何制作一个考虑插入顺序的优先级 int 列表,以防 Java 中出现重复?

标签 java priority-queue

我想创建一个输入 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/

相关文章:

java - 透明 PNG 在 LWJGL 中不透明

c# - 我应该将Power Collection的OrderedMultiDictionary用作优先级队列吗?

c++ - 使用优先级队列结构?

java - 如何比较Java PriorityQueue中的任意元素?

c++ - c++中STL的priority_queue

java - 骰子滚动模拟

java - 创建 BiConsumer 作为不带反射的字段 setter

java - Android 位置字符串问题

java - PriorityQueue.poll() 调用 compareTo()?

java - Android 应用程序, "source not found"调试错误 - 尝试下载 Android 源代码