構造函數LinkedHashSet(Collection<? extends E> c)
是否保證其參數的保存順序,假設參數是一個有序集合?我們如何確定這一點?LinkedHashSet構造函數是否保存順序
的Javadoc文檔隻字未提順序:
構造一個新的鏈接哈希具有相同元素的 指定集合設置。鏈接的哈希集創建時的容量足以容納指定集合 中的元素和默認加載因子(0.75)。
我沒有看到任何理由不維護秩序,但我想知道它是否有保證(目前和未來的實施)。
構造函數LinkedHashSet(Collection<? extends E> c)
是否保證其參數的保存順序,假設參數是一個有序集合?我們如何確定這一點?LinkedHashSet構造函數是否保存順序
的Javadoc文檔隻字未提順序:
構造一個新的鏈接哈希具有相同元素的 指定集合設置。鏈接的哈希集創建時的容量足以容納指定集合 中的元素和默認加載因子(0.75)。
我沒有看到任何理由不維護秩序,但我想知道它是否有保證(目前和未來的實施)。
縱觀Java的8實現java.util.LinkedHashSet的你有這樣的構造:
public LinkedHashSet(Collection<? extends E> c) {
super(Math.max(2*c.size(), 11), .75f, true);
addAll(c);
}
那麼什麼是addAll
的內容?
public boolean addAll(Collection<? extends E> c) {
boolean modified = false;
for (E e : c)
if (add(e))
modified = true;
return modified;
}
addAll
使用一個循環,通過構造函數中使用的集合:
for (E e : c)
這意味着,如果在構造函數中使用收取執行是有序的(如java.util.TreeSet
),那麼新的內容LinkedHashSet
實例也將被訂購。
Java 9中的實現非常相似。
是的,在訂購傳入收集的情況下訂單被保留。
您只能通過檢查此特定情況下的實現來確定這一點。
接受因爲「您只能通過檢查此特定情況下的實施來確定這一點。」 – AnnTea
[JDoc](https://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashSet.html) - >'這個鏈表定義了迭代順序,它是順序元素被插入集合(插入順序)。請注意,如果元素重新插入到集合中,則插入順序不受影響。 (如果s.contains(e)在調用之前立即返回true,則調用s.add(e)時,將元素e重新插入到集合s中。)'基本上它維護插入順序。這允許您按照插入元素的順序遍歷集合。 – Sedrick
@SedrickJefferson好的。該文件的這一部分表明,訂單將被保留。 – AnnTea