Как я могу получить элементы 2-D List в Java? Например, Список <Список <Integer>> - PullRequest
0 голосов
/ 20 июня 2019

Как найти элементы двумерного списка в Java?

У меня есть функция с параметром List<List<Integer>>, и я хочу знать, как найти строки и столбцы этого списка.

Ответы [ 4 ]

2 голосов
/ 20 июня 2019

Если вы берете как

List<List<Integer>> obj

Тогда вы можете получить доступ как

obj.get(current_row).get(current_column);
1 голос
/ 20 июня 2019

Вы попросили помочь получить "строки" и "столбцы" из параметра List<List<Integer>>.

Получить "строки" довольно просто:

List<List<Integer>> table;
for (List<Integer> row : table) {
    // do something with 'row'
}

Столбцы не простые, хотя:

List<List<Integer>> table; // assumed to not be empty
int columnCount = table.get(0).size();
for (int columnNumber = 0; i < columnCount; columnNumber++) {
    List<Integer> column = new ArrayList<>();
    for (List<Integer> row : table) {
        column.add(row.get(columnNumber));
    }
    // do something with 'column'
}

Чтобы сэкономить на повторной обработке для каждого доступа к данным столбца, вы можете сохранить столбцы в переменной List<List<Integer>>, а затем получить доступ к тем же столбцам, что и для доступа к строкам.

0 голосов
/ 20 июня 2019

Точно так же, как если бы у вас был int[][], за исключением того, что вам нужно было бы использовать методы извлечения списков.

Самый простой способ - использовать тот факт, что списки реализуют Iterableinterface.

Чтобы вы могли

      //  create some data

      List<List<Integer>> listofLists = new ArrayList<>();
      for (int i = 0; i < 4; i++) {
         listofLists.add(Arrays.asList(1 * i, 2 * i, 3 * i));
      }

Показать его

      for (List<Integer> list : listofLists) {
         System.out.println(list); // prints out each row.
      }

Скажем, вы хотите преобразовать его в массив int[][], объединяющий все отдельные элементы.


      int[][] ints = new int[listofLists.size()][];

      for (int i = 0; i < listofLists.size(); i++) {
         // get each list in succession
         List<Integer> list = listofLists.get(i);
         // allocate the columns array to the size
         ints[i] = new int[list.size()];
         // copy each item over individually
         for (int k = 0; k < list.size(); k++) {
            ints[i][k] = list.get(k);
         }
      }

      // print the arrays
      for (int[] i : ints) {
         System.out.println(Arrays.toString(i));
      }

0 голосов
/ 20 июня 2019

API списка определяет API get

List<List<Integer>> listOfLists;
// get, then get again
Integer integer = listOfLists.get(row).get(column);

Первый «get» в цепочке возвращает List<Interger>, поэтому вы снова получаете целое число

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