Commit 1dd7de8c by Patryk Czarnik

gotowe przykłady dot. kolekcji

parent c6cd4597
package p12_kolekcje.a_list;
import java.util.ArrayList;
import java.util.List;
public class DeklaracjeGeneryczne {
public static void main(String[] args) {
List l1 = new ArrayList();
ArrayList l2 = new ArrayList();
List<String> l3 = new ArrayList<String>();
List<String> l4 = new ArrayList<>(); // diamond operator od Javy 7
List<String> l5 = new ArrayList();
List l6 = new ArrayList<>(); // lista Object-ów
//NK List<> l7 = new ArrayList<String>();
List<List<Integer>> l8 = new ArrayList<>();
//NK List<List<Integer>> l9 = new ArrayList<<>>();
//NK List<List<Integer>> l10 = new ArrayList<List<>>();
List<List<Integer>> l11 = new ArrayList<List<Integer>>();
//NK List<int> l12 = new ArrayList<>();
List<int[]> l13 = new ArrayList<>();
// "lista nie wiadomo czego"
// w praktyce takiej listy mogę używać tylko do odczytu, nie mogę w niej niczego zapisać
List<?> l14 = new ArrayList<>();
List<?> l15 = new ArrayList<String>();
// l15.add("ala");
// to nie to samo, co lista Objectów, bo np lista Stringów nie jest tym samym co lista Objectów, i nie można wpisać
//NK List<Object> l16 = new ArrayList<String>();
}
}
package p12_kolekcje.a_list;
import java.util.ArrayList;
import java.util.List;
public class ListaLiczb {
public static void main(String[] args) {
//NK List<int> lista = new ArrayList<>();
List<Integer> lista = new ArrayList<>();
lista.add(5);
lista.add(6);
lista.add(7);
lista.add(8);
lista.add(9);
lista.add(10);
System.out.println(lista);
System.out.println("rozmiar: " + lista.size());
// if(lista.remove(5)) {
// }
Integer element = lista.remove(5); // wg indeksu
System.out.println("Usunięty element: " + element);
System.out.println(lista);
Integer x = 9;
if(lista.remove(x)) { // wg wartości
System.out.println("usunąłem wartość 9");
}
boolean b = lista.remove((Integer)5); // OK, wg wartości
// boolean b = lista.remove((Object)5); // wg wartości
System.out.println("Czy usunięto? " + b);
System.out.println(lista);
}
}
package p12_kolekcje.a_list;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
public class Listy {
public static void main(String[] args) {
List<String> lista = new ArrayList<>();
System.out.println(lista);
// dodaje na koniec
lista.add("ola");
lista.add("ala");
boolean coSieStalo = lista.add("ela");
System.out.println(coSieStalo);
if(lista.add("iza")) {
System.out.println("Iza też");
}
System.out.println(lista);
System.out.println();
// odczyt z określonej pozycji, numeracja od 0 jak w tablicach
String x = lista.get(0); // lista[0] - tak się nie da
System.out.println(x);
x = lista.get(2);
System.out.println(x);
//EXN x = lista.get(lista.size());
// System.out.println(x);
// dodaje na okreslona pozycje, przesuwa dotychczasowe elementy w prawo
// tu może być od 0 do 4, ale już nie 5 (IOOBExn)
lista.add(2, "ewa");
lista.add(lista.size(), "ostatnia"); // OK
System.out.println(lista);
// nadpisuje element na podanej pozycji nowym elementem
lista.set(2, "ula");
System.out.println(lista);
System.out.println();
lista.add(0, "ala");
System.out.println(lista);
// usuwa z określonej pozycji, zwraca obiekt
String wynik = lista.remove(3);
System.out.println("usunąłem element : " + wynik);
System.out.println(lista);
// to by usunęło od razu wszystkie wystąpienia elementu "ala"
// boolean b = lista.removeAll(Collections.singleton("ala"));
// to usuwa pierwsze wystąpienie, elementy są porównywane za pomocą equals, wynik boolean mówi czy element został usunięty
boolean b = lista.remove("ala");
System.out.println("bool : " + b);
System.out.println(lista);
b = lista.remove("ala");
System.out.println("bool : " + b);
System.out.println(lista);
b = lista.remove("ala");
System.out.println("bool : " + b);
System.out.println(lista);
System.out.println();
lista.addAll(Arrays.asList("ola", "ela", "ewa", "kasia", "marysia", "aga"));
System.out.println(lista);
System.out.println("indexOf: " + lista.indexOf("ewa"));
System.out.println("contains: " + lista.contains("ewa"));
System.out.println();
System.out.println("indexOf: " + lista.indexOf("Ewa")); // -1
System.out.println("contains: " + lista.contains("Ewa")); // false
System.out.println();
Collections.sort(lista);
System.out.println(lista);
for(String s : lista) {
System.out.println("Kolejny element: " + s);
}
}
}
package p12_kolekcje.a_list;
import java.util.ArrayList;
import java.util.List;
public class ListyAll {
public static void main(String[] args) {
List<String> a = new ArrayList<>();
a.add("Ala");
a.add("Ola");
a.add("Ela");
a.add("Ula");
System.out.println("a = " + a);
List<String> b = new ArrayList<>(a);
System.out.println("a = " + b);
List<String> c = new ArrayList<>();
c.add("Ala");
c.add("Ula");
System.out.println("c = " + c);
List<String> d = new ArrayList<>();
d.add("Ala");
d.add("Gosia");
System.out.println("d = " + d);
d.addAll(a);
System.out.println("d = " + d);
System.out.println(a.containsAll(c)); // T
System.out.println(c.containsAll(a)); // F
c.add("Basia"); // nie ma w a
System.out.println("c = " + c);
boolean czy = a.removeAll(c);
System.out.println(czy); // T
System.out.println("a = " + a); // usunął Ala i Ula, a nie przejął się Basią
System.out.println();
a.add("Genowefa");
a.add("Hermenegilda");
a.add("Genowefa");
System.out.println("a = " + a);
System.out.println("b = " + b);
// zostawia w liście a tylko te elementy, które wystepują w b
czy = a.retainAll(b);
System.out.println("retainAll " + b);
System.out.println("a = " + a);
System.out.println("b = " + b);
}
}
package p12_kolekcje.a_list;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
public class NoweOperacjeList {
public static void main(String[] args) {
ArrayList<String> lista = new ArrayList<>();
lista.add("Ala");
lista.add("Ola");
lista.add("Kasia");
lista.add("Ela");
lista.add("Łucja");
lista.add("Ula");
lista.add("Asia");
lista.add("Zosia");
System.out.println(lista);
System.out.println();
lista.sort(null);
// lista.sort(Comparator.reverseOrder());
lista.sort(Collator.getInstance());
// lista.sort(Collator.getInstance(Locale.CHINA));
// lista.sort(Collator.getInstance().reversed());
System.out.println(lista);
System.out.println();
lista.forEach(s -> System.out.print(s + ", "));
System.out.println();
System.out.println();
List<String> lista1 = (List<String>)lista.clone();
System.out.println(lista1);
// predykat; operacja usuwa z listy wszystkie spełaniające warunek
lista1.removeIf(s -> s.length() <= 3);
System.out.println(lista1);
System.out.println();
List<String> lista2 = (List<String>)lista.clone();
System.out.println(lista2);
lista2.replaceAll(s -> s.toUpperCase()); // lambda expression
// lista2.replaceAll(String::toUpperCase); // method reference - w tym przypadku równoważnie
System.out.println(lista2);
System.out.println();
}
}
package p12_kolekcje.a_list;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class PorownanieSzybkosciList {
public static void testujListe(List<Integer> lista) {
long start, koniec;
int suma;
System.out.print("Wstawianie 250 tys. na koniec listy (add)... ");
start = System.currentTimeMillis();
for(int i=0; i<250000; i++) {
lista.add(i);
}
koniec = System.currentTimeMillis();
System.out.println(koniec - start + " ms");
lista.clear(); // usuwa całą zawartość
System.out.print("Wstawianie 500 tys. na koniec listy (add)... ");
start = System.currentTimeMillis();
for(int i=0; i<500000; i++) {
lista.add(i);
}
koniec = System.currentTimeMillis();
System.out.println(koniec - start + " ms");
System.out.println("\nDodawanie na początek... ");
start = System.currentTimeMillis();
for(int i=0; i < 10000; i++) {
lista.add(0, 333); // 333 jest elementem (wartością) a nie indeksem
// Szybko dla LinkedList, wolno dla ArrayList
}
koniec = System.currentTimeMillis();
System.out.println(koniec - start + " ms");
System.out.println("\nWybieranie po indeksie... ");
start = System.currentTimeMillis();
suma = 0;
for(int i=0; i < 5000; i++) {
suma += lista.get(i * 100);
// Szybkie dla ArrayList, wolne dla LinkedList
}
koniec = System.currentTimeMillis();
System.out.println(koniec - start + " ms");
System.out.println("wynik="+suma);
System.out.println("\nOdczytanie wszystkich elementów foreach");
start = System.currentTimeMillis();
suma = 0;
for(int x : lista) {
suma += x;
}
koniec = System.currentTimeMillis();
System.out.println(koniec - start + " ms");
System.out.println("wynik="+suma);
}
public static void main(String[] args) {
List<Integer> linked = new LinkedList<>();
List<Integer> tablicowa = new ArrayList<>();
System.out.println("LinkedList:");
testujListe(linked);
System.out.println("\n\n================");
System.out.println("ArrayList:");
testujListe(tablicowa);
}
}
package p12_kolekcje.b_set_map;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.TreeSet;
public class ListyIZbiory {
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<>();
LinkedList<String> lista = new LinkedList<>();
HashSet<String> hasz = new HashSet<>();
LinkedHashSet<String> linkedHasz = new LinkedHashSet<>();
TreeSet<String> drzewo = new TreeSet<>();
al.add("ala"); lista.add("ala"); drzewo.add("ala"); hasz.add("ala"); linkedHasz.add("ala");
al.add("ola"); lista.add("ola"); drzewo.add("ola"); hasz.add("ola"); linkedHasz.add("ola");
al.add("ela"); lista.add("ela"); drzewo.add("ela"); hasz.add("ela"); linkedHasz.add("ela");
al.add("ula"); lista.add("ula"); drzewo.add("ula"); hasz.add("ula"); linkedHasz.add("ula");
al.add("ola"); lista.add("ola"); drzewo.add("ola"); hasz.add("ola"); linkedHasz.add("ola");
System.out.println("ArrayList: "+al);
System.out.println("LinkedList: "+lista);
System.out.println("TreeSet: "+drzewo);
System.out.println("HashSet: "+hasz);
System.out.println("LinkedHashSet: "+linkedHasz);
System.out.println();
// dla wszystkich list wolno działa operacja contains / indexOf
System.out.println(al.contains("ela"));
// dla wszystkich zbiorów szybko działa operacja contains
System.out.println(hasz.contains("ela"));
}
}
package p12_kolekcje.b_set_map;
import java.util.ArrayList;
import java.util.List;
import java.util.TreeMap;
public class NoweOperacjeMap {
public static void main(String[] args) {
TreeMap<String, Integer> map = new TreeMap<>();
map.put("Ala", 20);
map.put("Ola", 30);
System.out.println(map);
map.putIfAbsent("Ala", 25); // nie wpisuje
map.putIfAbsent("Ela", 45); // wpisuje
System.out.println(map);
map.replace("Ala", 28); // zamienia
map.replace("Ula", 48); // nic się nie dzieje
System.out.println(map);
map.replace("Ala", 40, 41); // jeśli taka była poprzednia wartość - tutaj nic się nie stanie
System.out.println(map);
map.replaceAll((k, v) -> v+1); // zwiększa wszystkie wartości o 1
System.out.println(map);
map.replaceAll((k, v) -> k.startsWith("A") ? v+1 : v); // zwiększa o 1 tylko słowa na literę A
System.out.println(map);
// dodaje nowy wpis z wartością 10, albo dodaje 10 do istniejącej wartości
map.merge("Ola", 10, Math::addExact); // (x,y) -> x+y
map.merge("Ewa", 10, Math::addExact);
System.out.println(map);
System.out.println();
// Zamiast pętli, możena elementy przeglądać w ten sposób:
map.forEach((k, v) -> {
System.out.println("Klucz " + k + " ma wartość " + v);
});
}
}
package p12_kolekcje.b_set_map;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class Slowniki {
public static void main(String[] args) {
Map<String, Integer> hasz = new HashMap<>();
Map<String, Integer> linkedHasz = new LinkedHashMap<>();
Map<String, Integer> drzewo = new TreeMap<>();
hasz.put("ala", 20); drzewo.put("ala", 20); linkedHasz.put("ala", 20);
hasz.put("ola", 30); drzewo.put("ola", 20); linkedHasz.put("ola", 30);
hasz.put("ela", 20); drzewo.put("ela", 20); linkedHasz.put("ela", 20);
hasz.put("ula", 55); drzewo.put("ula", 55); linkedHasz.put("ula", 55);
System.out.println(hasz.get("ela")); //20
System.out.println(hasz.get("ewa")); //null
System.out.println(hasz.containsKey("ela")); // szybkie
System.out.println(hasz.containsValue(55)); // wolne
System.out.println("\nTreeMap: "+drzewo);
System.out.println("HashMap: "+hasz);
System.out.println("LinkedHashMap: "+linkedHasz);
System.out.println("====================================\n");
hasz.put("ola", 31); drzewo.put("ola", 31); linkedHasz.put("ola", 31);
System.out.println("TreeMap: "+drzewo);
System.out.println("HashMap: "+hasz);
System.out.println("LinkedHashMap: "+linkedHasz);
System.out.println("\nWszystkie wpisy:");
for(Map.Entry<String, Integer> entry : drzewo.entrySet()) {
System.out.println(entry.getKey() + " -> " + entry.getValue());
}
System.out.println("\nWszystkie klucze:");
for(String s : drzewo.keySet()) {
System.out.println(s);
}
System.out.println("\nWszystkie wartości:");
for(Integer i : drzewo.values()) {
System.out.println(i);
}
// Można też przypisać na zmienne:
Set<Map.Entry<String, Integer>> zbiorWpisow = hasz.entrySet();
Set<String> klucze = hasz.keySet();
Collection<Integer> wartosci = hasz.values();
// Jak zrobić listę kluczy?
List<String> kluczel = new ArrayList<>(hasz.keySet());
}
}
package p12_kolekcje.b_set_map;
import java.util.Arrays;
import java.util.SortedSet;
import java.util.TreeSet;
public class Tree1 {
public static void main(String[] args) {
// TreeSet implementuje dodatkowe interfejsy:
// SortedSet<String>
// NavigableSet<String>
TreeSet<String> imiona = new TreeSet<>(
Arrays.asList("Ala", "Ola", "Ula", "Ela", "Ewa", "Ania", "Kasia", "Aga", "Iwona", "Magda", "Iza"));
System.out.println(imiona);
SortedSet<String> head1 = imiona.headSet("Iwona");
System.out.println(head1); // obejmuje wszystkie elementy < Iwona
SortedSet<String> head2 = imiona.headSet("Iwona", true);
System.out.println(head2); // obejmuje wszystkie elementy <= Iwona
SortedSet<String> tail1 = imiona.tailSet("Iwona");
System.out.println(tail1); // obejmuje wszystkie elementy >= Iwona
SortedSet<String> tail2 = imiona.tailSet("Iwona", false);
System.out.println(tail2); // obejmuje wszystkie elementy > Iwona
// headSet i tailSet (bez parametru inclusive) dają łącznie cały zbiór
System.out.println();
// Jako granicę można podawać także elementy niewystępujące w kolekcji
SortedSet<String> head3 = imiona.headSet("Jola");
System.out.println(head3);
SortedSet<String> sub1 = imiona.subSet("Ela", "Iwona"); // domyslnie inclusive: true / false
System.out.println(sub1);
SortedSet<String> sub2 = imiona.subSet("Ela", true, "Iwona", true);
System.out.println(sub2);
System.out.println("\n############");
// to są "widoki", a nie kopie - zmiany w zbiorze pierwotnym są od razu widziane przez pobrane obiekty head/tail
System.out.println("Dodaję elementy...");
imiona.add("Julia");
imiona.add("Ewelina");
System.out.println(imiona);
System.out.println(head1);
System.out.println(tail1);
System.out.println();
System.out.println("head.add(Basia)");
head1.add("Basia");
System.out.println(imiona);
System.out.println(head1);
System.out.println(tail1);
System.out.println();
System.out.println("head.remove(Ewa)");
System.out.println("head.remove(Magda)");
head1.remove("Ewa");
head1.remove("Zosia"); // nie ma takiego elementu, nie ma błędu
head1.remove("Magda"); // nie usuwa, nie ma błędu
System.out.println(imiona);
System.out.println(head1);
System.out.println(tail1);
System.out.println();
System.out.println("head.add(Zosia)");
head1.add("Zosia"); // IllegalArgumentException: key out of range
System.out.println(imiona);
System.out.println(head1);
System.out.println(tail1);
System.out.println();
}
}
package p12_kolekcje.b_set_map;
import java.util.Arrays;
import java.util.NavigableSet;
import java.util.TreeSet;
public class Tree2 {
public static void main(String[] args) {
NavigableSet<String> imiona = new TreeSet<>(
Arrays.asList("Ala", "Ola", "Ula", "Ela", "Ewa", "Ania", "Kasia", "Aga", "Iwona", "Magda", "Iza"));
System.out.println(imiona);
System.out.println("first: " + imiona.first());
System.out.println("last : " + imiona.last());
System.out.println(imiona);
System.out.println();
System.out.println("pętla first / higher");
String s = imiona.first();
while(s != null) {
System.out.println(s);
s = imiona.higher(s);
}
System.out.println("========================");
System.out.println("pętla last / lower");
s = imiona.last();
while(s != null) {
System.out.println(s);
s = imiona.lower(s);
}
System.out.println("========================");
System.out.println("pętla poll - usuwanie");
System.out.println("size: " + imiona.size());
while((s = imiona.pollFirst()) != null) {
System.out.println(" # " + s);
}
System.out.println("size: " + imiona.size());
// analogicznie pollLast()
}
}
package p12_kolekcje.b_set_map;
import java.math.BigDecimal;
import java.text.Collator;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
public class ZbiorDziwnieSortowany {
public static void main(String[] args) {
TreeSet<String> normalny = new TreeSet<>();
TreeSet<String> alfabetyczny = new TreeSet<>(Collator.getInstance());
// TreeSet<String> alfabetyczny = new TreeSet<>(Collator.getInstance(new Locale("fr", "FR")));
TreeSet<String> dziwny = new TreeSet<>((a,b) -> a.length() - b.length());
normalny.add("Ala");
alfabetyczny.add("Ala");
dziwny.add("Ala");
normalny.add("Ącki");
alfabetyczny.add("Ącki");
dziwny.add("Ącki");
normalny.add("Łucja");
alfabetyczny.add("Łucja");
dziwny.add("Łucja");
normalny.add("Wiktor");
alfabetyczny.add("Wiktor");
dziwny.add("Wiktor");
normalny.add("Hermenegilda");
alfabetyczny.add("Hermenegilda");
dziwny.add("Hermenegilda");
normalny.add("Ola");
alfabetyczny.add("Ola");
dziwny.add("Ola");
// Ola jest traktowana jak == Ala, bo comparator zwraca 0 gdy napisy są tej samej długości
// TreeSet i TreeMap nie uzywają equals do sprawdzenia czy elementy sa równe, ograniczają się do użycia compare albo compareTo
System.out.println(normalny);
System.out.println(alfabetyczny);
System.out.println(dziwny);
System.out.println();
System.out.println("Sprawa BigDecimal:");
BigDecimal[] liczby = {
new BigDecimal("123.00"),
new BigDecimal("123.0"),
new BigDecimal("123"),
new BigDecimal("124"),
};
Set<BigDecimal> t = new TreeSet<>();
Set<BigDecimal> h = new HashSet<>();
for(BigDecimal b : liczby) {
t.add(b);
h.add(b);
}
System.out.println("Tree: " + t);
System.out.println("Hash: " + h);
}
}
package p12_kolekcje.b_set_map;
import java.util.Arrays;
import java.util.HashSet;
public class ZmianaKolejnosciWHaszSecie {
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.addAll(Arrays.asList("Ala", "Ola", "Ula", "Ela", "Ewa", "Ania", "Kasia", "Aga", "Iwona", "Magda", "Iza"));
System.out.println(set.size());
System.out.println(set);
set.add("Julia");
System.out.println(set.size());
System.out.println(set);
set.add("Ewelina");
System.out.println(set.size());
System.out.println(set);
// for (String s : set) {
// int hash = s.hashCode();
// System.out.printf("%10s : hash = %10d , h%%16 = %2d , h%%32 = %2d\n",
// s, hash, hash%16, hash%32);
// }
}
}
package p12_kolekcje.c_queue;
import java.util.ArrayDeque;
public class KolejkaJakoStos {
public static void main(String[] args) {
ArrayDeque<Integer> stos = new ArrayDeque<>();
System.out.println(stos);
for(int i = 1; i < 10; i++) {
System.out.println(i*i);
stos.push(i*i);
}
System.out.println();
System.out.println(stos);
System.out.println();
while(! stos.isEmpty()) {
Integer liczba = stos.pop();
System.out.println(liczba);
}
}
}
package p12_kolekcje.c_queue;
import java.util.ArrayDeque;
import java.util.PriorityQueue;
import java.util.Queue;
public class Kolejki {
public static void main(String[] args) {
Queue<String> kolejka; // ewentualnie Deque<String>
String elem;
System.out.println("Kolejka prosta:"); // FIFO
kolejka = new ArrayDeque<>();
// kolejka = new LinkedList<>();
kolejka.add("ala");
kolejka.add("ola");
kolejka.add("ela");
kolejka.add("ula");
System.out.println("Cała: " + kolejka);
System.out.println("Dodaję aaa");
kolejka.add("aaa");
System.out.println(kolejka);
System.out.println("Wyjmuję w pętli:");
while((elem = kolejka.poll()) != null ) {
System.out.println(elem);
}
System.out.println("\nKolejka priorytetowa:");
kolejka = new PriorityQueue<>();
kolejka.add("ala");
kolejka.add("ola");
kolejka.add("ela");
kolejka.add("ula");
System.out.println("Cała: " + kolejka);
System.out.println("Dodaję aaa");
kolejka.add("aaa");
System.out.println(kolejka);
// jako pierwszy element w PriorityQueue występuje najmniejszy
System.out.println("Wyjmuję w pętli:");
while((elem = kolejka.poll()) != null) {
System.out.println(elem);
}
}
}
package p12_kolekcje.c_queue;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Deque;
public class Kolejki_Operacje {
public static void main(String[] args) {
Deque<String> kolejka = new ArrayDeque<String>(
Arrays.asList("Ala", "Ula", "Ola", "Kasia"));
System.out.println(kolejka);
// odczyt bez usuwania, zwracają null jeśli kolejka jest pusta
System.out.println("peek / peekFirst / peekLast");
System.out.println(kolejka.peek());
System.out.println(kolejka.peekFirst());
System.out.println(kolejka.peekLast());
System.out.println();
// odczyt bez usuwania, wyrzucają wyjątek jeśli kolejka jest pusta
System.out.println("element / getFirst / getLast");
System.out.println(kolejka.element());
System.out.println(kolejka.getFirst());
System.out.println(kolejka.getLast());
System.out.println();
// dodawanie na końcu i na początku
kolejka.add("Zosia");
kolejka.addLast("Zuzia");
kolejka.addFirst("Ania");
System.out.println(kolejka);
kolejka.offer("Zosia 2");
kolejka.offerLast("Zuzia 2");
kolejka.offerFirst("Ania 2");
System.out.println(kolejka);
System.out.println();
// usuwanie - poll zwracają null jeśli kolejka jest pusta
String s;
s = kolejka.poll(); // pobiera i usuwa pierwszy element
System.out.println(s);
s = kolejka.pollFirst();
System.out.println(s);
s = kolejka.pollLast();
System.out.println(s);
System.out.println();
// usuwanie - remove wyrzucają wyjątek jeśli kolejka jest pusta
s = kolejka.remove();
System.out.println(s);
s = kolejka.removeFirst();
System.out.println(s);
s = kolejka.removeLast();
System.out.println(s);
System.out.println();
kolejka.add("Zosia");
kolejka.add("Ola");
System.out.println(kolejka);
// [Ola, Kasia, Zosia, Zuzia, Zosia, Ola]
boolean b;
b = kolejka.remove("Ola"); // usuwa jedno wystąpienie, równoważne removeFirstOccurrence
System.out.println(kolejka);
kolejka.removeLastOccurrence("Zosia");
System.out.println(kolejka);
}
}
package p12_kolekcje.e_iterator;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class Iteratory {
// Kod jest napisany tak, jak pisało się w Javie 1.4
// Nie było generyków (trzeba rzutować)
// Nie było pętli for-each - trzeba używać iteratorów
public static void main(String[] args) {
List lista = new LinkedList();
lista.add("ala");
lista.add("ola");
lista.add("ela");
lista.add("ula");
System.out.println("Na początku: " + lista);
Iterator it = lista.iterator();
while(it.hasNext()) {
String element = (String)it.next();
System.out.println(element);
if("ela".equals(element)) {
it.remove();
}
}
System.out.println("Na koniec: " + lista);
}
}
package p12_kolekcje.e_iterator;
import java.util.ListIterator;
import java.util.LinkedList;
import java.util.List;
public class IteratoryListowe {
// Iteratory wciąż mogą się przydać, najbardziej gdy używamy klasy LinkedList,
// bo w niej nie ma "random access" i właśnie za pomocą iteratora możemy
// przeglądać listę i ją modyfikować "w locie"
public static void main(String[] args) {
List<String> lista = new LinkedList<>();
lista.add("ala");
lista.add("ola");
lista.add("ela");
lista.add("ula");
System.out.println("Na początku: " + lista);
ListIterator<String> it = lista.listIterator();
while(it.hasNext()) {
String element = it.next();
System.out.println(element);
if("ela".equals(element)) {
it.add("maja"); // za element bieżący, ale nowowstawione elementy nie będą odwiedzone przez ten iterator
it.add("gucio");
} else if("ola".equals(element)) {
it.set("Aleksandra");
} else if("ula".equals(element)) {
it.remove();
}
}
System.out.println();
it = lista.listIterator(3);
while(it.hasPrevious()) {
System.out.println(it.previousIndex() + " " + it.previous());
}
System.out.println("Na koniec: " + lista);
}
}
package p12_kolekcje.e_iterator;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Konkurencja1 {
public static void main(String[] args) {
List<String> lista = new ArrayList<>();
lista.add("ala");
lista.add("ola");
lista.add("ela");
lista.add("ula");
System.out.println("Na początku: " + lista);
// można używać wielu iteratorów do odczytu kolekcji - to jest OK
Iterator<String> it1 = lista.iterator();
while(it1.hasNext()) {
String element = it1.next();
System.out.print(element);
Iterator<String> it2 = lista.iterator();
while(it2.hasNext()) {
System.out.print(" " + it2.next().length());
}
System.out.println();
}
}
}
package p12_kolekcje.e_iterator;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Konkurencja2 {
public static void main(String[] args) {
List<String> lista = new ArrayList<>();
lista.add("ala");
lista.add("ola");
lista.add("ela");
lista.add("ula");
System.out.println("Na początku: " + lista);
Iterator<String> it1 = lista.iterator();
while(it1.hasNext()) {
String element = it1.next();
System.out.print(element);
Iterator<String> it2 = lista.iterator();
while(it2.hasNext()) {
String elem2 = it2.next();
System.out.print(" " + elem2.length());
if(elem2.charAt(0) == 'o') {
it2.remove();
}
}
System.out.println();
}
// Jesli uzywamy iterator (it1) a w tym czasie w inny sposób zmienimy kolekcję
// (np. innym iteratorem), to kolejna operacja na tym pierwszym iteratorze skończy sie wjątkiem ConcurrectModificationEx
}
}
package p12_kolekcje.e_iterator;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Konkurencja3 {
public static void main(String[] args) {
List<String> lista = new ArrayList<>();
lista.add("ala");
lista.add("ola");
lista.add("ela");
lista.add("ula");
System.out.println("Na początku: " + lista);
// wyjątek pojawia się także gdy modyfikujemy listę metodami add/remove
// w trakcie przeglądania jej jakimś iteratorem
Iterator<String> it = lista.iterator();
while(it.hasNext()) {
String element = it.next();
System.out.println(element);
if(element.charAt(0) == 'o') {
// lista.set(3, "Agata"); // to nie spowodowało błędu
lista.remove(2); // to psuje działanie pętli for-each
// lista.add("ewa"); // to też psuje
System.out.println("już usunąłem");
//break;
}
}
System.out.println("koniec");
}
}
package p12_kolekcje.e_iterator;
import java.util.ArrayList;
import java.util.List;
public class Konkurencja4 {
public static void main(String[] args) {
List<String> lista = new ArrayList<>();
lista.add("ala");
lista.add("ola");
lista.add("ela");
lista.add("ula");
System.out.println("Na początku: " + lista);
// wyjątek pojawia się także gdy modyfikujemy listę metodami add/remove
// w trakcie przeglądania jej jakimś iteratorem
// pętla for-each ma w sobie zaszyty niejawny iterator
for (String element : lista) {
System.out.println(element);
if(element.charAt(0) == 'o') {
// lista.set(3, "Agata"); // to nie spowodowało błędu
lista.remove(2); // to psuje działanie pętli for-each
// lista.add("ewa"); // to też psuje
System.out.println("już usunąłem");
}
}
}
}
package p12_kolekcje.e_iterator;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class Konkurencja6 {
public static void main(String[] args) {
List<String> lista = new ArrayList<>();
lista.add("Ala");
lista.add("Ola");
lista.add("Ela");
lista.add("Ula");
System.out.println(lista);
String a, b, c;
Iterator<String> it1 = lista.iterator();
a = it1.next();
System.out.println("it1 jest na pozycji " + a);
ListIterator<String> it2 = lista.listIterator();
it2.next();
b = it2.next();
System.out.println("it2 jest na pozycji " + b);
a = it1.next();
a = it1.next();
System.out.println("it1 jest na pozycji " + a);
// dopóki tylko odczytujemy elementy kolekcji, można używać wielu iteratorów jednocześnie
System.out.println();
it2.add("Jola");
// it2.remove();
// lista.add("Fasola");
System.out.println("dodałem nowy element za pomocą it2");
System.out.println(lista);
try {
// Kolekcja została zmodyfikowana nie poprzez iterator it1.
// Teraz próba wykonania operacji poprzed it1 kończy się wyjątkiem.
System.out.println("przesuwam it1");
a = it1.next();
System.out.println("it1 jest na pozycji " + a);
} catch (Exception e) {
System.out.println("Wyjątek " + e);
}
}
}
package p12_kolekcje.e_iterator;
import java.util.ArrayList;
import java.util.List;
public class Konkurencja7a {
public static void main(String[] args) {
List<String> lista = new ArrayList<>();
lista.add("Ala");
lista.add("Ola");
lista.add("Ela");
lista.add("Ula");
System.out.println(lista);
for (String s : lista) {
System.out.println(s);
if(s.equals("Ela")) {
lista.add("Nowy"); // EXN
}
}
}
}
package p12_kolekcje.e_iterator;
import java.util.ArrayList;
import java.util.List;
public class Konkurencja7b {
public static void main(String[] args) {
List<String> lista = new ArrayList<>();
lista.add("Ala");
lista.add("Ola");
lista.add("Ela");
lista.add("Ula");
System.out.println(lista);
for (String s : lista) {
System.out.println(s);
if(s.equals("Ela")) {
lista.set(3, "Urszula"); // nie powoduje błędu
}
}
}
}
package p12_kolekcje.s_sortowanie;
import java.util.Comparator;
public class KomparatorDlugosciNapisow implements Comparator<String> {
public int compare(String s1, String s2) {
/* Jeśli zwracam <0 to znaczy że s1 uważam za mniejsze.
* Jeśli zwracam >0 to znaczy że s1 uważam za większe.
* Jeśli zwracam 0 to znaczy, że są równe.
*/
return s1.length() - s2.length();
}
}
package p12_kolekcje.s_sortowanie;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Sortowanie1 {
public static void main(String[] args) {
String[] imiona = { "Ala", "Ola", "Iwona", "Magdalena", "Joanna", "Anna", "Teresa",
"Żaneta", "Ęcki", "Ącki", "Agnieszka", "ala", "Łucja", "Julia", "Julitta", "Zuzanna" };
List<String> lista = new ArrayList<>(Arrays.asList(imiona));
System.out.println(lista);
// dostępne "od początku" kolekcji w Javie
System.out.println("\nCollections.sort");
Collections.sort(lista);
System.out.println(lista);
// Domyślnie porównywanie Stringów bazuje na kodach Unicode poszczególnych znaków
System.out.println("\nCollections.shuffle");
Collections.shuffle(lista);
System.out.println(lista);
// Od Javy 8 można też tak:
System.out.println("\nlista.sort(null)");
lista.sort(null);
System.out.println(lista);
}
}
package p12_kolekcje.s_sortowanie;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
public class Sortowanie2 {
public static void main(String[] args) {
String[] imiona = { "Ala", "Ola", "Iwona", "Magdalena", "Joanna", "Anna", "Teresa",
"Żaneta", "Ęcki", "Ącki", "ala", "Agnieszka", "Łucja", "Julia", "Julitta", "Ela", "Zuzanna" };
List<String> lista = new ArrayList<>(Arrays.asList(imiona));
System.out.println(lista);
// Pierwszy sposób utworzenia komparatora: oddzielna klasa
System.out.println("\nlista.sort( komparator )");
// Collections.shuffle(lista);
KomparatorDlugosciNapisow komparator = new KomparatorDlugosciNapisow();
lista.sort(komparator);
System.out.println(lista);
System.out.println("\nCollections.sort( lista, komparator )");
Collections.sort(lista, komparator);
System.out.println(lista);
// Drugi sposób utworzenia komparatora: klasa anonimowa
// Składnia dostepna od początków Javy
System.out.println("\nlista.sort( klasa anonimowa )");
lista.sort(new Comparator<String>() {
public int compare(String s1, String s2) {
return s2.length() - s1.length();
}
});
System.out.println(lista);
// Trzeci sposób utworzenia komparatora:
// wyrażenie lambda (od Javy 8)
System.out.println("\nlista.sort( lambda )");
lista.sort((s1, s2) -> s1.length() - s2.length());
System.out.println(lista);
System.out.println("\nCollator");
lista.sort(Collator.getInstance()); // wg bieżących ustawień językowych w systemie
System.out.println(lista);
lista.sort(Collator.getInstance(Locale.CANADA_FRENCH));
System.out.println(lista);
lista.sort(Collator.getInstance(new Locale("pl", "PL")));
System.out.println(lista);
}
}
package p12_kolekcje.s_sortowanie;
import java.text.Collator;
import java.util.Arrays;
public class Sortowanie3 {
public static void main(String[] args) {
String[] imiona = { "Ala", "Ola", "Iwona", "Magdalena", "Joanna", "Anna", "Teresa",
"Żaneta", "Ęcki", "Ącki", "Agnieszka", "ala", "Łucja", "Julia", "Julitta", "Zuzanna" };
System.out.println("Sortowanie tablicy");
System.out.println(Arrays.toString(imiona));
Arrays.sort(imiona);
System.out.println(Arrays.toString(imiona));
Arrays.sort(imiona, Collator.getInstance()); // jako Comparator
System.out.println(Arrays.toString(imiona));
Arrays.sort(imiona, (s1, s2) -> s1.length() - s2.length());
System.out.println(Arrays.toString(imiona));
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment