Никто, похоже, не согласен с этим вопросом. Поэтому я потратил много времени, пытаясь ответить на разные запросы Google, пока, наконец, не нашел ответ.
от доктора Стивена Твиди, сотрудника RedHat и файловой системы ядра Linux и разработчика виртуальной памяти, в лекции по ext3 (которую он разработал) здесь . Если кто-нибудь знает, это был бы он.
«Недостаточно просто записать что-то в журнал, потому что в журнале должна быть какая-то отметка, которая говорит: ну, (действительно, эта запись журнала) действительно ли эта запись журнала представляет собой полную согласованность с диском «И способ, которым вы это делаете, заключается в наличии некоторой атомарной операции, которая помечает эту транзакцию как завершенную на диске» [23m, 14s]
«Теперь, диски в наши дни фактически дают эти гарантии. Если вы начинаете запись операции на диск, то даже если в середине записи этого сектора произойдет сбой питания, на диске достаточно мощности, и он может фактически украсть энергию из энергии вращения шпинделя, у него достаточно мощности для завершения записи сектор, который пишется прямо сейчас. Во всех случаях диски дают такую гарантию ». [23м, 41сек]
Iterables.get (yourC, indexYouWant)
Потому что на самом деле, если вы используете Коллекции, вы должны использовать Коллекции Google.
Похоже, это лучший способ сделать это:
String first = strs.iterator().next();
Отличный вопрос ... во-первых, это похоже на недосмотр интерфейса Collection
.
Обратите внимание, что «first» не всегда возвращает первое, что вы помещаете в коллекцию, и может иметь смысл только для упорядоченных коллекций. Может быть, поэтому не существует вызова get (item)
, поскольку порядок не обязательно сохраняется.
Хотя это может показаться немного расточительным, это может быть не так плохо, как вы думаете . Итератор
на самом деле просто содержит информацию для индексации в коллекции, а не обычно копию всей коллекции. При вызове этого метода создается экземпляр объекта Iterator
, но на самом деле это единственные накладные расходы (не такие как копирование всех элементов).
Например, просмотр типа, возвращаемого ArrayList
, мы видим, что это ArrayList :: Itr
. Это внутренний класс, который просто обращается к элементам списка напрямую, а не копирует их.
Просто убедитесь, что вы проверили возврат iterator ()
, поскольку он может быть пустым или нулевым
в зависимости от реализации.
Iterator
, но на самом деле это единственные накладные расходы (не такие как копирование всех элементов).
Например, просмотр типа, возвращаемого ArrayList
, мы видим, что это ArrayList :: Itr
. Это внутренний класс, который просто обращается к элементам списка напрямую, а не копирует их.
Просто убедитесь, что вы проверили возврат iterator ()
, поскольку он может быть пустым или нулевым
в зависимости от реализации.
Iterator
, но на самом деле это единственные накладные расходы (не такие как копирование всех элементов).
Например, просмотр типа, возвращаемого ArrayList
, мы видим, что это ArrayList :: Itr
. Это внутренний класс, который просто обращается к элементам списка напрямую, а не копирует их.
Просто убедитесь, что вы проверили возврат iterator ()
, поскольку он может быть пустым или нулевым
в зависимости от реализации.
ArrayList :: Itr
. Это внутренний класс, который просто обращается к элементам списка напрямую, а не копирует их.
Просто убедитесь, что вы проверили возврат iterator ()
, поскольку он может быть пустым или нулевым
в зависимости от реализации.
ArrayList :: Itr
. Это внутренний класс, который просто обращается к элементам списка напрямую, а не копирует их.
Просто убедитесь, что вы проверили возврат iterator ()
, поскольку он может быть пустым или нулевым
в зависимости от реализации.
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.
Похоже, ваша Коллекция хочет быть похожей на список, поэтому я бы посоветовал:
List<String> myList = new ArrayList<String>();
...
String first = myList.get(0);
Если вы знаете, что коллекция представляет собой очередь, вы можете поместить коллекцию в очередь и легко получить ее.
Есть несколько структур, которые вы можете использовать для получения заказа, но вы нужно будет преобразовать в него.
Вы можете сделать это:
String strz[] = strs.toArray(String[strs.size()]);
String theFirstOne = strz[0];
В javadoc для Collection содержится следующее предостережение относительно упорядочения элементов массива:
Если эта коллекция дает какие-либо гарантии относительно того, в каком порядке ее элементы возвращаются его итератором, этот метод должен возвращать элементы в том же порядке.