Подтвердить что ты не робот

Java ArrayList массивов?

Я хочу создать массив mutli без фиксированного размера.

Мне нужно иметь возможность добавлять к нему элементы String[2].

Я пробовал посмотреть:

private ArrayList<String[]> action = new ArrayList<String[2]>();

но это не сработает. есть ли у кого-нибудь другие идеи?

4b9b3361

Ответ 1

Должно быть

private ArrayList<String[]> action = new ArrayList<String[]>();
action.add(new String[2]);
...

Вы не можете указать размер массива в универсальном параметре, а позже добавлять в список массивы определенного размера. Это также означает, что компилятор не может гарантировать, что все подмассивы имеют одинаковый размер, он должен быть обеспечен вами.

Лучшим решением может быть инкапсуляция этого в класс, где вы можете обеспечить равномерный размер массивов как инвариант типа.

Ответ 2

BTW. вы должны предпочесть кодирование против интерфейса.

private ArrayList<String[]> action = new ArrayList<String[]>();

Должно быть

private List<String[]> action = new ArrayList<String[]>();

Ответ 3

Поскольку размер вашего строкового массива фиксирован во время компиляции, вам лучше использовать структуру (например, Pair), которая задает ровно два поля и, таким образом, позволяет избежать ошибок времени выполнения при использовании подхода массива.

Код:

Так как Java не предоставляет класс Pair, вам нужно будет определить свой собственный.

class Pair<A, B> {
  public final A first;
  public final B second;

  public Pair(final A first, final B second) {
    this.first = first;
    this.second = second;
  }

  //
  // Override 'equals', 'hashcode' and 'toString'
  //
}

а затем используйте его как:

List<Pair<String, String>> action = new ArrayList<Pair<String, String>>();

[Здесь я использовал List, потому что он считал хорошей практикой программировать интерфейсы. ]

Ответ 4

ArrayList<String[]> action = new ArrayList<String[]>();

Не нужно String[2];

Ответ 5

Как уже было сказано, вы можете создать ArrayList из String Arrays, как написано @Péter Török;

    //Declaration of an ArrayList of String Arrays
    ArrayList<String[]> listOfArrayList = new ArrayList<String[]>();

При назначении разных массивов String в этот массив ArrayList каждая длина массива строк будет отличаться.

В следующем примере добавлено 4 разных массива String, их длины варьируются.

String Array #1: len: 3
String Array #2: len: 1
String Array #3: len: 4
String Array #4: len: 2

Демонстрационный код выглядит следующим образом:

import java.util.ArrayList;

public class TestMultiArray {

    public static void main(String[] args) {
        //Declaration of an ArrayList of String Arrays
        ArrayList<String[]> listOfArrayList = new ArrayList<String[]>();

        //Assignment of 4 different String Arrays with different lengths
        listOfArrayList.add( new String[]{"line1: test String 1","line1: test String 2","line1: test String 3"}  );
        listOfArrayList.add( new String[]{"line2: test String 1"}  );
        listOfArrayList.add( new String[]{"line3: test String 1","line3: test String 2","line3: test String 3", "line3: test String 4"}  );
        listOfArrayList.add( new String[]{"line4: test String 1","line4: test String 2"}  );

        // Printing out the ArrayList Contents of String Arrays
        // '$' is used to indicate the String elements of String Arrays
        for( int i = 0; i < listOfArrayList.size(); i++ ) {
            for( int j = 0; j < listOfArrayList.get(i).length; j++ )
                System.out.printf(" $ " + listOfArrayList.get(i)[j]);

            System.out.println();
        }

    }
}

И вывод следующий:

 $ line1: test String 1 $ line1: test String 2 $ line1: test String 3
 $ line2: test String 1
 $ line3: test String 1 $ line3: test String 2 $ line3: test String 3 $ line3: test String 4
 $ line4: test String 1 $ line4: test String 2

Также сообщите, что вы можете инициализировать новый массив Sting, как показано ниже:

new String[]{ str1, str2, str3,... }; // Assuming str are String objects

Итак, это так же:

String[] newStringArray = { str1, str2, str3 }; // Assuming str are String objects

Я написал эту демонстрацию, чтобы показать, что нет объекта ArrayList, все элементы являются ссылками на разные экземпляры String Arrays, поэтому длина каждого массива String не должна быть это не важно.

Последнее примечание. Лучше всего использовать ArrayList в интерфейсе List, а не в том, что вы использовали в своем вопросе.

Лучше использовать интерфейс List, как показано ниже:

    //Declaration of an ArrayList of String Arrays
    List<String[]> listOfArrayList = new ArrayList<String[]>();

Ответ 6

Это работает очень хорошо.

ArrayList<String[]> a = new ArrayList<String[]>();
    a.add(new String[3]);
    a.get(0)[0] = "Zubair";
    a.get(0)[1] = "Borkala";
    a.get(0)[2] = "Kerala";
System.out.println(a.get(0)[1]);

Результат будет

Borkala

Ответ 7

  • Создайте ArrayList как ArrayList action.

    В JDK 1.5 или выше используйте имя ссылки ArrayList <string[]>.

    В JDK 1.4 или ниже используйте имя ссылки ArrayList.

  • Укажите спецификаторы доступа:

    • public, доступ к которому можно получить в любом месте
    • закрытый, доступ к которому осуществляется внутри класса
    • защищен, доступен в классе и разных подклассах пакетов
  • Затем укажите ссылку, которая будет назначена в

    action = new ArrayList<String[]>();
    
  • В JVM new ключевое слово будет выделять память во время выполнения для объекта.

    Вы не должны указывать значение, объявленное, потому что вы запрашиваете без фиксированного размера.

  • Наконец, вы можете использовать метод add() в ArrayList. Использовать как

    action.add(new string[how much you need])
    

    Он выделит определенную область памяти в куче.