0

以下のコードを検討してください。

public class Bid {

private double pe;

private List<ResChar> resourceList;


protected Map<Integer,Integer>scheduleOfSeller ;

public Map<Integer, Integer> getScheduleOfSeller() {
    return scheduleOfSeller;
}

public void setScheduleOfSeller(Map<Integer, Integer> scheduleOfSeller) {
    this.scheduleOfSeller = scheduleOfSeller;
}


private int bidId;

public int getBidId() {
    return bidId;
}

public void setBidId(int bidId) {
    this.bidId = bidId;
}

public double getPe() {
    return pe;
}

public void setPe(double pe) {
    this.pe = pe;
}

public List<ResChar> getResourceList() {
    return resourceList;
}

public void setResourceList(List<ResChar> resourceList) {
    this.resourceList = resourceList;
}


public Bid(int bidId,double pe, List<ResChar> resourceList){
    setBidId(bidId);
    setPe(pe);
    setResourceList(resourceList);
    this.scheduleOfSeller = new HashMap<Integer,Integer>();
}

}

次のような入札のコピーコンストラクターを作成したい:

public class BidCopy{

public Bid bid;

public BidCopy(Bid bidBuyer){
    List<ResChar> resList = new LinkedList<ResChar>(); 
    for (ResChar elt : bidBuyer.getResourceList()){
        ResCharCopy eltCopy = new ResCharCopy(elt);
        resList.add(eltCopy.elt);
    }
    this.bid = bidBuyer;
    this.bid.setResourceList(resList);
}

}

そのようなコピーを作成するために私が知っている唯一の解決策は、次のように進めることです:

public class BidCopy{

public Bid copy;

public BidCopy(Bid bid){
    List<ResChar> resList = new LinkedList<ResChar>(); 
    for (ResChar elt : bid.getResourceList()){
        ResCharCopy eltCopy = new ResCharCopy(elt);
        resList.add(eltCopy.elt);
    }
    this.copy = new Bid(bid.getBidId(), bid.getPe(), resList);
}

}

それで、「入札」オブジェクトのコピーをより効果的に作成するための他の解決策があるかどうか知りたいですか?

4

2 に答える 2

0

存在しない。一部のコレクションには「コピー コンストラクター」がありますが、これらのコンストラクターは要素の参照をコピーし、新しい要素を作成しません。

ただし、初期リストのサイズをコンストラクターに送信することで、リストの作成自体を「最適化」できます。

List<X> newList = new LinkedList<X>(oldList.size());
于 2013-06-15T11:35:19.363 に答える
0

Bid オブジェクトのコピー コンストラクターを作成することをお勧めします (コピー用の特定のクラスではありません)。Bid は、次のようにメソッドではなくフィールドから作成されます。

public class Bid {
int ID;
String description;
Object bidStuff;

// ...as before

public Bid(Bid bid) {
    this.ID = bid.ID;
    this.description = bid.description;
    this.bidStuff = bid.bidStuff;
}

public static void main(String[] args) {
    List<Bid> original = new ArrayList<>();
    // ..populate it
    List<Bid> copy = new ArrayList<>(original.size());

    for (Bid b : original) {
        copy.add(new Bid(b));
    }
}
}

他の誰かがビッドの複数のコピーを作成することをいじりたくない場合は、コピー コンストラクターを保護またはパッケージ保護することもできます。

于 2013-06-15T11:53:51.427 に答える