Junior
Kāda ir atšķirība starp interfeisiem List un Set Java?
sobes.tech AI
Atbilde no AI
Galvenās atšķirības starp Java List un Set saskarnēm ir šādas:
-
Elementu kārtība:
Listsaglabā pievienošanas kārtību. Elementiem ir indeksi, sākot no 0.Setnegarantē elementu kārtību. Dažas realizācijas (piemēram,LinkedHashSet,TreeSet) var būt ar noteiktu kārtību, betSetsaskarne to neprasa.
-
Dublikāti:
Listļauj glabāt dublētus elementus.Setneļauj glabāt dublētus elementus. Mēģinot pievienot dublētu elementu, operācija vai tiek ignorēta, vai atgriežfalse(atkarībā no realizācijas un metodes).
-
Veiktspēja:
- Operācijas pievienošana un dzēšana
Listvidū var būt lēnāka (īpašiArrayList), salīdzinot arSet. - Pārbaude, vai elements ir (
contains)Set, balstīta uz hashēšanu (HashSet), parasti ir ātrāka (vidēji O(1)), salīdzinot arList(vidēji O(n)). - Operācijas, kas balstītas uz indeksu (
get,set), ir pieejamas tikaiList.
- Operācijas pievienošana un dzēšana
-
Realizācijas:
- Tipiskas
Listrealizācijas:ArrayList,LinkedList,Vector. - Tipiskas
Setrealizācijas:HashSet,LinkedHashSet,TreeSet.
- Tipiskas
Šeit ir piemēri, kas ilustrē atšķirības:
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 ļauj dublētus elementus un saglabā kārtību
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Apple"); // Dublēta elementa pievienošana
System.out.println("List: " + list); // Izvadīs [Apple, Banana, Apple]
System.out.println("Indekss 1: " + list.get(1)); // Pieeja pēc indeksa
// Set neļauj dublētus elementus un kārtība nav garantēta (HashSet)
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // Mēģinājums pievienot dublētu elementu - tiks ignorēts
System.out.println("Set: " + set); // Izvadīs kaut ko līdzīgu [Apple, Banana] vai [Banana, Apple]
// set.get(1); // Kompilācijas kļūda - nav pieejas pēc indeksa
}
}
Salīdzināšanas tabula:
| Īpašība | List | Set |
|---|---|---|
| Kārta | Garantēta (pievienošanas kārta) | Nav garantēta (HashSet), sakārtota (TreeSet) |
| Dublikāti | Atļauti | Nav atļauti |
| Pieejas pēc indeksa | Iespējama (get(int index)) |
Nav iespējama |
| contains() veiktspēja | O(n) vidēji (ArrayList) | O(1) vidēji (HashSet) |
| Tipiskas realizācijas | ArrayList, LinkedList, Vector | HashSet, LinkedHashSet, TreeSet |