Java: Получите первый объект от набора

Никто, похоже, не согласен с этим вопросом. Поэтому я потратил много времени, пытаясь ответить на разные запросы Google, пока, наконец, не нашел ответ.

от доктора Стивена Твиди, сотрудника RedHat и файловой системы ядра Linux и разработчика виртуальной памяти, в лекции по ext3 (которую он разработал) здесь . Если кто-нибудь знает, это был бы он.

«Недостаточно просто записать что-то в журнал, потому что в журнале должна быть какая-то отметка, которая говорит: ну, (действительно, эта запись журнала) действительно ли эта запись журнала представляет собой полную согласованность с диском «И способ, которым вы это делаете, заключается в наличии некоторой атомарной операции, которая помечает эту транзакцию как завершенную на диске» [23m, 14s]

«Теперь, диски в наши дни фактически дают эти гарантии. Если вы начинаете запись операции на диск, то даже если в середине записи этого сектора произойдет сбой питания, на диске достаточно мощности, и он может фактически украсть энергию из энергии вращения шпинделя, у него достаточно мощности для завершения записи сектор, который пишется прямо сейчас. Во всех случаях диски дают такую ​​гарантию ». [23м, 41сек]

257
задан Nick Heiner 3 November 2009 в 16:22
поделиться

6 ответов

Iterables.get (yourC, indexYouWant)

Потому что на самом деле, если вы используете Коллекции, вы должны использовать Коллекции Google.

126
ответ дан 23 November 2019 в 02:43
поделиться

Похоже, это лучший способ сделать это:

String first = strs.iterator().next();

Отличный вопрос ... во-первых, это похоже на недосмотр интерфейса Collection .

Обратите внимание, что «first» не всегда возвращает первое, что вы помещаете в коллекцию, и может иметь смысл только для упорядоченных коллекций. Может быть, поэтому не существует вызова get (item) , поскольку порядок не обязательно сохраняется.

Хотя это может показаться немного расточительным, это может быть не так плохо, как вы думаете . Итератор на самом деле просто содержит информацию для индексации в коллекции, а не обычно копию всей коллекции. При вызове этого метода создается экземпляр объекта Iterator , но на самом деле это единственные накладные расходы (не такие как копирование всех элементов).

Например, просмотр типа, возвращаемого ArrayList .iterator () , мы видим, что это ArrayList :: Itr . Это внутренний класс, который просто обращается к элементам списка напрямую, а не копирует их.

Просто убедитесь, что вы проверили возврат iterator () , поскольку он может быть пустым или нулевым в зависимости от реализации.

При вызове этого метода создается экземпляр объекта Iterator , но на самом деле это единственные накладные расходы (не такие как копирование всех элементов).

Например, просмотр типа, возвращаемого ArrayList .iterator () , мы видим, что это ArrayList :: Itr . Это внутренний класс, который просто обращается к элементам списка напрямую, а не копирует их.

Просто убедитесь, что вы проверили возврат iterator () , поскольку он может быть пустым или нулевым в зависимости от реализации.

При вызове этого метода создается экземпляр объекта Iterator , но на самом деле это единственные накладные расходы (не такие как копирование всех элементов).

Например, просмотр типа, возвращаемого ArrayList .iterator () , мы видим, что это ArrayList :: Itr . Это внутренний класс, который просто обращается к элементам списка напрямую, а не копирует их.

Просто убедитесь, что вы проверили возврат iterator () , поскольку он может быть пустым или нулевым в зависимости от реализации.

мы видим, что это ArrayList :: Itr . Это внутренний класс, который просто обращается к элементам списка напрямую, а не копирует их.

Просто убедитесь, что вы проверили возврат iterator () , поскольку он может быть пустым или нулевым в зависимости от реализации.

мы видим, что это ArrayList :: Itr . Это внутренний класс, который просто обращается к элементам списка напрямую, а не копирует их.

Просто убедитесь, что вы проверили возврат iterator () , поскольку он может быть пустым или нулевым в зависимости от реализации.

408
ответ дан 23 November 2019 в 02:43
поделиться

There is no such a thing as "first" item in a Collection because it is .. well simply a collection.

From the Java doc's Collection.iterator() method:

There are no guarantees concerning the order in which the elements are returned...

So you can't.

If you use another interface such as List, you can do the following:

String first = strs.get(0);

But directly from a Collection this is not possible.

38
ответ дан 23 November 2019 в 02:43
поделиться

Похоже, ваша Коллекция хочет быть похожей на список, поэтому я бы посоветовал:

List<String> myList = new ArrayList<String>();
...
String first = myList.get(0);
4
ответ дан 23 November 2019 в 02:43
поделиться

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

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

0
ответ дан 23 November 2019 в 02:43
поделиться

Вы можете сделать это:

String strz[] = strs.toArray(String[strs.size()]);
String theFirstOne = strz[0];

В javadoc для Collection содержится следующее предостережение относительно упорядочения элементов массива:

Если эта коллекция дает какие-либо гарантии относительно того, в каком порядке ее элементы возвращаются его итератором, этот метод должен возвращать элементы в том же порядке.

-2
ответ дан 23 November 2019 в 02:43
поделиться
Другие вопросы по тегам:

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