Если вы знаете ранее размер вашего списка списков, я рекомендую вам использовать простую таблицу. Тогда у вас будет больше эффективности и скорости, на которые @xenteros ответит. Это было бы что-то вроде:
private static final int DUCKS = 0;
private static final int COWS = 1;
private static final int GORILLAS = 2;
private List<Animal>[] myAnimals = (List<Animal>[]) new List<?>[3]; // You know the size.
List<Duck> ducks = new ArrayList<>();
List<Cow> cows = new ArrayList<>();
List<Gorilla> gorillas = new ArrayList<>();
myAnimals[DUCKS] = ducks;
myAnimals[COWS] = cows;
myAnimals[GORILLAS] = gorillas;
Это решение является самым быстрым вы можете реализовать, но вы должны заботиться о ваших значений индекса для того, чтобы получить эту работу. Поскольку @xenteros сказал, что вы заключаете контракт, за которым вы должны следовать. Но с константами DUCK
, COWS
и GORILLAS
это очень легко;)
Edit: лучший подход должен был бы использовать Enum
в @Sergey Рыбалкин предлагает управлять типами животных, поэтому, если они растут высоко вверх и вы получаете как 400 видов животных, использование Enum
было бы более гибким. Было бы что-то вроде:
private enum Animals {
DUCKS,
COWS,
GORILLAS;
}
private List<Animal>[] myAnimals = (List<Animal>[]) new List<?>[Animals.values().length]; // You can get the length of your enum.
List<Duck> ducks = new ArrayList<>();
List<Cow> cows = new ArrayList<>();
List<Gorilla> gorillas = new ArrayList<>();
myAnimals[Animals.DUCKS.ordinal()] = ducks;
myAnimals[Animals.COWS.ordinal()] = cows;
myAnimals[Animals.GORILLAS.ordinal()] = gorillas;
ordinal
метод дает значение позиции, где было определено постоянное перечисление. В этом случае Animal.DUCKS.ordinal()
дает 0, Animal.COWS.ordinal()
дает 1 ... Больше информации в java doc
Возвращает порядковый номер этой константы перечисления (его положение в своем перечислений декларации, в которой начальная константа присваивается порядковый номер ноль).
Список списков является плохой подход, как вам нужно будет сделать контракт - индекс 0 - утки, индекс 1 - коровы вместо совпадения коров у «коров» – xenteros
Как вы думаете, было бы лучше иметь отдельный класс менеджера для каждого подкласса Animal? Я полагаю, что если бы я это сделал, было бы немного дублированного кода. – user3603179
@ user3603179 Я вообще не понимаю ваш вопрос. У вас может быть общий менеджер Animal и менеджер для тех животных, которым вы хотите переопределить некоторые взаимодействия общего определенного. –