ArrayList массивов строк

Я хотел бы сделать что-то вроде этого:

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

Это, кажется, не работает. Каков самый легкий способ снабдить несколько адресов 3 полями на адрес в массиве, не создавая отдельный класс для него?

26
задан Micha Wiedenmann 26 November 2018 в 07:58
поделиться

4 ответа

Используйте второй список ArrayList для трех строк, а не примитивный массив. То есть
private List > addresses = new ArrayList > ();

Тогда вы можете иметь:

ArrayList<String> singleAddress = new ArrayList<String>();
singleAddress.add("17 Fake Street");
singleAddress.add("Phoney town");
singleAddress.add("Makebelieveland");

addresses.add(singleAddress);

(я думаю, здесь могут произойти некоторые странные вещи со стиранием типа, но я не думаю, что здесь это должно иметь значение)

Если вы категорически настроены на использование примитивного массива, требуется лишь незначительное изменение, чтобы ваш пример заработал. Как объясняется в других ответах, размер массива не может быть включен в объявление. Так что изменение:

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

на

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

будет работать.

45
ответ дан 28 November 2019 в 06:10
поделиться
List<String[]> addresses = new ArrayList<String[]>();
String[] addressesArr  = new String[3];

addressesArr[0] = "zero";
addressesArr[1] = "one";
addressesArr[2] = "two";

addresses.add(addressesArr);
22
ответ дан 28 November 2019 в 06:10
поделиться

I wouldn't use arrays. They're problematic for several reasons and you can't declare it in terms of a specific array size anyway. Try:

List<List<String>> addresses = new ArrayList<List<String>>();

But honestly for addresses, I'd create a class to model them.

If you were to use arrays it would be:

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

ie you can't declare the size of the array.

Lastly, don't declare your types as concrete types in instances like this (ie for addresses). Use the interface as I've done above. This applies to member variables, return types and parameter types.

10
ответ дан 28 November 2019 в 06:10
поделиться

You can't force the String arrays to have a specific size. You can do this:

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

but an array of any size can be added to this list.

However, as others have mentioned, the correct thing to do here is to create a separate class representing addresses. Then you would have something like:

private List<Address> addresses = new ArrayList<Address>();
5
ответ дан 28 November 2019 в 06:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: