簡體   English   中英

拍攝集合快照

[英]Take a snapshot of a Set

我已經設置了項目,並希望將其發送進行並行處理。

但是,我想在之后修改原始集合,這會導致一些並發問題,因此,我認為拍攝快照或其中的某個集合並發送THAt進行處理將是很好的選擇。

clone會很好嗎? 或者我應該做一個新的Set它自己? 還是我錯過了一些不錯的方法?


編輯:我現在正在使用它,它似乎工作得很好:

public class BufferedHashSet<E> extends HashSet<E> {

    private List<E> toAdd = new LinkedList<E>();
    private List<Object> toRemove = new LinkedList<Object>();

    @Override
    public boolean add(E e)
    {
        synchronized (this) {
            toAdd.add(e);

            return true;
        }
    }       

    @Override
    public boolean remove(Object e)
    {
        synchronized (this) {
            toRemove.add(e);

            return true;
        }
    }       

    public void flush()
    {
        synchronized (this) {
            for (E e : toAdd) {
                super.add(e);
            }

            for (Object e : toRemove) {
                super.remove(e);
            }

            toAdd.clear();
            toRemove.clear();
        }
    }
}

在我看來,最優雅的解決方案是使用Set.addAll()方法。

Set set;
Set snapshot = new TreeSet<>(); //or any Set implementation you use
snapshot.addAll(set);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM