Junior
Kuo skiriasi sąsajos List ir Set Java?
sobes.tech AI
Atsakymas iš AI
Pagrindiniai skirtumai tarp List ir Set sąsajų Java kalboje yra šie:
-
Elementų tvarka:
Listišsaugo pridėjimo tvarką. Elementai turi indeksus, pradedant nuo 0.Setne garantuoja elementų tvarką. Kai kurios įgyvendinimo formos (pvz.,LinkedHashSet,TreeSet) gali turėti tam tikrą tvarką, betSetsąsaja to nereikalauja.
-
Dublikatai:
Listleidžia saugoti dubliuojamus elementus.Setneleidžia saugoti dubliuojamų elementų. Bandant pridėti dubliuojamą elementą, operacija arba ignoruojama, arba grąžinamafalse(priklausomai nuo įgyvendinimo ir metodo).
-
Našumas:
- Operacijos pridėjimas ir ištrynimas
Listviduryje gali būti lėtesnės (ypačArrayList), neiSet. - Patikrinimas ar elementas yra (
contains)Set, pagrįstas maišavimu (HashSet), dažniausiai vykdomas greičiau (vidutiniškai O(1)), palyginti suList(vidutiniškai O(n)). - Operacijos, pagrįstos indeksu (
get,set), yra prieinamos tikList.
- Operacijos pridėjimas ir ištrynimas
-
Įgyvendinimai:
- Tipinės
Listįgyvendinimai:ArrayList,LinkedList,Vector. - Tipinės
Setįgyvendinimai:HashSet,LinkedHashSet,TreeSet.
- Tipinės
Štai pavyzdžiai, iliustruojantys skirtumus:
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class CollectionDifferences {
public static void main(String[] args) {
// List leidžia dubliuojamus elementus ir išlaiko tvarką
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Apple"); // Dubliuojamo elemento pridėjimas
System.out.println("List: " + list); // Išves: [Apple, Banana, Apple]
System.out.println("Elemento indeksas 1: " + list.get(1)); // Prieiga per indeksą
// Set neleidžia dubliuojamų elementų ir tvarka nėra garantuojama (HashSet)
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // Bandymas pridėti dubliuojamą elementą - bus ignoruojama
System.out.println("Set: " + set); // Išves kažką panašaus į [Apple, Banana] arba [Banana, Apple]
// set.get(1); // Klaidų kompiliacijoje - nėra prieigos per indeksą
}
}
Lyginamoji lentelė:
| Savybė | List | Set |
|---|---|---|
| Tvarka | Garantijuota (pridėjimo tvarka) | Nėra garantuota (HashSet), tvarkyta (TreeSet) |
| Dublikatai | Leidžiami | Neleidžiami |
| Prieiga per indeksą | Galima (get(int index)) |
Nėra galimybės |
| contains() našumas | O(n) vidutiniškai (ArrayList) | O(1) vidutiniškai (HashSet) |
| Tipinės įgyvendinimai | ArrayList, LinkedList, Vector | HashSet, LinkedHashSet, TreeSet |