2012-01-02 85 views
0

如何在Vector中找到包含最多元素的對象? 例如:在Vector中查找包含元素數量最多的對象

int[] val1 = {1,2,3}; 
int[] val2 = {1}; 
int[] val3 = {1,2}; 
Vector<Object> d = new Vector<Object>(); // update 
c.add(val1); 
c.add(val2); 
c.add(val3); 
int answ = findBiggest(c); 

在這個例子中,answ應當等於0,因爲val1包含3個數字。

+0

Integer!= int [] .......你得到編譯器錯誤! – 2012-01-02 09:00:06

+1

你到目前爲止嘗試過什麼?比較數字或獲取矢量大小或定義類和方法時,您遇到問題嗎? – 2012-01-02 09:00:54

+0

您的示例代碼會產生編譯器錯誤。向量c只需要整數,而不是int [] ..即使自動裝箱也不會對此產生幫助 – AlanFoster 2012-01-02 09:01:35

回答

1

我已經通過採取改變數據類型爲ArrayList中,我相信這是你本來想要的東西..的自由回答了這個

我也改變了泛型類型爲Integer []過。因爲我相信自動裝箱有一個額外的開銷,我認爲這是一個很小但很好的做法? (任何人都可以證實這一點?)

public static void main(String[] args) { 
    Integer[] val1 = {1,2,3}; 
    Integer[] val2 = {1,2,3,3,3}; 
    Integer[] val3 = {1,2}; 
    ArrayList<Integer[]> c = new ArrayList<Integer[]>(); 
    c.add(val1); 
    c.add(val2); 
    c.add(val3); 
    int answ = findBiggest(c); 
    System.out.println(answ); 
} 

public static int findBiggest(ArrayList<Integer[]> list){ 
    int biggestSize = 0 
    int biggestPos = -1; 
    int i = 0; 
    for(Integer[] el : list){ 
     if(el.length >= biggestSize){ 
      biggestSize = el.length; 
      biggestPos = i; 
     } 
     i++; 
    } 

    return biggestPos; 
} 
+0

自動裝箱開銷將每個整數使用的內存增加至少3倍,並且需要堆分配。如果你處理幾百個問題,這不成問題。巨大的問題,如果它是數百萬,或處理它們的代碼是性能關鍵和自動裝箱整數導致不斷緩存未命中。 – 2012-01-02 09:22:53

1
  • 首先,Vector是一個不應該再使用的過時類。如果你自己選擇你的學習材料,放棄它並找到更新的東西。如果這是老師給的作業,告訴他們。
  • 您的代碼將無法編譯,因爲你不能添加int[]Vector<Integer>
  • 您可以循環在利用集合的元素增強的for循環:

    for(int[] element : collection){ /* Do something with element */ }

  • 元素的數量通過數組的length字段找到數組。
+0

爲什麼矢量過時?你有什麼建議作爲一個更好的收集使用? – 2012-01-02 09:23:11

+0

@JJ Liu:應該使用ArrayList(10年前在Java 1.2中引入)。矢量是同步的,這使得它變得更慢並且幾乎總是沒用,並且它的API受到來自集合框架之前的方法的污染,其功能被來自List接口的方法複製。 – 2012-01-02 09:33:57

+0

謝謝。 ArrayList,Array,List,你會建議在特定情況下使用哪一種? – 2012-01-02 09:55:22

1

首先要注意的是,你的Vector沒有得到很好的類型(應該是Vector<int[]>) 接下來這裏是一個快速的方法

public int findBiggest(Vector<int[]> c) { 
    int max = -1; 
    int ok = -1; 
    int index = 0; 
    for (int[] ints : c) { 
     if (max < ints.length) { 
      max = ints.length; 
      ok = index; 
     } 
     index ++; 
    } 
    return ok; 
} 

public void test() { 
    int[] val1 = {1,2,3}; 
    int[] val2 = {1}; 
    int[] val3 = {1,2}; 
    Vector<int[]> c = new Vector<int[]>(); 
    c.add(val1); 
    c.add(val2); 
    c.add(val3); 
    int answ = findBiggest(c); 
} 

而作爲michael-borgwardt說,不使用矢量出於這個原因:Vector Obsolete。簡而言之,這是由於同步問題。因此,使用帶有公共實現ArrayList的List抽象。你也可以使用Collection(因爲索引在這裏看起來並不重要)而不是List。

相關問題