Что такое коллекция в java
Перейти к содержимому

Что такое коллекция в java

  • автор:

Difference Between & and && in Java

JavaTpoint

In this section, we will discuss the two most important operators & and && in Java and also see the key differences between logical and bitwise operators along with its uses.

Difference Between & and && in Java

& Operator

The single AND operator (&) is known as the Bitwise AND operator. It operates on a single bit. It takes two operands. A bit in the result is 1 if and only if both of the corresponding bits in the operands are 1. The result of the operator may be any number. For example:

&& Operator

The double AND operators (&&) are known as logical AND operators. It is usually used in loops and conditional statements. It is usually used in Boolean expressions. The result of && is always 0 or 1.

Difference Between & and &&

The key difference between && and & operators is that && supports short-circuit evaluations while & operator does not.

Another difference is that && will evaluate the expression exp1, and immediately return a false value if exp1 is false. While & operator always evaluates both expressions (exp1 and exp2) before retiring an answer.

S.N. Basis & Operator && Operator
1 Operator It is a bitwise AND operator. It is a logical AND operator.
2 Evaluation It evaluates both the left and right side of the given expression. It only evaluates the left sides of the given expression.
3 Operates on It operates on Boolean data types as well as on bits. It operates only on Boolean datatype.
4 Uses Used to check logical condition and also used to mask off certain bits such as parity bits. Used only to check the logical conditions.
5 Example z = x & y if (y > 1 && y > x)

Let’s understand bitwise and logical and operator through a Java program.

LogicalAndExample.java

Output:

true false

BitwiseAndExample.java

Коллекции

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

Классы коллекций располагаются в пакете java.util , поэтому перед применением коллекций следует подключить данный пакет.

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

  • Collection : базовый интерфейс для всех коллекций и других интерфейсов коллекций
  • Queue : наследует интерфейс Collection и представляет функционал для структур данных в виде очереди
  • Deque : наследует интерфейс Queue и представляет функционал для двунаправленных очередей
  • List : наследует интерфейс Collection и представляет функциональность простых списков
  • Set : также расширяет интерфейс Collection и используется для хранения множеств уникальных объектов
  • SortedSet : расширяет интерфейс Set для создания сортированных коллекций
  • NavigableSet : расширяет интерфейс SortedSet для создания коллекций, в которых можно осуществлять поиск по соответствию
  • Map : предназначен для созданий структур данных в виде словаря, где каждый элемент имеет определенный ключ и значение. В отличие от других интерфейсов коллекций не наследуется от интерфейса Collection

Эти интерфейсы частично реализуются абстрактными классами:

  • AbstractCollection : базовый абстрактный класс для других коллекций, который применяет интерфейс Collection
  • AbstractList : расширяет класс AbstractCollection и применяет интерфейс List, предназначен для создания коллекций в виде списков
  • AbstractSet : расширяет класс AbstractCollection и применяет интерфейс Set для создания коллекций в виде множеств
  • AbstractQueue : расширяет класс AbstractCollection и применяет интерфейс Queue, предназначен для создания коллекций в виде очередей и стеков
  • AbstractSequentialList : также расширяет класс AbstractList и реализует интерфейс List. Используется для создания связанных списков
  • AbstractMap : применяет интерфейс Map, предназначен для создания наборов по типу словаря с объектами в виде пары «ключ-значение»

С помощью применения вышеописанных интерфейсов и абстрактных классов в Java реализуется широкая палитра классов коллекций — списки, множества, очереди, отображения и другие, среди которых можно выделить следующие:

  • ArrayList : простой список объектов
  • LinkedList : представляет связанный список
  • ArrayDeque : класс двунаправленной очереди, в которой мы можем произвести вставку и удаление как в начале коллекции, так и в ее конце
  • HashSet : набор объектов или хеш-множество, где каждый элемент имеет ключ — уникальный хеш-код
  • TreeSet : набор отсортированных объектов в виде дерева
  • LinkedHashSet : связанное хеш-множество
  • PriorityQueue : очередь приоритетов
  • HashMap : структура данных в виде словаря, в котором каждый объект имеет уникальный ключ и некоторое значение
  • TreeMap : структура данных в виде дерева, где каждый элемент имеет уникальный ключ и некоторое значение

Схематично всю систему коллекций вкратце можно представить следующим образом:

Интерфейсы коллекций в Java

Интерфейс Collection

Интерфейс Collection является базовым для всех коллекций, определяя основной функционал:

public interface Collection extends Iterable < // определения методов >

Интерфейс Collection является обобщенным и расширяет интерфейс Iterable, поэтому все объекты коллекций можно перебирать в цикле по типу for-each .

Среди методов интерфейса Collection можно выделить следующие:

  • boolean add (E item) : добавляет в коллекцию объект item. При удачном добавлении возвращает true, при неудачном — false
  • boolean addAll (Collection col) : добавляет в коллекцию все элементы из коллекции col. При удачном добавлении возвращает true, при неудачном — false
  • void clear () : удаляет все элементы из коллекции
  • boolean contains (Object item) : возвращает true, если объект item содержится в коллекции, иначе возвращает false
  • boolean isEmpty () : возвращает true, если коллекция пуста, иначе возвращает false
  • Iterator iterator () : возвращает объект Iterator для обхода элементов коллекции
  • boolean remove (Object item) : возвращает true, если объект item удачно удален из коллекции, иначе возвращается false
  • boolean removeAll (Collection col) : удаляет все объекты коллекции col из текущей коллекции. Если текущая коллекция изменилась, возвращает true, иначе возвращается false
  • boolean retainAll (Collection col) : удаляет все объекты из текущей коллекции, кроме тех, которые содержатся в коллекции col. Если текущая коллекция после удаления изменилась, возвращает true, иначе возвращается false
  • int size () : возвращает число элементов в коллекции
  • Object[] toArray () : возвращает массив, содержащий все элементы коллекции

Все эти и остальные методы, которые имеются в интерфейсе Collection, реализуются всеми коллекциями, поэтому в целом общие принципы работы с коллекциями будут одни и те же. Единообразный интерфейс упрощает понимание и работу с различными типами коллекций. Так, добавление элемента будет производиться с помощью метода add , который принимает добавляемый элемент в качестве параметра. Для удаления вызывается метод remove() . Метод clear будет очищать коллекцию, а метод size возвращать количество элементов в коллекции.

Logical AND (&&)

The logical AND ( && ) (logical conjunction) operator for a set of boolean operands will be true if and only if all the operands are true . Otherwise it will be false .

More generally, the operator returns the value of the first falsy operand encountered when evaluating from left to right, or the value of the last operand if they are all truthy.

Try it

Syntax

Description

If a value can be converted to true , the value is so-called truthy. If a value can be converted to false , the value is so-called falsy.

Examples of expressions that can be converted to false are:

  • false ;
  • null ;
  • NaN ;
  • 0 ;
  • empty string ( «» or » or « );
  • undefined .

The AND operator preserves non-Boolean values and returns them as they are:

= "" && "foo"; // result is assigned "" (empty string) result = 2 && 0; // result is assigned 0 result = "foo" && 4; // result is assigned 4 

Even though the && operator can be used with non-Boolean operands, it is still considered a boolean operator since its return value can always be converted to a boolean primitive. To explicitly convert its return value (or any expression in general) to the corresponding boolean value, use a double NOT operator or the Boolean constructor.

Short-circuit evaluation

The logical AND expression is a short-circuit operator. As each operand is converted to a boolean, if the result of one conversion is found to be false , the AND operator stops and returns the original value of that falsy operand; it does not evaluate any of the remaining operands.

Consider the pseudocode below.

(some falsy expression) && expr

The expr part is never evaluated because the first operand (some falsy expression) is evaluated as falsy. If expr is a function, the function is never called. See the example below:

function A()  console.log("called A"); return false; > function B()  console.log("called B"); return true; > console.log(A() && B()); // Logs "called A" to the console due to the call for function A, // && evaluates to false (function A returns false), then false is logged to the console; // the AND operator short-circuits here and ignores function B 

Operator precedence

The AND operator has a higher precedence than the OR operator, meaning the && operator is executed before the || operator (see operator precedence).

true || false && false; // true true && (false || false); // false (2 === 3) || (4  0) && (1 === 1); // false 

Examples

Using AND

The following code shows examples of the && (logical AND) operator.

= true && true; // t && t returns true a2 = true && false; // t && f returns false a3 = false && true; // f && t returns false a4 = false && 3 === 4; // f && f returns false a5 = "Cat" && "Dog"; // t && t returns "Dog" a6 = false && "Cat"; // f && t returns false a7 = "Cat" && false; // t && f returns false a8 = "" && false; // f && f returns "" a9 = false && ""; // f && f returns false 

Conversion rules for booleans

Converting AND to OR

The following operation involving booleans:

&& bCondition2 

is always equal to:

!(!bCondition1 || !bCondition2) 
Converting OR to AND

The following operation involving booleans:

|| bCondition2 

is always equal to:

!(!bCondition1 && !bCondition2) 

Removing nested parentheses

As logical expressions are evaluated left to right, it is always possible to remove parentheses from a complex expression provided that certain rules are followed.

The following composite operation involving booleans:

|| (bCondition2 && bCondition3) 

is always equal to:

|| bCondition2 && bCondition3 

Specifications

Specification
ECMAScript Language Specification
# prod-LogicalANDExpression

Browser compatibility

BCD tables only load in the browser

Коллекции в Java: что это такое и зачем они нужны

Коллекции в Java: что это такое и зачем они нужны

В пакете java.util содержится библиотека коллекций(collection framework), которая предоставляет большие возможности для работы с множествами, хэш-таблицами, векторами, разными видами списков и т.д.

Коллекция — это объект, способный хранить группу одинаковых элементов. Она содержит методы для операций с однородными данными. Изначально Java поддерживала работу с коллекциями в рамках классов Vector и Hashtable, но с появлением JDK 1.2 возможности работы с коллекциями были расширены, возникло много открытых интерфейсов и различных видов классов, которые были включены в библиотеку коллекций.

Основные преимущества классов collection framework(перед классами, разрабатываемыми самостоятельно) заключаются в следующем:

  • ускоряется процесс разработки и улучшается качество кода;
  • обеспечивается поддержка повторного использования кода;
  • производится стандартизация интерфейса ваших классов;
  • реализуется поддержка многопоточного доступа.

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

Основу библиотеки составляют открытые интерфейсы, которые можно использовать для создания собственных коллекций. Каждый интерфейс объявляет набор методов, которые вы обязаны реализовать в своей программе:

  • Collection — группа элементов(охватывает Set и List);
  • Set — множество элементов(без дублирования);
  • SortedSet — то же самое, что Set, только элементы упорядочены;
  • List — упорядоченный список;
  • Map — словарь, то есть коллекция, в которой каждый элемент имеет уникальный ключ;
  • SortedMap — то же самое, что и Map, однако элементы упорядочены;
  • Queue — интерфейс для работы с очередью.

Разумеется, интерфейсы были бы «пустыми», если бы в них не существовало встроенных классов, реализующих необходимые функций:

  • ArrayList — список List как массив элементов;
  • LinkedList — список List, выполняющий функции связанного списка;
  • HashSet — множество Set как хэш-таблица;
  • TreeSet — множество SortedSet, используемое как дерево;
  • HashMap — индексированный словарь хэш;
  • TreeMap — коллекция SortedMap древовидной структуры.

Задача каждого из интерфейсов — обеспечить простоту и удобство работы с большим количеством однотипных данных. Рассмотрим подробнее назначение каждого из этих интерфейсов.

  • Collection — общий интерфейс, объединяющий интерфейсы Set и List. Содержит методы для добавления и удаления элементов коллекции, проверки их правильности, наличия и другие.
  • Set — неупорядоченный набор неповторяющихся элементов. Расширяет интерфейс Collection. Если производится попытка добавить в набор элемент, который уже в нем содержится, она будет проигнорирована.
  • List — служит для работы с упорядоченными коллекциями. К каждому элементы такой коллекции можно обратиться по индексу. Расширяет интерфейс Collection.
  • Map — предназначен для работы с коллекциями-словарями, в которых содержатся ключи и соответствующие им значения(каждому ключу соответствует только одно значением). Словарь может содержать произвольное число элементов.
  • Queue — содержит методы для работы с очередями: в них элементы добавляются с одного конца, а извлекаются с другого.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *