Как я могу нарезать ArrayList из ArrayList в Java?

Существует много различий. Мы любили WPF за:

  1. декларативный стиль программирования.
  2. Анимации и изменения состояния
  3. Смешение Выражения является большим инструментом
  4. Хорошая поддержка стиля.

Однако мы придерживались Windows Forms потому что:

  1. дополнительное время это берет для разработчика для изучения WPF, когда они уже знают Windows Forms.
  2. WPF не будет работать на Windows 2000 или ниже.
69
задан Shog9 27 September 2009 в 18:03
поделиться

3 ответа

В Java рекомендуется использовать типы интерфейса, а не конкретные классы в API.

Ваша проблема в том, что вы используете ArrayList (вероятно, во многих мест), где вы действительно должны использовать Список . В результате вы создали себе проблемы с ненужным ограничением, что список представляет собой ArrayList .

Вот как должен выглядеть ваш код:

List input = new ArrayList(...);

public void doSomething(List input) {
   List inputA = input.subList(0, input.size()/2);
   ...
}

this.doSomething(input);

Предлагаемое вами «решение» проблемы было / это:

new ArrayList(input.subList(0, input.size()/2))

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


Если вы ограничены API, которые вы не можете изменить , то вы должны объявить ] inputA как ArrayList , возможно, вы сможете реализовать собственный подкласс ArrayList , в котором метод subList возвращает подкласс ArrayList . Однако:

  1. Для разработки, реализации и тестирования потребуется много работы.
  2. Теперь вы добавили значительный новый класс в свою базу кода, возможно, с зависимостями от недокументированных аспектов (и, следовательно, «подлежащих изменению») аспектов. класса ArrayList .
  3. Вам нужно будет изменить соответствующие места в вашей кодовой базе, где вы создаете экземпляры ArrayList , чтобы вместо этого создать экземпляры вашего подкласса.

"копия" решение "массив" более практично ... учитывая, что это не настоящие срезы.

112
ответ дан 24 November 2019 в 13:50
поделиться

Если нет существующего метода, я думаю, вы можете выполнить итерацию от 0 до input.size () / 2 , беря каждый последующий элемент и добавляя его в новый ArrayList .

РЕДАКТИРОВАТЬ : На самом деле, я думаю, вы можете взять этот List и использовать его для создания нового ArrayList, используя один из конструкторов ArrayList .

6
ответ дан 24 November 2019 в 13:50
поделиться

Вот как я это решил. Я забыл, что подсписок был прямой ссылкой на элементы в исходном списке, поэтому понятно, почему это не сработало.

ArrayList<Integer> inputA = new ArrayList<Integer>(input.subList(0, input.size()/2));
-5
ответ дан 24 November 2019 в 13:50
поделиться
Другие вопросы по тегам:

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