Junior
Aký je rozdiel medzi rozhraniami List a Set v Jave?
sobes.tech AI
Odpoveď od AI
Hlavné rozdiely medzi rozhraniami List a Set v Jave sú:
-
Poradie prvkov:
Listzachováva poradie pridania prvkov. Prvky majú indexy začínajúce od 0.Setnezaručuje poradie prvkov. Niektoré implementácie (napríkladLinkedHashSet,TreeSet) môžu mať určité poradie, ale rozhranieSetto nevyžaduje.
-
Duplikáty:
Listumožňuje uloženie duplicitných prvkov.Setneumožňuje uloženie duplicitných prvkov. Pri pokuse o pridanie duplicitného prvku je operácia buď ignorovaná, alebo vraciafalse(závisí od implementácie a metódy).
-
Výkon:
- Operácie pridania a odstránenia uprostred
Listmôžu byť pomalšie (najmä uArrayList) než uSet. - Kontrola existencie prvku (
contains) vSet, založenom na hashovaní (HashSet), je zvyčajne rýchlejšia (priemerne O(1)) v porovnaní sList(priemerne O(n)). - Operácie založené na indexe (
get,set) sú dostupné iba vList.
- Operácie pridania a odstránenia uprostred
-
Implementácie:
- Typické implementácie
List:ArrayList,LinkedList,Vector. - Typické implementácie
Set:HashSet,LinkedHashSet,TreeSet.
- Typické implementácie
Tu sú príklady, ktoré ukazujú rozdiely:
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 umožňuje duplicitné prvky a zachováva poradie
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Apple"); // Pridanie duplicitného prvku
System.out.println("List: " + list); // Vypíše [Apple, Banana, Apple]
System.out.println("Prvok na indexe 1: " + list.get(1)); // Prístup podľa indexu
// Set neumožňuje duplicitné prvky a poradie nie je garantované (pre HashSet)
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // Pokus o pridanie duplicitného prvku - bude ignorované
System.out.println("Set: " + set); // Vypíše niečo ako [Apple, Banana] alebo [Banana, Apple]
// set.get(1); // Chyba kompilácie - nie je prístup podľa indexu
}
}
Porovnávacia tabuľka:
| Charakteristika | List | Set |
|---|---|---|
| Poradie | Garantované (poradie pridania) | Nie garantované (pre HashSet), zoradené (TreeSet) |
| Duplicitáty | Povolené | Nepovolené |
| Prístup podľa indexu | Možný (get(int index)) |
Nie je možný |
| Výkon contains() | O(n) priemerne (pre ArrayList) | O(1) priemerne (pre HashSet) |
| Typické implementácie | ArrayList, LinkedList, Vector | HashSet, LinkedHashSet, TreeSet |