Java-da kolleksiya çərçivəsi


JavaBaxılıb 51

Java Koleksiyonları, interfeyslər və tətbiqetmə siniflərindən ibarət bir qrup obyektləri təmsil edən bir çərçivədir. Kolleksiya çərçivəsini, interfeyslərini və dərsləri bu təlimdə müzakirə edəcəyik.

Java-da kolleksiya bir qrup obyektləri təmsil edən tək bir varlıqdır və bir çərçivə interfeys və sinifləri ehtiva edən müəyyən edilmiş bir memarlıqdır. Beləliklə, Java Collection çərçivəsi bir sıra interfeyslər, siniflər və alqoritmləri təyin edən bir arxitekturadır. Bu çərçivə JDK 1.2-dən əldə edilə bilər. Ayrıca axtarış, daxil etmə, çeşidləmə, silmək, manipulyasiya və s. Kimi əməliyyatları həyata keçirə bilər.

Java Koleksiyonları Çerçevesinin Hiyerarşisi

Java-da kolleksiyalarPin

Java Koleksiyonlarının üstünlükləri

  • Davamlı API - Geliştiricilər mövcud interfeys API istifadə edə bilər və onu inkişaf etdirmək üçün əlavə səy tələb etmir.
  • Proqramlaşdırma səyini azaldır - Çərçivə artıq təmin etdiyi üçün məlumat strukturlarının dizaynı üçün səyləri azaldır.
  • Kod keyfiyyətini və inkişafını artırır - Yüksək performans təmin edir
  • Təkrar istifadəni təmin edir

Java Koleksiyonlarının metodları

Üsultəsvir
boolean əlavə (E e)Kolleksiyaya bir element əlavə edir
boolean addAll (Collection c)Kolleksiyaya elementlər kolleksiyası əlavə edir
boşluq təmiz ()Bütün elementləri silərək kolleksiyanı təmizləyir və boşlaşdırır
boolean tərkibində (Object e) varKolleksiyada göstərilən element varsa, doğru qaytarır
booleanAll (Collection c)Kolleksiyada göstərilən bütün kolleksiya elementləri varsa, doğru qayıdır
boolean bərabərdir (Object o)Göstərilən obyektin toplama elementinə bərabər olub olmadığını yoxlayır.
int hashCode ()Koleksiyonun hashcode tam ədədi dəyərini qaytarır
boolean isEmpty ()Kolleksiyanın boş olub olmadığını yoxlayır
Təkrarlayıcı iterator ()Kolleksiya elementləri üzərində təkrarlayıcı qaytarır
Paralel axınStream ()Kolleksiyanın paralel axını qaytarır
boolean sil (Object e)Göstərilən elementi Koleksiyonlardan silər
boolean removeAll (Collection c)Bütün göstərilən kolleksiya elementlərini silir
boolean removeIf (Predicate filter)Kolleksiyadakı predikatı qane edən bütün elementləri silir
boolean retainAll (Kolleksiya c)Göstərilən bütün kolleksiya elementlərini saxlayır və digər elementləri kolleksiyadan silər
int ölçüsü ()Kolleksiyadakı elementlərin sayını qaytarır
Axın axını ()Kolleksiyanın ardıcıl axını qaytarır
Bölücü ayırıcıKolleksiyadakı elementlərin üzərinə bir ayırıcı qaytarır
Obyekt [] toArray ()Kolleksiyanı bir massivə çevirir
t [] toArray (T [] a)Kolleksiyanı qaytarılmış massivin iş vaxtı növlərinin göstərilən massivin olduğu bir massivə çevirir

Koleksiyonlar İnterfeyslər

Bu, Collection çərçivəsində iyerarxiyasının kök interfeysidir. Kolleksiya çərçivəsində mövcud olan digər interfeyslər Xəritə və İterator interfeysləridir. Bu interfeyslərin alt interfeysləri var, çünki Koleksiyon interfeysi üçün birbaşa tətbiq yoxdur.

Kolleksiya interfeysləri Siyahı, Dəstək və Sıra interfeysləri.

Siyahı interfeysi

