Порядок объектов возвращается конюшней FOREACH?

class Sample{
  public static void main (String[] args) {
       Sample s = new Sample();
       s.printVal(null);

    } 
    public static void printVal(Object i){
        System.out.println("obj called "+i);
    }

    public static void printVal(Integer i){
        System.out.println("Int called "+i);
    }
}

Вывод Int называется NULL, и поэтому неопределенность с char [] и Integer

19
задан James Curran 26 February 2009 в 07:13
поделиться

7 ответов

Короткий ответ - да.

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

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

15
ответ дан 30 November 2019 в 02:12
поделиться

Это зависит от типа набора. Для большинства наборов ответ - "Да".

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

25
ответ дан 30 November 2019 в 02:12
поделиться

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

Наборы, которые имеют определенный порядок элемента (например, List<T>) перечислят в стабильном порядке.

Для наборов, где состояние объекта не изменяется, очень вероятно, что элементы возвратятся в том же порядке, например, Dictionary<K,V>, хотя это не гарантируемое спецификацией.

Как пример того, где это не имело бы место, Вы могли вообразить основанную на хеш-таблице реализацию словаря, которая уплотняет или изменяет размер таблицы асинхронно. Такая реализация не гарантировала бы стабильного итеративного порядка.

10
ответ дан 30 November 2019 в 02:12
поделиться

В то время как ответ является “yes” для всех встроенных наборов и вероятно любого нормального класса набора там, документация не имеет никаких ограничений сформулированными для IEnumerable. Поэтому ничто не говорит нам, что каждое повторение должно быть стабильным.

я мог вообразить следующий вариант использования:

foreach (int i in new Shuffler(1, 2, 3, 4, 5, 6, 7, 8, 9))
    Console.WriteLine(i);

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

Так †“, если Вы также хотите рассмотреть странные промежуточные случаи, ответ должен быть “ никакой ”.

6
ответ дан 30 November 2019 в 02:12
поделиться

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

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

Короче говоря, если Вы не знаете, внутренняя реализация класса набора, не делают , принимают что-либо о порядке.

3
ответ дан 30 November 2019 в 02:12
поделиться

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

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

"Неизмененное" ре (ответ NM) - отмечает, что много сложных контейнеров как Словарь не гарантируют, что сохранили порядок. Иногда добавление объекта заставит его появиться в последний раз (производящий впечатление, что порядок сохраняется), и иногда это будет заставлять внутренние блоки реорганизовывать, давая совершенно другое распоряжение.

Вещи как SortedList<> и т.д., очевидно, имеют их собственные правила.

1
ответ дан 30 November 2019 в 02:12
поделиться
Другие вопросы по тегам:

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