Эта конструкция называется Тернарным оператором в области компьютерных наук и программирования. И Wikipedia предлагают следующее объяснение:
В информатике троичный оператор (иногда неправильно называемый третичным оператором) является оператором, который принимает три аргумента. Аргументы и результат могут быть разных типов. Многие языки программирования, использующие синтаксис C-типа, имеют тройной оператор,? :, который определяет условное выражение.
blockquote>Не только в Java этот синтаксис доступен в PHP, Objective-C тоже .
В следующей ссылке он дает следующее объяснение, которое очень приятно понять:
Тернарный оператор - это некоторая операция, выполняющая на 3 входах. Это ярлык для оператора if-else и также известен как условный оператор.
В Perl / PHP он работает как:
boolean_condition ? true_value : false_value
В C / C ++ он работает как:
blockquote>logical expression ? action for true : action for false
Это может быть читаемо для некоторых логических условий, которые не слишком сложны, в противном случае лучше использовать блок If-Else с предполагаемой комбинацией условной логики.
Мы можем упростить блоки If-Else с помощью этого оператора Ternary для одной строки оператора кода. Например:
if ( car.isStarted() ) { car.goForward(); } else { car.startTheEngine(); }
Возможно, это будет следующее:
( car.isStarted() ) ? car.goForward() : car.startTheEngine();
Итак, если мы ссылаемся на ваше утверждение:
int count = isHere ? getHereCount(index) : getAwayCount(index);
Это фактически 100% эквивалент следующего блока If-Else:
int count; if (isHere) { count = getHereCount(index); } else { count = getAwayCount(index); }
Вот и все! Надеюсь, это помогло кому-то! Ура!
Связанные списки обеспечивают очень быструю вставку или удаление участника списка. Каждый участник в связанном списке содержит указатель на следующего участника в списке так, который введет участника в положении i:
, который недостаток к связанному списку - то, что произвольный доступ не возможен. Доступ к участнику требует пересечения списка, пока желаемый участник не найден.
Различие между Списком и LinkedList заключается в их конкретной реализации. Список является основанным на массиве набором (ArrayList). LinkedList является основанным на указателе узла набором (LinkedListNode). На использовании уровня API они оба - в значительной степени то же начиная с обеих реализаций тот же набор интерфейсов, таких как ICollection, IEnumerable, и т.д.
, основное отличие прибывает когда вопрос производительности. Например, если Вы реализуете список, который начинает тяжелую операцию "ВСТАВКИ", LinkedList превосходит Список по характеристикам. Так как LinkedList может сделать это в O (1) время, но Список, возможно, должен развернуть размер основного массива. Для большей информации/детали Вы могли бы хотеть читать на алгоритмическом различии между структурами данных массива и LinkedList. http://en.wikipedia.org/wiki/Linked_list и Массив
Hope эта справка,
При необходимости во встроенном индексном доступе, сортируя (и после этого двоичного поиска), и "ToArray ()" метод, необходимо использовать Список.
В большинстве случаев, List<T>
более полезно. LinkedList<T>
будет менее стоить при добавлении/удалении объектов посреди списка, тогда как List<T>
может только дешево добавить/удалить в конец из списка.
LinkedList<T>
только в, он является самым эффективным при доступе к последовательным данным (или вперед или назад) - произвольный доступ является относительно дорогим, так как это должно обойти цепочку каждый раз, когда (следовательно, почему это не имеет индексатора). Однако, потому что List<T>
по существу просто массив (с оберткой), произвольный доступ прекрасен.
List<T>
также предложения много методов поддержки - Find
, ToArray
, и т.д.; однако, они также доступны для LinkedList<T>
с.NET 3.5/C# 3.0 с помощью дополнительных методов - так, чтобы было меньше фактора.