java 2

Von Oracle Certified Professional Java SE 8 Programmer 2 Study guide - Jeanne Boyarsky and Scott Selikoff

Von Oracle Certified Professional Java SE 8 Programmer 2 Study guide - Jeanne Boyarsky and Scott Selikoff


Kartei Details

Karten 500
Sprache Deutsch
Kategorie Informatik
Stufe Universität
Erstellt / Aktualisiert 03.03.2020 / 22.06.2022
Weblink
https://card2brain.ch/box/20200303_java_2
Einbinden
<iframe src="https://card2brain.ch/box/20200303_java_2/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>

Was für Werte haben b1,..,b4?

Set<Integer> set = new HashSet<>();

boolean b1 = set.add(66);

boolean b2 = set.add(10);

boolean b3 = set.add(66);

boolean b4 = set.add(8);

b1,b2,b4 true, b3 false

Wie weis eine HashSet wo sie Elemente einfügen soll?

Über HashCode(), insofern die hashcodes unique sind. Ansonsten ruft sie (im schlechtesten Fall) equals auf jedem OIbjekt auf

Was für ein Set implementiert TreeSet?

NavigableSet

Was für Methoden sind im NavigableSet interface? (mit Signatur)

  • E lower(E e)   - returned größtes Element < e  oder null
  • E floor(E e)    - returned größtes element <= e oder null
  • E ceiling(E e) - returned kleinstes element >= e oder null
  • E higher(E e) - returned kleinstes element > e oder null

Was ist das besondere an LinkedList? Was ist der Nachteil?

Implementiert List und Queue -> ist aber nicht so effizient wie eine richtige Queue

Was ist eine ArrayDeque?

Eine double-ended queue die effizienter ist als LinkedList.

Elemente werden in einem resizable array gespeichert

Was sind die wichtigsten Methoden einer ArrayDeqeue? (mit signatur)

  • boolean add(E e)  - added element, returned true oder exception
  • E element()   - returned next element oder exception wenn empty
  • boolean offer(E e)  - added element am ende einer Queue und returned ob successfull
  • E remove()  - removes and returns oder exception wenn empty
  • void push(E e)   - added element an anfang einer liste
  • E poll()  - removes and returns next element oder null wenn empty
  • E peek()  - returned next element oder null wenn empty
  • E pop()  -  removed und returned next element oder exception wenn empty queue

Was sind die Vor/Nachteile einer HashMap? Wie kann man einen der Nachteile umgehen?

Keys werden in Hash table gespeichert -> hashCode wird genutzt um Values schneller zu bekommen.

Vorteiel: Adding, retriieving in kosntanter Zeit

Nachteil: Reihenfolge der Elemente geht verloren. Kann man mit einer LinkedHashMap umgehen

Was sind die Vor/Nachteile einer TreeMap?

Voirteil: Keys immer in sortierter Reihenfolge

Nachteil: Adding/Checking ob key existiert in O(log n)

Was sind die wichtigsten Methoden einer Map (mit signatur)?

  • void clear()  
  • boolean isEmpty()
  • int size()
  • V get(Object key)
  • V put(K key, V value)
  • V remove(Object key)
  • boolean containsKey(Object key)
  • boolean containsValue(Object key)
  • Set<K> keySet()
  • Collection<V> values()

Kannst du die Tabelle auch aus dem Kopf ausfüllen?

Ja/nein

Welche datenstrukturen erlauben keine nulls?

  • Datenstrukturen die sortieren -> TreeSet, TreeMap als keys (values ok)
    • TreeMap - no null keys
    • TreeSet - no null elements
  • ArrayDeque -> poll() nutzt null als special return value wenn collections empty is
  • Hashtable (als key oder value)

Welche collection würde man hier nehmen?

.. um die oberste zoomap von einem stack von maps zu picken

ArrayDeque (last-in, first-out) (Stack würde auch gehen, sollte für neuen code aber nicht verwendet werden)

Welche collection würde man hier nehmen?

... um tickets an Leute zu verkaufen in der Reihenfolge wie sie in der Schlange stehen und um ihnen ihre Position in der Schlange mitzuteilen

LinkedList (first-in, first-out  und man benötigt indexes)

Welche collection würde man hier nehmen?

.. um die vornamen von allen elephanten niederzuschreiben um sie einem bekannten freund zu sagen, jedes mal wenn er frägt (die namen sind nicht unique)

ArrayList (Duplicates, werden öfters abgefragt deshalb lieber LinkedList statt ArrayList)

Welche collection würde man hier nehmen?

... um unique animals aufzulisten die man im zoo heute sehen möchte

HashSet (unique, müssen nicht sortiert sein - deshalb ist hashset am effizientesten)

Welche collection würde man hier nehmen?

... um unique animals zu listen die man heute im zoo sehen möchte in einer alphabetischen Reihenflge

TreeSet (unique, sortiert)

Welche collection würde man hier nehmen?

... to look up animals based on a unique identifier

HashMap (looking up a key, no sorting)

Bei der standartmäßigen Sortierung: Was kommt zuerst, Zahlen oder Buchstaben? Uppercase oder lowercase Buchstaben?

Zahlen vor Buchstaben, uppercase vor lowercase

