在Vector中查找包含最多元素的对象

时间:2012-01-02 08:58:43

标签: java vector find

如何在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个数字。

3 个答案:

答案 0 :(得分:1)

  • 首先,Vector是一个不再使用的过时类。如果您自己选择了学习材料,请放弃它并找到更新的东西。如果是老师给的作业,请告诉他们。
  • 您的代码无法编译,因为您无法将int[]添加到Vector<Integer>
  • 您可以使用增强的for循环遍历集合的元素:

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

  • 通过数组的length字段找到数组的元素数。

答案 1 :(得分: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:Vector Obsolete。简而言之,这是由于同步问题。因此,使用List抽象及其通用实现ArrayList。你也可以使用Collection(因为索引在这里看起来不重要)而不是List。

答案 2 :(得分: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;
}