18Wat zijn generics en wat is type-uitwissing?
Generics maken het mogelijk om in code typeveilige containers en API's uit te drukken, zoals List<String>. Tijdens het compileren controleert de compiler de typen en voegt, waar nodig, type-casts in. Tijdens de uitvoering wordt de meeste informatie over generieke typen uitgewist (type-uitwissing), waardoor List<String> en List<Integer> dezelfde runtimeklasse delen. Dit is de reden waarom je niet direct new T() kunt aanroepen, geen primitieve typeparameters kunt gebruiken, of op een betrouwbare manier instanceof List<String> kunt controleren.
List<String> names = new ArrayList<>();
names.add("Alice");
List<? extends Number> producer;
List<? super Integer> consumer;
Probeer deze vraag te beantwoorden met een AI-begeleider
19Wat is het Java Collections Framework?
Het Collections Framework is een verzameling van interfaces en implementaties voor het opslaan en verwerken van groepen objecten. Kerninterfaces zijn onder andere `List`, `Set`, `Queue`, `Deque` en `Map`. Implementaties omvatten `ArrayList`, `LinkedList`, `HashSet`, `TreeSet`, `HashMap`, `TreeMap` en `PriorityQueue`. Kies een collectie op basis van het toegangspatroon, vereisten voor sortering, uniekheid, zoekcomplexiteit, geheugenoverhead en concurrency-vereisten.
List<String> list = new ArrayList<>();
Set<Long> ids = new HashSet<>();
Map<Long, User> usersById = new HashMap<>();
Deque<String> queue = new ArrayDeque<>();
Probeer deze vraag te beantwoorden met een AI-begeleider
20Hoe werkt een HashMap?
Een `HashMap` slaat items op in buckets die worden geselecteerd op basis van een hash van de sleutel. Voor het opzoeken wordt de hash berekend, de juiste bucket gezocht en worden sleutels vergeleken met behulp van de `equals`-methode. Collisions (botsingen) worden binnen de bucket afgehandeld; in moderne Java-versies kunnen lange ketens worden omgezet in een gebalanceerde boomstructuur wanneer aan bepaalde voorwaarden wordt voldaan. Een `HashMap` staat maximaal één `null`-sleutel en meerdere `null`-waarden toe, is niet thread-safe en kan van grootte veranderen (resizen) wanneer de drempelwaarde van de load factor wordt overschreden.
Map<Long, User> users = new HashMap<>();
users.put(user.id(), user);
User found = users.get(user.id());
Probeer deze vraag te beantwoorden met een AI-begeleider
21Wat is het verschil tussen HashMap, LinkedHashMap, TreeMap en ConcurrentHashMap?
HashMap biedt snelle, ongeordende toegang en is niet thread-safe. LinkedHashMap behoudt de invoegvolgorde of toegangsvolgorde en is nuttig voor LRU-achtige caches. TreeMap houdt sleutels gesorteerd op natuurlijke volgorde of via een Comparator en voert bewerkingen uit in O(log n)-tijd. ConcurrentHashMap is ontworpen voor gelijktijdige toegang met gesegmenteerde of interne synchronisatie, staat geen null-sleutels of -waarden toe, en geniet onder belasting de voorkeur over synchronizedMap.
map.computeIfAbsent(key, ignored -> loadValue());
Probeer deze vraag te beantwoorden met een AI-begeleider
22Wat is het verschil tussen ArrayList en LinkedList?
ArrayList is gebaseerd op een array. Het biedt snelle toegang op basis van een index, een compacte geheugenindeling en efficiënte iteratie, maar voor invoegen in het midden moeten bestaande elementen worden opgeschoven. LinkedList is een dubbel gekoppelde lijst. Invoegen kost minder tijd als het knooppunt al bekend is, maar toegang via een index is O(n), de geheugenoverhead is groter en de cachelokaliteit is slechter. In veel praktische toepassingen is ArrayList sneller, zelfs wanneer er af en toe invoegingen plaatsvinden.
Probeer deze vraag te beantwoorden met een AI-begeleider
23Wat is het verschil tussen Comparable en Comparator?
Comparable definieert de natuurlijke ordening binnen de klasse via compareTo. Comparator is een afzonderlijk object of een lambda die een externe ordening definieert. Comparable is handig wanneer een type één duidelijke standaardordening heeft. Comparator is beter wanneer er meerdere ordeningen zijn, zoals op naam, datum of prioriteit. compare en compareTo moeten consistent zijn en bij voorkeur compatibel met equals bij gebruik in gesorteerde sets of maps.
class User implements Comparable<User> {
private int age;
@Override
public int compareTo(User other) {
return Integer.compare(age, other.age);
}
}
Comparator<User> byName =
Comparator.comparing(User::getName);
Comparator<User> byAgeThenName =
Comparator.comparingInt(User::getAge)
.thenComparing(User::getName);
Probeer deze vraag te beantwoorden met een AI-begeleider