Wie kann man eine eigene Ordnung auf Objekten festlegen?

Indem die Objekte das Interface Comparable implementieren

Was für Methoden hat das Interface Comparable?

public interface Comparable<T> {

  public int compareTo( T o);

}

Was returned die compareTo() methode im Interface Comparable? 

0 wenn current object gleich wie das Objekt welches man vergleicht

< 0 wenn current objekt kleiner als das Objekt welches man vergleicht

> 0 wenn current Objekt größer als das Objekt welches man vergleicht

In manchen Fällen kann es passieren dass man ein Objekt hat das Comarable implementiert und compareTo() und equals unterschiedliche werte liefern (bspw. compareTo ist 0 aber equals ist false).

Wie kann man das vermeiden?

Statt Comparable Comparator verwenden um die Reihenfolge wo anders festzulegen

Wann verwendet man einen Comparator?

Wenn man Objekte sortieren möchte die nicht Comparable sortieren oder eine andere Art der Sortierung verwenden möchte

Was sind die Unterschiede zwischen Comarable und Comparator?

Compiled der code?:

Comparator<Duck> byWeight = new Comparator<Duck>() { //DOES NOT COMPILE
public int compareTo(Duck d1, Duck d2) {
return d1.getWeight()—d2.getWeight();
}
};

Nein, comparator impelemntiert compare, nicht compareTo

Wird folgender Code compilen? 

import java.util.*;

public class SortRabbits {

  static class Rabbit{ int id; }

  public static void main(String[] args) {

    List<Rabbit> rabbits = new ArrayList<>();

    rabbits.add(new Rabbit());

    Collections.sort(rabbits);

  }

}

Nein, Rabbit ist nicht comparable und die sortmehtode erwartet dass die Objekte die sortiert werden sollen Comparable sind

Funktioniert das?

List<String> names = Arrays.asList("Fluffy", "Hoppy");
Comparator<String> c = Comparator.reverseOrder();
int index = Collections.binarySearch(names, "Hoppy", c);
System.out.println(index);

Liefert -1  -> es wird eine binarySearch in ascending order verlangt, wird haben aber eine in descending. Dadurch sind die preconditions schon nicht erfüllt. 

Compiled der Code?:

public class UseTreeSet {
 static class Rabbit{ int id; }
 public static void main(String[] args) {
   Set<Rabbit> rabbit = new TreeSet<>();
    rabbit.add(new Rabbit()); // throws an exception
 } }

Nein, Rabbit implementiert nicht Comparable aber TreeSet versucht zu sortieren -> Exception in thread "main" java.lang.ClassCastException: comparing.Rabbit cannot
be cast to java.lang.Comparable

Wie kann man einem TreeSet einen Comparator übergeben?

Set<Rabbit> rabbit = new TreeSet<>(new Comparator<Rabbit>() {
  public int compare(Rabbit r1, Rabbit r2) {
  return r1.id = r2.id;
 }
});
rabbit.add(new Rabbit());

Wie kann folgender Code verkürzt werden?:

public class DuckHelper {
public static int compareByWeight(Duck d1, Duck d2) {
return d1.getWeight()—d2.getWeight();
}
public static int compareByName(Duck d1, Duck d2) {
return d1.getName().compareTo(d2.getName());
}
}

Comparator<Duck> byWeight = (d1, d2) -> DuckHelper.compareByWeight(d1, d2);

Comparator<Duck> byWeight = DuckHelper::compareByWeight;

Was gibt es für Formate an Methoden-Referenzen?

  • Statische Methoden
  • Instanz-Methoden auf Interfaces
  • Instanz-Methoden auf einer Instanz die zur Laufzeit determiniert werden
  • Konstruktoren

Was ist der Parameter der Collection.removeIf methoden?

Ein predicate, bspw.: 

list.removeIf(s -> s.startsWith("A"));

Was ist der Parameter von replaceAll auf Lists?

Ein UnaryOperator<E>, bspw.:

list.replaceAll(x -> x*2);

Was ist der Parameter von forEach auf Collections?

Eine Lambda/Methodenrefernz, bspw.:

list.forEach( c -> System.out.println(c));

list.forEach(System.out::println);

Wie kann man einen Wert einer Liste hinzügen wenn der Wert in der Liste bisher null ist?

map.putIfAbsent("key", "value");

Wie Funktioniert die merg() methoden bei maps? Was für parameter?

bekommt einen key, value und eine mapping funktion.

Wenn der alte Value null ist wird der neue value eingetragen, ansonsten die mappingfunktion mit dem key und value aufgerufen und das Ergebnis in die map unter dem übergebenen key eingetragen

Wenn der neue Value null ist wird der eintrag(also der key) entfernt

 

Wie funktioniert computeIfPresent bei maps?

map.computeIfPresent(key, mapperFunktion)

die mapperfunktion berechnet einen wert wenn der key vorhanden ist

Wie funktioniert computeIfabsent auf maps?

Berechnet den value whenn der Key nicht existiert oder null ist

computeIfAbsent(key, mapper)

Was für Interfaces implementieren die mapper bei computeIfPresent und computeIfAbsent?

computeIfPresent : bifunction,

computeIfAbsent function

-> bei computeIfAbsent gibt es noch keinen value, deshalb function