The siyahı Java Collections interfeysi elementlərin ardıcıl qaydasını qoruyur və təkrarlanan dəyərləri saxlaya bilər. Siyahıdakı elementləri indeks dəyərlərinə əsasən əldə edə və əlavə edə bilərik.

ArrayList, LinkedList və Vector, Siyahı interfeysini tətbiq edən siniflərdir.

ArrayList

The ArrayList Koleksiyon böyüdükdə və ya kiçildikdə ölçüsü avtomatik olaraq artan və ya azalan dinamik massivləri təmin edir. İndeks əsasında ArrayList-dən təsadüfi elementlərə daxil ola bilərik. ibtidai üçün ArrayList istifadə etmək üçün məlumat növləri, Tamsayı, Karakter və s. kimi müvafiq sarmal siniflərindən istifadə etməliyik.

import java.util.ArrayList;
public class ArrayListDemo2 {

  public static void main(String[] args) {
    //Create an Integer ArrayList
    ArrayList<Integer> numbers = new ArrayList<Integer>();
    numbers.add(4);
    numbers.add(8);
    numbers.add(2);
    
    System.out.println("List elements: ");
    System.out.println(numbers);
    
    //Modify element
    numbers.set(1, 6);
    
    System.out.println("After modifying element at index 1:");
    System.out.println(numbers);
    
    //Remove an element
    numbers.remove(2);
    
    System.out.println("After removing element at index 2:");
    System.out.println(numbers);
  }

}
List elements: 
[4, 8, 2]
After modifying element at index 1:
[4, 6, 2]
After removing element at index 2:
[4, 6]

Əlaqəli siyahı

LinkedList sinfi, LinkedList məlumat strukturunu istifadə edən başqa bir Collection sinifidir. Hər bir elementə sonrakı elementlərin göstəriciləri ilə birlikdə dəyəri ehtiva edən bir qovşaq deyilir. Bu göstəricilər növbəti elementin ünvanını saxlayır. Manipulyasiya ArrayList-dən daha sürətli və yerləşdirmə qaydasını qoruyur.

import java.util.Deque;
import java.util.LinkedList;
public class LinkedListDemo {

  public static void main(String[] args) {
    LinkedList<String> cities = new LinkedList<String>();
    
    cities.add("Chennai");
    cities.add("Bangalore");
    
    //Inserts element at the beginning
    cities.push("Kolkata");
    
    System.out.println(cities);
    
    //Retrieves first element
    System.out.println("Output of element() method: " + cities.element());
    
    System.out.println("Out of get method at specified index 2: " + cities.get(2));
    
    //Print and delete the first element
    System.out.println("Output of pop() method: " + cities.pop());
    System.out.println(cities);
    
    //Check if list is empty
    System.out.println("Is LinkedList empty: " + cities.isEmpty());
    
    //Sets new value at index 1
    cities.set(1, "Goa");
    System.out.println("List elements after using set() method: " + cities);
    
    //List size
    System.out.println("Size of the LinkedList: " + cities.size());
  }

}
[Kolkata, Chennai, Bangalore]
Output of element() method: Kolkata
Out of get method at specified index 2: Bangalore
Output of pop() method: Kolkata
[Chennai, Bangalore]
Is LinkedList empty: false
List elements after using set() method: [Chennai, Goa]
Size of the LinkedList: 2

Vektor

Vektor əvvəlcə miras sinifidir, lakin sonradan Koleksiyonlar çərçivəsinin bir hissəsi oldu. Həm də dinamik bir sıra saxlayır, lakin sinxronlaşdırılır. Başlanğıcda miras sinif olduğundan, Koleksiyon metodlarından başqa öz metodlarına sahibdir.

import java.util.Vector;
public class RetrieveVectorElements {

