gpt4 book ai didi

java - 不干扰原始 PriorityQueue 的 PriorityQueue 副本

转载 作者:行者123 更新时间:2023-11-30 07:05:50 24 4
gpt4 key购买 nike

我正在尝试复制一个 PriorityQueue 对象。

我的目标是在不修改我原来的 PriorityQueue 的情况下更改我的 Copy 的某些对象

为了这样做,我复制了我的 PriorityQueue 并删除了我的副本的一个值,但是当我检查我的 PriorityQueue 是否仍然相同时,不幸的是原始 PriorityQueue 也被更改了......如果你有欢迎提出任何建议。

请找到我尝试过的示例:

public class PQExample
{
public int id;
public int price;
public String name;
public long date;

public PQExample(int id, int price, String name, long time)
{
this.id = id;
this.price = price;
this.name = name;
this.date = time;
}

public static void main(String[] args)
{
PriorityQueueComparator pqc = new PriorityQueueComparator();
PriorityQueue<PQExample> PQ = new PriorityQueue<PQExample>(pqc);
int setID = 1000;
int setDate = 0;
PQ.add(new PQExample(setID++, 24 , "Mat", setDate++));
PQ.add(new PQExample(setID++, 25 , "Tommy", setDate++));
PQ.add(new PQExample(setID++, 22 , "Kate", setDate++));
PQ.add(new PQExample(setID++, 26 , "Mary", setDate++));
PQ.add(new PQExample(setID++, 24 , "Ronny", setDate++));
PQExample valueToDel = new PQExample(1000,22,"Mat",0);

PriorityQueue<PQExample> PQCopy = new PriorityQueue<PQExample>();
PQCopy = PQ;

//Now I want to delete only in PQCopy and not in PQ
PQCopy.remove(valueToDel);

//Unfortunately Mat was deleted of both objects : PQ and PQCopy...
for (int i = 0; i < 4; i++) {
System.out.println("Queue in: " + i + " is " + PQ.peek().name + " with the price of " + PQ.peek().price);
PQ.poll();
}
}
@Override
public boolean equals(Object o)
{
if (o instanceof PQExample)
{
PQExample pqExample = (PQExample)o;
return id == pqExample.id;
}
return false;
}


class PriorityQueueComparator implements Comparator<PQExample>
{
@Override
public int compare(PQExample o1, PQExample o2) {
if (o1.price < o2.price){return 1;}else if (o1.price > o2.price){return -1;}
else
{if (o1.date<o2.date){return -1;}else{return 1;}}
}
}

最佳答案

PQcopy 只是对实际 PriorityQueue 对象的第二个引用。您想要克隆 原始PQ 而不是仅仅分配引用。 PriorityQueue has a constructor这是为你做的:

PriorityQueue<PQExample> PQCopy = new PriorityQueue<PQExample>(PQ)

顺便说一句,您应该遵循 Java 的大写约定 - 以大写字母开头的变量名是不受欢迎的。

关于java - 不干扰原始 PriorityQueue 的 PriorityQueue 副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26281350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com