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

  • Что подразумевается под примитивными типами данных и классами-оболочками?
  • что такое класс объекта?
  • Когда мы должны их использовать?

В 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 с возможными примерами.!

Рекомендации

Связанный список

"Очередь"

"Карта"

"Набор"

Счастливого обучения! Никогда не пытайтесь исследовать!!