2015-10-12 2 views
-4

У меня есть вопросы о Array и ArrayList. Я искал здесь и не смог найти точно ответы, которые я ищу.Array и ArrayList

  1. Я понимаю Arrays и ArrayList являются частью java.util. Итак, когда я создаю и Array или ArrayList Я создаю объекты и экземпляры?

  2. Почему должен ли java.util.ArraList быть импортирован, чтобы создать ArrayList объект, но нет необходимости импортировать java.util.Arrays для создания и массив объектов?

  3. Почему методы Array называются иначе, чем методы ArrayList? Это потому, что методы класса Arrays все статичны?

  4. Почему говорится, что производительность использования и массива выше, чем при использовании ArrayList?

  5. Я понимаю, что для итерации значений в массиве может использоваться цикл for. Как насчет итерации значений в ArrayList - Я понимаю, что цикл for также можно использовать, но в Интернете говорят, что я могу использовать итератор, что бы это был итератор?

  6. Может ли массив быть многомерным, если он хранит объекты?

  7. Если я работаю с примитивными данными, тогда я понимаю, что все они должны храниться в массиве, поскольку ArrayList не может содержать примитивные типы данных. Но если я работаю только с объектами, должен ли я работать с Array или ArrayList?

+0

Довольно точно есть тонны ответов на все эти вопросы. –

+0

В качестве первого подсказки: 'java.util.Arrays' - это просто класс утилиты для обработки массивов _real_. Этот класс не является массивом. – Tom

+2

Вы вводите в заблуждение 'Array' с' Arrays'. –

ответ

1

Да, при создании массива или ArrayList вы создаете экземпляр/объект.

Пакеты похожи на каталоги, содержащие определения классов (например, в пакете java.util содержится класс ArrayList). Все классы в пакете имеют уникальное имя. Но имена классов могут быть повторно использованы в других пакетах. Таким образом, существует действительно более 1 класс ArrayList. Итак, вот почему java-компилятор всегда должен знать полное имя класса.

Итак, когда вы создаете ArrayList, вы хотите, чтобы компилятор знал, что вы создаете java.util.ArrayList.Вы могли бы на самом деле определить, что во время создания объекта:

java.util.ArrayList list = new java.util.ArrayList(); 

Но это действительно многословным. Досадно, что вам придется повторять это полное имя все время. Вот для чего предназначены инструкции import. Указывая import java.util.ArrayList, вы сообщаете компилятору, что все ссылки на ArrayList являются фактически типом java.util.ArrayList.

Массивы - действительно специальные классы. Они не примитивы, но под капотом виртуальной машины Java и компилятора происходит много чего. Честно говоря, я не хочу слишком много объяснять об этом, потому что это просто смутит вас.

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

Честно производительность массива не лучше, чем, одного из ArrayList. У обоих есть свои сильные стороны.

Iterator - это то, что было изобретено до этого - каждая итерация была введена в java. Вы можете использовать итератор только для коллекций, реализующих интерфейс Iterable. (Опять же, не для массивов). Одним из преимуществ итераторов является то, что вы можете удалять объекты из списка во время итерации (например, используя метод iterator.remove()).

Несомненно, массив может быть многомерным, даже если он хранит объекты. И действительно, ArrayList не может содержать примитивные типы.

Я обычно предпочитаю использовать. Одним из основных преимуществ ArrayList является то, что он автоматически изменяется при превышении емкости. Это не относится к массиву.

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

Просто чтобы быть полным: существует также класс Arrays, который содержит методы удобства, отсутствующие в экземплярах массива. Действительно, эти методы являются строго статическими.

+0

Также очень хороший ответ! Спасибо! – Consuela

0

В простейшем образом, руке завивка мимо деталей:

Массив (обратите внимание на светское имя) имеет фиксированного размер заполнитель типа; это не то, что можно классифицировать. ArrayList является частью структуры Collections. Подробнее о том, что предлагает эта коллекция, см. В Javadocs.

java.util.Arrays - это класс удобства, который предоставляет статические методы, полезные для управления массивами. Поскольку они являются статическими, не требуется или не требуется прямой инстанцирования.

Ваши другие вопросы необходимо отрегулировать, как только вы пройдете эти основные принципы.

+0

А теперь я вижу. Вы могли понять мои настоящие сомнения и указать мне в правильном направлении. Я вижу, вы очень хорошо осведомлены! :-). До свидания. – Consuela

0
  1. ArrayList является одной из коллекций, доступных в библиотеке коллекций Java. Вы создаете объект ArrayList, который позволяет вам управлять последовательностью элементов. С другой стороны, Arrays представляет собой набор функций полезности, которые работают с массивами. Вы создаете новый массив, делая что-то вроде new int[10].

  2. Вы строите ArrayList с new ArrayList(), поэтому его необходимо импортировать. Класс Arrays не имеет ничего общего с созданием массивов и, следовательно, не требуется.

  3. Arrays и ArrayList совершенно разные. Один из них представляет собой набор функций (которые не являются методами массива), и вы не можете создать экземпляр Arrays. Методы ArrayList непосредственно работают на ArrayList.

  4. Массив обеспечивает прямой доступ к хранилищу массивов и содержит значения любого типа (примитивы и ссылки на объекты), в то время как в баре ArrayList содержатся только ссылки на объекты. Для ссылок на объекты нет реальной разницы в скорости, но для примитивов значения должны быть введены и выведены из «ящика» объекта, что существенно медленнее.

  5. Итератор это объект, который реализует обход коллекции, что позволяет получить следующий пункт (next) и позволяет спросить, есть ли какая-нибудь более (hasNext) наиболее эффективный способ для типа коллекции , Итераторы также используются в циклах, но более безопасны, потому что вам не нужно самостоятельно управлять индексами.

  6. Да. ArrayList также является объектом, поэтому многомерный ArrayList - это просто ArrayList, который содержит ArrayList.

  7. При работе с массивами объектов всегда используйте ArrayList. С гораздо проще работать (например, если вы добавите ArrayList, он будет легко перераспределять массив), и это безопаснее. С помощью дженериков вы можете гарантировать добавление нужного типа объектов. С массивами вы можете отливать String[] до Object[], но ArrayList<String> не может быть отлит в ArrayList , making it impossible to put a Двойной into a String` array.

+0

Очень полный ответ! Благодаря! – Consuela