2013-03-29 64 views
0

的ArrayList試圖理清一個ArrayList我有一個包含以下試圖排序的ArrayList

[[2/11, 11/48], [8/35, 35/288], [16/43, 43/288], [4/5, 5/16], [75/152, 19/210], [135/163, 163/1680]] 

目前,我有排序利用此ArrayList,

for(int j = 0; j < knowledgeD.size()-1; j++) { 

      if(knowledgeD.get(j).get(0).compareTo(knowledgeD.get(j+1).get(0)) == 1) { 
       Collections.swap(knowledgeD, j, j+1); 

此訂單的真值,這是每個括號中的第一個值,因此,2/11 8/35等等等等等等都按照數值來排列它們,所以從最小到最大,

但是,我注意到它在中間有些混亂在這裏,並沒有訂購4/5和75/132,我不知道爲什麼。我試圖添加這個失敗安全代碼做明顯的,但我現在不斷收到索引超出界限的錯誤,現在我已經實現了這個代碼。任何人都可以伸出援手嗎?

乾杯,

+4

爲什麼不使用比較器? – OQJF

+0

真值的類型是什麼?字符串?你如何比較'compareTo'中的值? –

+0

我不能添加額外的方法,所以不能使用Comparator,compareTo比較BigFractions,它是另一個類中定義的數據類型,它允許我使用方法compareTo(Bigfraction f)等 – Sim

回答

1

據我瞭解它,你嘗試基於子列表的第一個元素的自然順序上訂購清單。在java中,這通常是通過比較器完成的,並且不需要向任何東西添加新方法:

Comparator<List<Comparable>> order = new Comparator<List<Comparable>>() { 
    @Override 
    public int compare(List<Comparable> o1, List<Comparable> o2) { 
     return o1.get(0).compareTo(o2.get(0)); 
    } 
    }; 
    Collections.sort(knowledgeD, order);