我想複製一個PriorityQueue對象。PriorityQueue的副本,而不會干擾原始的PriorityQueue
我的目標是改變我複製的一些目標沒有改變我原來的PriorityQueue
爲了做到這一點我做了我的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;}}
}
}
感謝您的快速回答,這是我第一個改變構造函數的反射,但事實上它仍然是在兩個對象中刪除。 – Imagine 2014-10-09 15:00:31
@Imagine你必須做一些其他的事情,用拷貝構造函數創建的集合是一個新對象,並且'PQ'上的結構變化不會影響'PQCopy',反之亦然。查看我的答案編輯的例子。 – 2014-10-09 15:06:24
@Imagine請注意,隊列包含引用,而不是對象,因此任何對元素屬性的更改都將在這兩個集合中註明。 – 2014-10-09 15:12:52