  public static void main(String[] args) {
    Vector v = new Vector();
    v.add("Welcome");
    v.add("to");
    v.add("Java");
    v.add("programming");
    v.add(100);
    
    System.out.println("Vector content:" + v);
    System.out.println("Element at index 2: " + v.elementAt(2));
    System.out.println("First element: " + v.firstElement());
    System.out.println("Element at index 3: " + v.get(3));
    System.out.println("Index of the specified element: " + v.indexOf("Java"));
    System.out.println("Index of the element from the specified index: " + v.indexOf(100, 1));
    System.out.println("Last element: " + v.lastElement());
    System.out.println("Last index of the element: " + v.lastIndexOf("programming"));
    System.out.println("Last index of the element from the specified index: " + v.lastIndexOf("to", 3));
    
    v.set(4,"language");
    v.setElementAt("Python", 2);
    System.out.println("Elements after using set method: " + v);
    
  }

}
Vector content:[Welcome, to, Java, programming, 100]
Element at index 2: Java
First element: Welcome
Element at index 3: programming
Index of the specified element: 2
Index of the element from the specified index: 4
Last element: 100
Last index of the element: 3
Last index of the element from the specified index: 1
Elements after using set method: [Welcome, to, Python, programming, language]

İnterfeysi qurun

The Set interfeys, Collection interfeysinin başqa bir alt interfeysidir və sıralanmamış elementləri saxlayır. Bu, əlavə sifarişini təmin etmədiyi və təkrarlanan dəyəri saxlaya bilməyəcəyimiz deməkdir.

HashSet, LinkedHashSet və TreeSet Set interfeysini tətbiq edən siniflərdir.

HashSet sinfi

HashSet sinfi, Koleksiyondakı elementləri saxlamaq üçün hashing texnikasından istifadə edir. Hashcod dəyərinə əsasən elementləri müvafiq yerdə saxlayır. Yalnız bənzərsiz dəyərləri saxlaya bilər.

import java.util.*;

public class SetArray {

  public static void main(String[] args) {
    Set<String> names = new HashSet<String>();
    names.add("Roshan");
    names.add("Kiran");
    names.add("Tejas");
    names.add("Karthik");
    
    String[] strnames = names.toArray(new String[names.size()]);
    for(String strvalues: strnames) {
      System.out.println(strvalues);
    }
    
  }

}
Roshan
Kiran
Tejas
Karthik

LinkedHashSet sinfi

LinkedHashSet sinfi məlumatları Kolleksiyada saxlamaq üçün LinkedList tətbiqetməsindən istifadə edir. HashSet sinifini genişləndirir və yalnız unikal elementləri saxlamağımızı təmin edir. Elementlərin yerləşdirmə qaydasını qoruyur.

import java.util.LinkedHashSet;

public class LinkedHashSetDemo {

  public static void main(String[] args) {
    LinkedHashSet<String> l = new LinkedHashSet<String>();
    l.add("Ravi");
    l.add("Rakesh");
    l.add("Suresh");
    
    System.out.println(l);
    

  }

}
[Ravi, Rakesh, Suresh]

TreeSet sinfi

TreeSet sinfi, elementlərini Kolleksiyada saxlamaq üçün ağac məlumat quruluşundan istifadə edir. Təbii çeşidləmə funksionallığı təmin edir və bu səbəbdən elementlərə daha sürətli çatmaq asandır. Varsayılan olaraq, bütün elementlər artan sırada saxlanılır.

import java.util.TreeSet;

public class TreeSetDemo {

  public static void main(String[] args) {
    TreeSet<String> ts = new TreeSet<String>();
    ts.add("Bangalore");
    ts.add("Chennai");
    ts.add("Delhi");
    ts.add("Goa");
    ts.add("Mysore");
    
    System.out.println("Elements in the TreeSet after add operation:" + ts);
    
    ts.remove("Chennai");
    System.out.println("Elements in the TreeSet after remove method: " + ts);
    
    TreeSet<String> t = new TreeSet<String>();
    t.add("Mumbai");
    t.add("Hyderabad");
    
    ts.addAll(t);
    
    System.out.println("Elements in the TreeSet after addAll operation: " + ts);
    
    ts.removeAll(t);
    
    System.out.println("Elements in the TreeSet after removeAll method: " + ts);
    
    ts.pollFirst();
    System.out.println("Elements in the TreeSet after pollFirst method: " + ts);
    
    ts.pollLast();
    System.out.println("Elements in the TreeSet after pollLast method: " + ts);

  }

}
Elements in the TreeSet after add operation:[Bangalore, Chennai, Delhi, Goa, Mysore]
Elements in the TreeSet after remove method: [Bangalore, Delhi, Goa, Mysore]
Elements in the TreeSet after addAll operation: [Bangalore, Delhi, Goa, Hyderabad, Mumbai, Mysore]
Elements in the TreeSet after removeAll method: [Bangalore, Delhi, Goa, Mysore]
Elements in the TreeSet after pollFirst method: [Delhi, Goa, Mysore]
Elements in the TreeSet after pollLast method: [Delhi, Goa]

