- Это возможно при подходе, который вы используете
С точки зрения проектирования структуры данных, попробуйте использовать List interface
, например:
List<List<Integer>> ratings2DArray = new ArrayList<ArrayList<Integer>>();
Причина этого в том, что теперь завтра вы можете изменить ArrayList
на что-то другое.
Что касается эффективности, ваш soln довольно эффективен с учетом характера ваших потребностей. Если кому-то действительно нужно увеличить производительность, код может быть не так удобен для чтения. Один спектакль, кажется, (в верхней части головы), исходя из предположения, что нет. столбцов const для всего файла, это избавиться от второго / вложенного ArrayList
и заменить его фиксированным размером int
массива.
Чтобы определить количество столбцов, мы можем использовать первую строку в файле в качестве ссылки.
Разработка по оптимизации Soln на основе комментария ниже.
Итак, вы говорите, что Столбец представляет Книгу (каждый столбец - это отдельная книга), а строки представляют покупателя (каждая строка - отдельный покупатель) ...
Допустим, я выбираю -100 в качестве значения для книг без рейтинга (в данных есть дополнительные пробелы для ясности)
Book1 Book2 Book3 Book4
Customer1 -100 5 5 3
Customer2 0 3 2 -100
Теперь, когда я читаю файл, для данного файла фиксируется количество столбцов, которое мы можем определить из первой строки.
Допустим, добавлена книга 'Book5`.
Book1 Book2 Book3 Book4 Book5
Customer1 -100 5 5 3 -100
Customer2 0 3 2 -100 -100
Скажите, что клиент 'Customer3` добавлен.
Book1 Book2 Book3 Book4
Customer1 -100 5 5 3
Customer2 0 3 2 -100
Customer3 -100 -100 -100 -100
Так что в обоих случаях чтение первой строки говорит нам нет. столбцов, и они остаются неизменными для файла.
Теперь, если вы хотите добавить что-то в память List
, то выше Soln не очень оптимизирован. По мере каждого обновления придется менять размер массива. Оптимизация, как правило, для конкретных случаев использования.
Так что для добавления в память данных, я думаю, ваш нынешний soln преуспеет. Только вы можете передать число столбцов в ArrayList
создание, например:
// We are telling ArrayList the expected data size
// You can choose noOfColumns + some value according to ur need
// It will expand if more is needed
ratings2DArray.add(new ArrayList<Integer>(noOfColumns));
при загрузке файла. Таким образом, ArrayList
будет кратким и будет работать лучше.