В этом блоге я хотел бы пройти через базовое понимание коллекций и их использования. Прежде чем прыгнуть вглубь, нам нужно знать
- Что подразумевается под примитивными типами данных и классами-оболочками?
- что такое класс объекта?
- Когда мы должны их использовать?
В Java есть 8 примитивных типов данных — byte, short, int, long, float, double, boolean и char.
- Его также можно назвать литералом.
- различается по размеру и способу хранения.
- статически типизированный означает, что все переменные должны быть сначала объявлены, прежде чем их можно будет использовать, а все остальные переменные в java являются типами ссылок на объекты.
int a; float f;// primitive data type
- У них есть значения по умолчанию, если они не инициализированы. Обычно значение по умолчанию равно нулю, а для логического значения — false.
- Класс-оболочка — это объект, который инкапсулирует примитивный тип.
- Каждый примитивный тип имеет соответствующую оболочку:
- byte, short, int, long, float, double, boolean, char — примитивный тип
- Byte, Short, Integer, Long, Float, Double, Boolean, Character — класс-оболочка
- Каждый класс-оболочка имеет Object в качестве надкласса.
- каждый класс-оболочка может реализовывать методы класса объектов, такие как hashCode(), equals(Object obj), clone(), toString(), wait() и finalize().
- Объект класса является корнем иерархии классов.
- Автоупаковка означает преобразование примитива в тип оболочки.
- Распаковка означает преобразование оболочки в примитив.
- Класс-оболочка также является неизменяемой, т. е. после создания объекта любого из этих классов его значение нельзя изменить.
Когда использовать примитивные типы
- примитивные типы быстрее — с точки зрения больших объемов вычислений.
- Когда мы хотим, чтобы переменная могла быть равна нулю.
- Когда мы не хотим, чтобы значение по умолчанию было равно нулю.
- Если метод должен возвращать значение
Когда использовать класс-оболочку
- Когда мы используем коллекции или дженерики — это обязательно
- Если нам нужен MIN_SIZE или MAX_SIZE типа.
- Когда мы хотим, чтобы переменная была нулевой.
- Когда мы хотим, чтобы значение по умолчанию было нулевым.
- Если иногда метод может возвращать нулевое значение.
Что такое коллекция? зачем нам нужна структура коллекции?
- Коллекция представляетгруппу объектов в виде единого блока или группы данных (целое число, строка,или любое сочетание типов данных), framework содержит набор классов и интерфейсов как единую архитектуру.
- Это помогает эффективно хранить и обрабатывать данные.
- До JDK 1.2 мы использовали массивы, векторы и хэш-таблицы для группировки объектов, но у них нет общего интерфейса.
- Для достижения общего интерфейса мы переключаемся на структуру коллекции.
- С помощью этого мы сокращаем усилия по программированию и повышаем производительность.
- java. util — служебный пакет, содержащий все классы и интерфейсы, необходимые для структуры коллекции.
- Он содержит интерфейс с именем итерируемый интерфейс, который предоставляет итератору возможность перебирать все коллекции.
- Iterable действует как корень для структуры коллекции.
- Интерфейс говорит нам что делать, но не как это сделать, что означает, что объявление будет, но не будет определения.
- Его нельзя создать, что означает, что мы не можем создать объект для интерфейса.
Список- Интерфейс
Интерфейс List в Java предоставляет способ хранения упорядоченной коллекции.
Список массивов — класс
зачем нам нужен список массивов?
package collection; import java.util.*;// utility package contains all the classes and interfaces public class sample_collection { public static void main(String[] args){ //int a[]= new int[10];// array has fixed size. /* if we need to increase the size, we have add and then compile once again.
Давайте посмотрим на пример, в том, что массив имеет фиксированный размер, если нам нужно увеличить размер, мы должны добавить, а затем скомпилировать еще раз.
public static void main(String[] args){ ArrayList<Integer> list=new ArrayList<Integer>();/*we haven't defined the size. so add, delete, insert is easier, which ,eans it is flexible.*/ list.add(10);// add any number of size public static void main(String[] args){ ArrayList<Integer> list=new ArrayList<Integer>(); //list.add(10);// add any number of size or we can use loop instead for(int i =0;i<=10;i++) list.add(i); System.out.println(list); } output: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] Process finished with exit code
- В приведенном выше примере мы также можем добавить любое количество списков и использовать String или любой класс-оболочку.
- На самом деле мы можем добавлять объекты в класс, и если мы не упомянули класс-оболочку, он автоматически примет свой тип.
- Давайте рассмотрим еще несколько примеров.
list.add(100); list.add(50); ArrayList<String> slist=new ArrayList<String>(); slist.add("Hello"); System.out.println(slist); output: [Hello] Process finished with exit code 0 ArrayList alist=new ArrayList(); alist.add(15); alist.add('C'); alist.add("Collect"); System.out.println(alist); output: [15, C, Collect] Process finished with exit code 0 ArrayList blist=new ArrayList(); blist.add(15); blist.add(15);// which means redundancy is possible System.out.println(blist); output: [15, 15] Process finished with exit code 0
- Список массивов реализован с помощью массивов, поэтому он также имеет индекс.
- Мы также можем обновить список, используя набор (индекс, значение) и удалить элемент из списка.
- мы можем использовать clear() для очистки списка массивов
- contains() для проверки наличия элемента в списке
- clone() для клонирования объекта
- lastIndexOf, чтобы получить последний индекс элемента.
- Методы. Существует несколько способов просмотра списка. Наиболее известные способы — использование базового цикла for в сочетании с методом get() для получения элемента по определенному индексу.
ArrayList<Integer> list=new ArrayList<Integer>(); for(int i =0;i<=10;i++) list.add(i); System.out.println(list); System.out.println(list.get(4));// 4 is the index of output: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 4 Process finished with exit code 0 System.out.println(list.get(4));// updating the list list.set(4,40);// index,value System.out.println(list); output: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 4 [0, 1, 2, 3, 40, 5, 6, 7, 8, 9, 10] Process finished with exit code 0 list.remove(6);//removing the data from list with index of 6 System.out.println(list); output: [0, 1, 2, 3, 40, 5, 6, 7, 8, 9, 10] [0, 1, 2, 3, 40, 5, 7, 8, 9, 10] Process finished with exit code 0 list.contains(5); System.out.println(list.contains(5));//object of output: true Process finished with exit code 0 for(int i:list)// for each loop System.out.println(i); output: 0 1 2 3 40 5 6 7 8 9 10 Process finished with exit code 0 Iterator i = list.iterator(); System.out.println("with the usage of iterator"); System.out.println(i.next());// prints first object in the list output: with the usage of iterator 0
Если нам нужно узнать больше, я использую IntelliJ IDE,
- щелкните правой кнопкой мыши ArrayList → перейдите к →Declaration or Usages.
- Список массивов считается универсальным программированием.
- Он будет храниться как непрерывное выделение памяти или последовательно.
- одна вещь, которую мы должны помнить, это то, что если мы знаем размер, то мы должны массив, потому что это лучше в производительности, если мы не фиксированы с переключением размера на список массивов.
Связанный список - класс
- Он реализован с использованием структуры данных связанного списка.
- если мы хотим удалить/добавить данные в середине списка массивов, мы сдвинули данные. Но в связанном списке мы можем добиться этого, просто указав адрес там, где это необходимо.
Выделение памяти для связанного списка
Выделение памяти при добавлении/удалении
- аналогично, в списке Array мы можем выполнить то же действие в связанном списке.
- Методы связанного списка: addFirst(), addLast(), removeFirst(), removeLast(), getFirst()getLast();
// Declaring the List with initial size n List<Integer> ll = new LinkedList<Integer>(); ll.add(25); for (int j = 1; j <= 5; j++) ll.add(j); System.out.println(ll); output: [25, 1, 2, 3, 4, 5] Process finished with exit code 0
Интерфейс очереди
First In First Out — вставка элементов происходит в конце списка, а удаление элементов происходит в начале списка.
Наиболее часто используемые методы очереди
poll()//Retrieves and removes the head of this queue or returns null if this queue is empty. remove()//Retrieves and removes the head of this queue. peek()//Retrieves, but does not remove, the head of this queue or returns null if this queue is empty. package collection; import java.util.Queue; import java.util.LinkedList; public class Q { public static void main(String[] args){ Queue<Integer> q= new LinkedList<Integer>(); q.add(8); q.add(6); q.add(9); q.add(7); System.out.println(q); System.out.println(q.peek());//head System.out.println(q.poll());//removes head and return the value System.out.println(q.peek());// next head } output: [8, 6, 9, 7] 8 8 6 Process finished with exit code 0 PriorityQueue<Integer> qu= new PriorityQueue<Integer>();// only for sort
Установить интерфейс
- Он в основном ориентирован на уменьшение избыточности, что означает отсутствие повторяющихся элементов, поскольку он хранит уникальные элементы.
- Интерфейс набора позволяет пользователям выполнять основные математические операции над набором.
Set<Integer> s = newHashSet<Integer>();/* as set is interface we cant create object for interface so we use class in right side */
- Набор хэшей на самом деле является объектом, что означает, что данные хранятся в уникальном распределении.
- Объекты вставляются на основе их хэш-кода в хеш-таблице.
- например, возьмем хэш-код в качестве ключа % n — ключ — это объект, а n — общее значение, которое нужно добавить.
import java.util.HashSet; public class set { public static void main(String[] args) { HashSet<String> hash=new HashSet<String>(); hash.add("Array"); hash.add("List"); hash.add("Arraylist"); hash.add("LinkedList"); hash.add("Queue"); hash.add("Set"); hash.add("Array"); System.out.println(hash); } } Output: [Array, Set, Arraylist, List, Queue, LinkedList] Process finished with exit code 0 //to maintain the order we can go for linkedhashset LinkedHashSet<String> hash=new LinkedHashSet<String>(); hash.add("Array"); hash.add("List"); hash.add("Arraylist"); hash.add("LinkedList"); hash.add("Queue"); hash.add("Set"); hash.add("Array"); System.out.println(hash); Output: [Array, List, Arraylist, LinkedList, Queue, Set] Process finished with exit code 0 //incase we want to sort we can go for treeset we can use any wrapper class TreeSet<String> hash=new TreeSet<>(); hash.add("Array"); hash.add("List"); hash.add("Arraylist"); hash.add("LinkedList"); hash.add("Queue"); hash.add("Set"); hash.add("Array"); System.out.println(hash); output: [Array, Arraylist, LinkedList, List, Queue, Set] Process finished with exit code 0
Карта- Интерфейс
- Это объект, который сопоставляет ключи со значениями. Он не может содержать повторяющиеся ключи. Каждый ключ может соответствовать не более чем одному значению.
- Как и в наборе, карта также имеет хеш-карту, древовидную карту и связанную хэш-карту.
Хэш-карта — что нужно помнить
- Hash map хранит элементы в парах «ключ/значение».
- он работает с механизмом хэширования.
- Добавляя или изменяя элемент на карту, мы можем использовать метод put(), а для удаления элемента мы используем метод remove();
- Существует несколько способов итерации через интерфейс. Самый известный способ — использовать цикл for-each и get(Key) или getValueof();
- Когда мы извлекаем объект, мы используем метод get() и снова передаем ключевой объект. На этот раз ключевые объекты снова генерируют один и тот же хеш-код, поэтому ключи HashMap неизменяемы.
- В Java есть несколько встроенных неизменяемых классов, то есть их состояние нельзя изменить после их создания. например Строка, класс-оболочка.
- Нулевой ключ можно использовать для хранения значения, а нулевое значение можно связать с ключом.
- HashMap допускает дублирование значений, но не дублирование ключей.
- Два неравных объекта в Java могут иметь одинаковый хэш-код.
Надеюсь, я пройдусь по важным концепциям коллекций в Java с возможными примерами.!
Рекомендации
"Очередь"
"Карта"
"Набор"
Счастливого обучения! Никогда не пытайтесь исследовать!!