Sıra interfeysi

Sıra interfeysi, Koleksiyondakı elementləri saxlamaq və almaq üçün ilk çıxan (FIFO) konsepsiyadan istifadə edir.

Sıra interfeysini tətbiq edən siniflər PriorityQueue, Dequeue və ArrayQueue.

PriorityQueue sinfi

PriorityQueue elementləri prioritetinə əsasən işləyir. Sıfır dəyərləri prioritet qaydada saxlaya bilmirik

import java.util.PriorityQueue;

public class PriorityQueueDemo {

  public static void main(String[] args) {
    PriorityQueue<String> p = new PriorityQueue();
    p.add("Ravi");
    p.add("Rakesh");
    p.add("Suresh");
    
    for(String s : p)
      System.out.println(s);
    System.out.println("First element: " + p.peek());
    
  }

}
Rakesh
Ravi
Suresh
First element: Rakesh

Deque interfeysi

Deque, iki tərəfli növbənin mənasını verir, yəni hər iki tərəfdən elementləri əlavə edib çıxara bilərik. ArrayDeque sinifindən istifadə edərək həyata keçirilir. Aşağıdakı kimi Deque nümunəsini yarada bilərik.

Deque d = new ArrayDeque();

ArrayDeque sinfi

ArrayDeque sinfi Deque interfeysini tətbiq edir, yəni bu sinfi istifadə edərək Deque istifadə edə bilərik. Bu, hər iki ucdan da elementlər əlavə edib silməyimizə imkan verir. Yenidən ölçülən bir sıra yarada bilərik və onun həcmində heç bir məhdudiyyət yoxdur.

import java.util.ArrayDeque;
import java.util.Deque;

public class ArrayDequeDemo {

  public static void main(String[] args) {
    Deque<Integer> d = new ArrayDeque<Integer>();
    d.add(10);
    d.add(20);
    d.add(30);
    d.add(40);
    d.add(50);
    
    System.out.println(d);
    
    d.addFirst(100);
    d.addLast(200);
    
    System.out.println(d);

  }

}
[10, 20, 30, 40, 50]
[100, 10, 20, 30, 40, 50, 200]

Dəyişən interfeys

Bu, Kolleksiya interfeysi üçün ana interfeysdir. Kolleksiya interfeysi bu interfeysi genişləndirir və bu səbəbdən digər alt interfeyslər də dəyişkən interfeysi və onun tətbiqini alır. İterable interfeys, Koleksiyonlar elementləri üçün bir iterator təmin edir. Bu mücərrəd bir metod ehtiva edir iterator().

Iterator<T> iterator();
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Set;
import java.util.ArrayList;
import java.util.HashSet;

public class IteratorExample {

  public static void main(String[] args) {
    ArrayList<Integer> age = new ArrayList<Integer>();
    LinkedList<String> names = new LinkedList<String>();
    Set<String> setnames = new HashSet<String>();
    setnames.add("Roshan");
    setnames.add("Kiran");
    setnames.add("Tejas");
    setnames.add("Karthik");
    
    Iterator<String> iterator = setnames.iterator();
    while(iterator.hasNext())
      System.out.println(iterator.next());
    
    age.add(10);
    age.add(20);
    age.add(30);
    age.add(40);
    age.add(50);
    
    Iterator<Integer> i = age.iterator();
    System.out.println("Age:");
    while(i.hasNext())
      System.out.print(i.next() + " ");

      
  }

}
Roshan
Kiran
Tejas
Karthik
Age:
10 20 30 40 50

Xəritə interfeysi

Xəritə interfeysi, məlumatları əsas dəyər cütləri şəklində saxlayan Kolleksiya çərçivəsinin bir hissəsidir. Yalnız bənzərsiz düymələri saxlaya bilər və dublikatları ehtiva edə bilməz. Xüsusi açara əsaslanaraq xəritədən dəyərləri ala bilərik.

TreeMap, HashMap və LinkedHashMap, xəritə interfeysini tətbiq edən siniflərdir.

TreeMap sinfi

Elementləri bir ağac məlumat quruluşu şəklində saxlayır və dəyərlərə əsasən elementləri sifariş edir.

import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;

public class IterateTreeMap {

  public static void main(String[] args) {
    TreeMap<Integer, String> tm = new TreeMap<Integer, String>();
    tm.put(111, "Aditya");
    tm.put(333, "Bharat");
    tm.put(222, "Dev");
    tm.put(555, "Hari");
    tm.put(444, "Charan");
    
    System.out.println("Iterate using Entry Set:");
    for(Map.Entry<Integer,String> m: tm.entrySet())
      System.out.println(m.getKey() + " " + m.getValue());
    
    System.out.println("Iterate using KeySet: ");
    for(Integer i: tm.keySet())
      System.out.println(i + " " + tm.get(i));
    
    System.out.println("Iterate through NavigableKeySet: ");
    System.out.println(tm.navigableKeySet());
    
  }

}
Iterate using Entry Set:
111 Aditya
222 Dev
333 Bharat
444 Charan
555 Hari
Iterate using KeySet: 
111 Aditya
222 Dev
333 Bharat
444 Charan
555 Hari
Iterate through NavigableKeySet: 
[111, 222, 333, 444, 555]

HashMap sinfi

Elementləri əsas dəyər cütü şəklində saxlayır, lakin heç bir əlavə əmri vermir. Bu o deməkdir ki, dəyərləri daxil edildiyi qaydada ala bilmərik.

import java.util.HashMap;
import java.util.Map;
public class IterateHashMap {

  public static void main(String[] args) {
    HashMap<String,String> cityState = new HashMap<>();
    cityState.put("Bangalore", "Karnataka");
    cityState.put("Chennai", "TamilNadu");
    cityState.put("Madurai", "TamilNadu");
    cityState.put("Mumbai", "Maharashtra");
    
    System.out.println("Display keys:");
    for(String s : cityState.keySet())
    {
      System.out.println(s);
    }
    System.out.println();
    System.out.println("Display values: ");
    for(String c : cityState.values())
    {
      System.out.println(c);
    }
    System.out.println();
    System.out.println("Display both key-value pairs:");
    for(String v : cityState.keySet())
    {
      System.out.println("Key: " + v + " | value: " + cityState.get(v));
    }

  }

}
Display keys:
Chennai
Madurai
Mumbai
Bangalore

Display values: 
TamilNadu
TamilNadu
Maharashtra
Karnataka

Display both key-value pairs:
Key: Chennai | value: TamilNadu
Key: Madurai | value: TamilNadu
Key: Mumbai | value: Maharashtra
Key: Bangalore | value: Karnataka

LinkedHashMap sinfi

Bu HashMap sinfinə bənzəyir, ancaq fərq, LinkedHashMap-ın yerləşdirmə qaydasını saxlamasıdır. Dəyərləri daxil edildiyi qaydada götürə bilərik.

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

public class IterateLinkedHashMap {

  public static void main(String[] args) {
    LinkedHashMap<Integer,String> lh = new LinkedHashMap<Integer,String>();
    lh.put(1, "Aarthi");
    lh.put(2, "Bharathi");
    lh.put(3, "Chandini");
    
    System.out.println("Iterate using EntrySet method: ");
    for(Map.Entry<Integer, String> m : lh.entrySet()) {
      System.out.println(m.getKey() + " : " + m.getValue());
    }
    
    System.out.println("Iterate using the KeySet method: ");
    for(Integer s : lh.keySet()) {
      System.out.println(s);
    }
    
    System.out.println("Iterate using the Collection values method: ");
    for(String val : lh.values()) {
      System.out.println(val);
    }
      
      

  }

}
Iterate using EntrySet method: 
1 : Aarthi
2 : Bharathi
3 : Chandini
Iterate using the KeySet method: 
1
2
3
Iterate using the Collection values method: 
Aarthi
Bharathi
Chandini

 

arayış

Şərh yaz

Translate »