2011-12-28 25 views
0

Java文檔說「TreeSet在內部保持其元素排序」。排序在java中的列表/樹中設置的意義

這裏是什麼意思排序?它是否意味着排序?如果是這樣,那麼排序和排序有什麼區別?

+0

是的,它意味着排序。 – Thilo 2011-12-28 01:41:01

+0

@Thilo Ordered比排序更一般。 – 2011-12-28 01:48:22

+0

在這種情況下,它意味着排序,但。請參閱下面的答案。 – Thilo 2011-12-28 01:51:44

回答

1

「有序」指的是存在其中的元素可以被檢索到的定義的順序。這意味着,當您遍歷集合時,您知道按哪個順序獲取元素。

在這種情況下它意味着「排序」(因爲TreeSet中根據給定的比較器排列的元件,即它對其進行排序)。

在其他情況下(例如,隊列),它可以意味着「插入順序」。

在名單的情況下,你可以指定自己的命令(通過指定每個元素的索引),而列表將讓他們在這個順序(即獨立的廣告訂單或任何排序順序)。

對比度這個到HashSet,在檢索時,這使得關於元素的順序沒有保證。

+1

一個'List'將是一個有序的但不是[必然]排序的集合的明顯例子。 'LinkedHashSet'有一個關於它的命令。 – 2011-12-28 01:47:52

+0

更新了一個提到列表,謝謝。 – Thilo 2011-12-28 01:51:02

1

是的。它使用其元素類型的自然排序順序(例如,字符串的字母順序,整數的數字順序等)排序,除非提供比較器來定義排序順序。

這些元素使用它們的自然順序或在創建集合時提供的Comparator進行排序,具體取決於使用哪個構造函數。

TreeSet Javadoc

+0

那麼,爲什麼不是就Java文檔說「中​​的元素進行排序」 – Rekha 2011-12-28 01:36:04

+1

@Rekha - 因爲排序並不一定意味着「排序」(像字母)。它們可以是反向排序的,也可以是您認爲是「排序」的順序,但您也可以更改比較函數以完全執行其他操作。 – birryree 2011-12-28 01:38:07

+0

「排序」可能意味着元素已按照正確的順序從之前的狀態進入正確的順序。例如TreeSet就不是這種情況 - 每當一個元素被添加到該集合中時,它就被添加到正確的位置,所以排序永遠不會變得必要。 – 2011-12-28 01:39:56

1

TreeSet的順序,從Javadoc

根據TreeMap一個NavigableSet實現。這些元素使用它們的自然順序或者在創建集合時提供的比較器進行排序,具體取決於使用哪個構造函數。

這裏的「自然順序」是指類可以實現Interface Comparable,它允許您指定compareTo()的行爲。

您還可以使用TreeSet構造函數,它允許你指定一個Comparator類,將決定排序的類型:http://docs.oracle.com/javase/6/docs/api/java/util/TreeSet.html#TreeSet(java.util.Comparator