2010-09-03 41 views
1

我必須使用「class Row_i」 - 對象(請參見下文)優化Java Vector,其中每個數字範圍(startPos - endPos)的兩個系列(A和B)行。 此向量必須被排序和優化。使用自定義對象對Java Vector進行排序和優化

組/排序標準:

1 - 通過ID_A行分組,
2 - 由ID_B行分組,
3 - 由startPosA行分組,
4 - 通過startPosB行分組,

所以排序後必須刪除多餘的行。

冗餘行:
1.如果startPosA第(i + 1)值是下一個數字startPosA(I)值僅當滿足POSB相同的標準

行優化的應happend。

矢量沒有排序: ..................................

ID_A id_B sPosA - ePosA sPosA - ePosA

2392 ++ 4061 ++ 3158 - 3163 ++ 13222 - 13227;
1192 ++ 2064 ++ 287 - 290 ++ 257 - 260;
2392 ++ 1063 ++ 480 - 590 ++ 1950 - 1960;
1092 ++ 1555 ++ 7385 - 7395 ++ 193 - 203;
1192 ++ 2064 ++ 273 - 286 ++ 243 - 256;
1192 ++ 2064 ++ 291-294 ++ 261-264;

向量排序,並優化

1092 ++ ++ 1555 7385 - 7395 193 ++ - 203;
1192 ++ 2064 ++ 273 - 294 ++ 243 - 264;
2392 ++ 1063 ++ 480 - 590 ++ 1950 - 1960;
2392 ++ 4061 ++ 3158 - 3163 ++ 13222 - 13227
.........................

實現取決於收藏大小各不相同。並在一個案例200 - 5000個對象 有沒有人知道如何解決這個,我有效的方式。

我會很樂意提供任何幫助。


整個Java中的類此:
對象 - 類 「Row_i」 - >http://pastebin.com/wc3ytUqf

@Missing FAKTOR:謝謝你的提示!

回答

0

我不明白你在做什麼,但如果你想排序和刪除重複,有一個Vector似乎不是正確的選擇集合。那麼TreeSet呢?

爲了保證沒有重複和排序順序,除非您決定使用比較器,否則您的類Row_i將需要重寫equals()和hashCode()方法以及實現Comparable接口。

1

當您創建實例時,請使用SortedSet作爲變量/字段/返回類型和TreeSet。讓您的Row_i類實現Comparable或創建一個實現Comparator的類,並在創建樹集時傳遞比較器(比較器應該是單例)。

這是最好的解決方案,除非你需要隨機訪問。

編輯:我寫了一個例子可比http://pastebin.com/5Z3GBNrV

+0

謝謝,不需要隨機訪問。從來沒有與集合工作,你可能會寫一個更確切的例子嗎? 我用簡單的for - loop和if - query(見下面)管理了這個問題。但它不能正常工作。 – xaoc 2010-09-03 16:28:07

+0

@xaoc:將您的代碼發佈到pastebin.com上,並將其鏈接放在評論中。 – missingfaktor 2010-09-03 17:15:44

+0

class Row_i - > http://pastebin.com/wc3ytUqf, class UpdateTable-> http://pastebin.com/K4NeTtCV, @Missing Faktor:謝謝你的提示! – xaoc 2010-09-04 14:08:00

相關問題