Найти объект в векторе, который содержит наибольшее количество элементов - PullRequest
0 голосов
/ 02 января 2012

Как найти объект в векторе, который содержит наибольшее количество элементов? Например:

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 ]

1 голос
/ 02 января 2012

Первое, на что нужно обратить внимание, это то, что ваш 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 устарел .Вкратце, это связано с проблемой синхронизации.Так что используйте абстракцию List с ее общей реализацией ArrayList.Вы также можете использовать Collection (так как индекс здесь не важен) вместо List.

1 голос
/ 02 января 2012

Я ответил на это, позволив себе сменить тип данных на 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;
}
1 голос
/ 02 января 2012
  • Прежде всего, Vector является устаревшим классом, который больше не должен использоваться.Если вы выбрали учебный материал самостоятельно, откажитесь от него и найдите что-то более современное.Если это домашняя работа учителяэлементы коллекции, использующие расширенный цикл for:

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

  • Количество элементов массива определяется через поле length массива.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...