2012-11-04 59 views
0

比方說,我有一個叫股類(一個位置變量x)和擴展類盟,UnitB,UnitC等。排序不同類型的對象(性能)

這是我想出了搭配:

Unit[] ordered = new Unit[a_num+b_num+c_num]; 
ordered = Arrays.copyOf(a_units, a_num); //and add b_units, c_units, etc 
Arrays.sort(ordered); //sort using compareTo method 
  • 爲了獲得最佳性能和整齊的編程,什麼是自左向右(X變量)這些值進行排序的最好方法?
  • 當對數組進行排序時,爲了訪問特定於單元的變量,如何找出每個條目是什麼類型的對象?
+1

爲什麼你在第一行創建一個Unit數組並將其扔到第二行? –

+0

我不確定你的意思。 – Wilco

+0

正是我所說的。在第一行中創建一個Unit數組。在第二行中,用Arrays.copyOf返回的引用覆蓋該引用。如果你擔心表現,不要做無用的事情。 –

回答

2

Arrays.sort(ordered)將根據單位的自然順序(由compareTo方法定義)進行排序。如果自然順序不是您想要的,則使用Arrays.sort(array, Comparator)並通過比較器來比較單元的位置。

關於你的第二個問題:你不應該知道單位的類型。你的Unit類應該提供可以調用的多態方法,並且每個子類都可以執行哪些方法來做適當的事情。總是有instanceof運算符和getClass()方法,但是使用它們表明缺少OO設計,因此是不好的做法。

+0

謝謝,這應該有助於我開始! – Wilco

+0

再次感謝,作品像魅力! – Wilco

5

如果你必須找出每個條目是什麼類型的對象,你做錯了。

多態是唯一的出路。這就是面向對象的語言。

你不說你想如何排序單位。你的意思是物理單位,如米的長度,公斤的質量,秒的時間?如果是,那麼「排序」是什麼意思?當然,你可以按字母順序排列它們,但我不知道它有多有意義。

什麼是「位置變量」?你的意思是說你會在不同的「職位」中擁有一個長度與米,英尺,埃及和弗隆等潛在價值的單位?你將如何訂購?受歡迎程度?答案的變化取決於你是否仍在使用英國單位的少數幾個國家之一(例如美國,甚至英國放棄英國單位!)或公制。

+0

每個Unit對象都有一個x變量,我想按降序對這個x變量上的所有擴展對象進行排序。 – Wilco

+0

什麼都沒有告訴我。這是一種重言式。投票結束。 – duffymo

+0

謝謝您提供豐富的答案 – Wilco