我知道一個java treeset不能有相同的元素,所以我必須以某種方式區分一個元素,即使它們具有相同的「值」。我希望能夠排列元素,並且我注意到一個有趣的行爲。TreeSet中的排名元素
TreeSet<Integer> set = new TreeSet<Integer>(new Comparator<Integer>()
{
public int compare(Integer arg0, Integer arg1)
{
if(arg0 > arg1)
return -1;
return 1;
}
});
set.add(40);
set.add(20);
set.add(30);
set.add(20);
for(Integer i:set)
{
System.out.println("Rank: "+(set.headSet(i,false).size()+1)+" Number: "+i);
}
這是輸出:
Rank: 1 Number: 40
Rank: 3 Number: 30
Rank: 5 Number: 20
Rank: 5 Number: 20
這是耳機是應該做的:
Returns a view of the portion of this set whose elements are less than (or equal to, if inclusive is true) toElement. The returned set is backed by this set, so changes in the returned set are reflected in this set, and vice-versa. The returned set supports all optional set operations that this set supports.
我在按降序排序,所以我認爲它應該做的對面。第一個元素沒有比它大,所以它返回0,然後我加1來得到它的等級。第二個元素有一個比它大的東西,所以我認爲它應該返回1,加1就是2.這很奇怪。我想我犯了一個簡單的錯誤。我還需要弄清楚如何處理這兩個20年代。我希望他們的排名都是3,但是treeset認爲他們是不同的數字。我想我可以使用TreeMultiSet或其他第三方庫。
這是一個很好的觀點。我可以嘗試使用常規列表並保持排序 – JPC 2010-11-21 00:10:16