Lab09


Programowanie obiektowe /Java/
Laboratorium nr 9
1 Kolekcje
 Kolekcja Collection:1 grupa odrębnych elementów, podlegających jakimś regułom. Na przykład List musi
przechowywać elementy w określonej kolejności, zbiór Set nie może zawierać duplikatów, a kolejka Queue
porządkuje elementy według dyscypliny kolejki (zwykle postuluje ona kolejność identyczną z kolejnością
wstawiania elementów).
 Odwzorowanie Map:1 grupa para obiektów typu klucz  wartość, pozwalająca na wydobywanie wartości
dla znanego klucza .
Kontenery < Java 1.5 oraz kontenery >= Java 1.5
javac -source 1.4 *.java
javac -source 1.5 *.java
Jaka jest różnica podczas kompilacji poniższych klas na dwa podane sposoby:
1 package pl.kielce.tu.lab9;
2
3 import java.util.HashSet;
4 import java.util.Iterator;
5
6 public class TestContainers1 {
7 static class Dog {
8 }
9
10 static class Cat {
11 }
12 public static void main(String[] args) {
13 HashSet dogs = new HashSet();
14 dogs.add(new Dog());
15 dogs.add(new Cat());
16 Iterator i = dogs.iterator();
17 while (i.hasNext()) {
18 Dog d = (Dog) i.next();
19 //java.lang.ClassCastException: Cat cannot be cast to Dog
20 System.out.println(d);
21 }
22 }
23 }
Przykład 1: src/pl/kielce/tu/lab9/TestContainers1.java{link}
1 package pl.kielce.tu.lab9;
2
3 import java.util.HashSet;
4
5 public class TestContainers2 {
6 static class Dog {
7 }
8
9 static class Cat {
10 }
11
12 public static void main(String[] args) {
13 HashSet dogs = new HashSet();
1
Thinking in Java, Bruce Eckel, Wydanie IV, Helion, 2006
1
14 dogs.add(new Dog());
15 // The method add(Dog) is not applicable for argument Cat
16 // dogs.add(new Cat());
17 for (Dog d : dogs)
18 System.out.println(d);
19 }
20 }
Przykład 2: src/pl/kielce/tu/lab9/TestContainers2.java{link}
2 Listy
Klasy1:
- ArrayList   celujący w operacjach swobodnego dostępu do elementów, ale wolniejszy przy wstawianiu
i usuwaniu elementów z listy ,
- LinkedList   optymalny dla dostępu sekwencyjnego, z efektywnymi operacjami wstawiania elementów
(i ich usuwania) do środka listy.
1 package pl.kielce.tu.lab9;
2
3 import java.util.ArrayList;
4 import java.util.Arrays;
5 import java.util.LinkedList;
6
7 class Element {
8 private String t;
9
10 public Element(String t) {
11 this.t = t;
12 }
13
14 @Override
15 public String toString() {
16 return "_" + t + "_ ";
17 }
18 }
19
20 public class TestList {
21 public static void main(String[] args) {
22 ArrayList list1 = new ArrayList();
23 list1.add(new Element("0"));
24 // Exception: java.lang.IndexOutOfBoundsException: Index: 10, Size: 1
25 // list1.add(10, new Element("" + 10));
26 for (int i = 1; i < 10; i++)
27 list1.add(new Element("" + i));
28 System.out.println("ArrayList size = " + list1.size());
29 System.out.println("ArrayList = " + list1);
30 list1.add(5, new Element("NEW"));
31 System.out.println("ArrayList = " + list1);
32 list1.remove(1);
33 System.out.println("ArrayList = " + list1);
34 list1.remove(new Element("NEW"));
35 System.out.println("ArrayList = " + list1);
36 list1.addAll(Arrays.asList(new Element("11"), new Element("12")));
37 System.out.println("ArrayList = " + list1);
38 list1.removeAll(Arrays.asList(new Element("4"), new Element("5")));
39 System.out.println("ArrayList = " + list1);
40 list1.set(1, new Element("1"));
2
41 System.out.println("ArrayList = " + list1);
42 System.out.println(">>> contains " + list1.contains(new Element("12")));
43 System.out.println(">>> indexOf " + list1.indexOf(new Element("12")));
44 System.out.println(">>> get " + list1.get(8));
45 System.out.println(list1.subList(2, list1.size() - 2));
46 list1.clear();
47 System.out.println("ArrayList = " + list1);
48 System.out.println(">>> isEmpty " + list1.isEmpty());
49
50 LinkedList list2 = new LinkedList();
51 for (int i = 0; i < 10; i++)
52 switch (i % 2) {
53 case 0:
54 list2.addFirst(new Element("" + i));
55 break;
56 case 1:
57 list2.addLast(new Element("" + i));
58 break;
59 }
60 System.out.println("LinkedList = " + list2);
61 System.out.println(">>> getFirst " + list2.getFirst());
62 System.out.println(">>> getLast " + list2.getLast());
63 list2.offer(new Element("*"));
64 System.out.println("LinkedList = " + list2);
65 list2.offerFirst(new Element("-*-"));
66 System.out.println("LinkedList = " + list2);
67 list2.offerLast(new Element("+*+"));
68 System.out.println("LinkedList = " + list2);
69 System.out.println(">>> peek " + list2.peek());
70 System.out.println(">>> peekFirst " + list2.peekFirst());
71 System.out.println(">>> peekLast " + list2.peekLast());
72 System.out.println(">>> poll " + list2.poll());
73 System.out.println(">>> pollFirst " + list2.pollFirst());
74 System.out.println(">>> pollLast " + list2.pollLast());
75 list2.push(new Element("#"));
76 System.out.println("LinkedList = " + list2);
77 System.out.println(">>> pop " + list2.pop());
78 System.out.println("LinkedList = " + list2);
79 }
80 }
Przykład 3: src/pl/kielce/tu/lab9/TestList.java{link}
3 Iterator
 Iterator1  to obiekt, którego zadaniem jest przemieszczanie się po sekwencji elementów i wybieranie
każdego z napotkanych elementów bez wiedzy programisty  użytkownika lub przejmowania się wewnętrzną
strukturą takiej sekwencji.
1 package pl.kielce.tu.lab9;
2
3 import java.util.Arrays;
4 import java.util.Iterator;
5 import java.util.LinkedList;
6 import java.util.ListIterator;
7 import java.util.Random;
8
9 public class TestIterator {
10 public static void main(String[] args) {
11 LinkedList list = new LinkedList();
3
12 list.addAll(Arrays.asList(0, 1, 2, 3, 4));
13 System.out.println("iterator");
14 print(list.iterator());
15 System.out.println("descending iterator");
16 print(list.descendingIterator());
17 System.out.println("list iterator");
18 print(list.listIterator(2));
19
20 System.out.println("random + list iterator");
21 Random r = new Random();
22 ListIterator it = list.listIterator();
23 for (int i = 0; i < 10; i++) {
24 int tmp = r.nextInt();
25 if (tmp > 0) {
26 if (it.hasNext())
27 System.out.println("next: " + it.next());
28 else
29 System.out.println("Do not have next");
30 } else {
31 if (it.hasPrevious())
32 System.out.println("previous:" + it.previous());
33 else
34 System.out.println("Do not have previous");
35 }
36 }
37 }
38
39 static void print(Iterator it) {
40 System.out.print(it.getClass().getSimpleName() + " ");
41 while (it.hasNext())
42 System.out.print(it.next() + " ");
43 System.out.println();
44 }
45 }
Przykład 4: src/pl/kielce/tu/lab9/TestIterator.java{link}
4 Zbiory
 Zbiór (ang. set)1 z definicji nie może zawierać więcej niż jednego egzemplarza danej wartości, próba doda-
nia kolejnych egzemplarzy identycznych obiektów zostanie zignorowana, co zapobiega dublowaniu elementów
zbioru.
Dla kolekcji wykorzystujących funkcję mieszającą należy przesłonić metody equals() i hashCode(). Dla
kolekcji uporządkowanych należy zaimplementować interfejs Comparable.
W jaki sposób można sprawdzić czy dwa obiekty są sobie równe (dwie różne referencje odnoszą się do
tego samego obiektu), a w jaki sposób sprawdzić, że dwa obiekty są sobie równoważne?
1 package pl.kielce.tu.lab9;
2
3 import java.util.Arrays;
4 import java.util.HashSet;
5 import java.util.TreeSet;
6
7 public class TestSet {
8 public static void main(String[] args) {
9 HashSet set1 = new HashSet();
10 set1.addAll(Arrays.asList(4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 4, 3, 2, 1, 0));
11 System.out.println(set1);
12
13 TreeSet set2 = new TreeSet();
4
14 set2.addAll(Arrays.asList(4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 4, 3, 2, 1, 0));
15 System.out.println(set2);
16 System.out.println("first " + set2.first());
17 System.out.println("last " + set2.last());
18 System.out.println("higher " + set2.higher(2));
19 System.out.println("lower " + set2.lower(2));
20 System.out.println("floor " + set2.floor(8));
21 System.out.println("ceiling " + set2.ceiling(-8));
22 System.out.println("headSet " + set2.headSet(2));
23 System.out.println("tailSet " + set2.tailSet(2));
24 System.out.println("descendingSet " + set2.descendingSet());
25 }
26 }
Przykład 5: src/pl/kielce/tu/lab9/TestSet.java{link}
Czy na podstawie poniższych przykładów 6 oraz 7 można zorientować się w jaki sposób dodawane są
obiekty do HashSet i T reeSet oraz jakie metody zdefiniowane w klasie MyClass są w tym celu wywoływane?
1 package pl.kielce.tu.lab9;
2
3 public class MyClass implements Comparable {
4 private int i;
5
6 public MyClass(int i) {
7 this.i = i;
8 }
9
10 @Override
11 public String toString() {
12 return "x" + i;
13 }
14
15 @Override
16 public boolean equals(Object o) {
17 if (this.getClass().isInstance(o) == false)
18 return false;
19 MyClass tmp = (MyClass) o;
20 System.out.println(this + ".equals(" + o + ") = " + (this.i == tmp.i));
21 return this.i == tmp.i;
22 }
23
24 @Override
25 public int hashCode() {
26 System.out.println(this + ".hashCode() = " + this.i % 4);
27 return this.i % 4;
28 }
29
30 @Override
31 public int compareTo(MyClass o) {
32 System.out.println(this + ".compareTo(" + o + ") = " + (this.i - o.i));
33 return this.i - o.i;
34 }
35 }
Przykład 6: src/pl/kielce/tu/lab9/MyClass.java{link}
1 package pl.kielce.tu.lab9;
2
3 import java.util.Arrays;
4 import java.util.HashSet;
5 import java.util.TreeSet;
5
6
7 public class TestSet2 {
8 public static void main(String[] args) {
9 HashSet set3 = new HashSet();
10 System.out.println("HashSet addAll()");
11 set3.addAll(Arrays.asList(new MyClass(4), new MyClass(3),
12 new MyClass(2), new MyClass(1), new MyClass(0)));
13 System.out.println("HashSet toString()");
14 System.out.println(set3);
15 System.out.println("HashSet add(new MyClass(4))");
16 set3.add(new MyClass(4));
17 System.out.println("HashSet toString()");
18 System.out.println(set3);
19 System.out.println("HashSet contains(new MyClass(1))");
20 System.out.println(set3.contains(new MyClass(1)));
21
22 System.out.println(">-<>-<>-<");
23
24 TreeSet set4 = new TreeSet();
25 System.out.println("TreeSet addAll()");
26 set4.addAll(Arrays.asList(new MyClass(4), new MyClass(3),
27 new MyClass(2), new MyClass(1), new MyClass(0)));
28 System.out.println("TreeSet toString()");
29 System.out.println(set4);
30 System.out.println("TreeSet add(new MyClass(4))");
31 set4.add(new MyClass(4));
32 System.out.println("TreeSet toString()");
33 System.out.println(set4);
34 System.out.println("TreeSet contains(new MyClass(1))");
35 System.out.println(set4.contains(new MyClass(1)));
36 }
37 }
Przykład 7: src/pl/kielce/tu/lab9/TestSet2.java{link}
5 Mapy
 Odwzorowanie Map:1 grupa para obiektów typu klucz  wartość, pozwalająca na wydobywanie wartości
dla znanego klucza.
1 package pl.kielce.tu.lab9;
2
3 import java.util.HashMap;
4 import java.util.TreeMap;
5
6 enum Days{Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}
7
8 public class TestMap {
9 public static void main(String[] args) {
10 HashMap map1 = new HashMap();
11 Days days [] = Days.values();
12 for(int i = days.length - 1; i >= 0 ; i--)
13 map1.put(days[i].ordinal(), days[i].name());
14 System.out.println("toString() : " + map1);
15 System.out.println("entrySet() : " + map1.entrySet());
16 System.out.println("keySet() : " + map1.keySet());
17 System.out.println("values() : " + map1.values());
18
19 TreeMap map2 = new TreeMap();
20 for(int i = days.length - 1; i >= 0 ; i--)
6
21 map2.put(days[i].ordinal(), days[i].name());
22 System.out.println("toString() : " + map2);
23 System.out.println("entrySet() : " + map2.entrySet());
24 System.out.println("keySet() : " + map2.keySet());
25 System.out.println("values() : " + map2.values());
26 System.out.println("firstEntry() : " + map2.firstEntry());
27 System.out.println("lastEntry() : " + map2.lastEntry());
28 System.out.println("firstKey() : " + map2.firstKey());
29 System.out.println("lastKey() : " + map2.lastKey());
30 System.out.println("subMap(2, 4) : " + map2.subMap(2, 4));
31 System.out.println("headMap(3) : " + map2.headMap(3));
32 System.out.println("tailMap(3) : " + map2.tailMap(3));
33 }
34 }
Przykład 8: src/pl/kielce/tu/lab9/TestMap.java{link}
Czy na podstawie poniższego przykładu 9 można zorientować się w jaki sposób dodawane są obiekty
do HashMap i T reeMap oraz jakie metody zdefiniowane w klasie MyClass (przykład 6) są w tym celu
wywoływane?
1 package pl.kielce.tu.lab9;
2
3 import java.util.HashMap;
4 import java.util.TreeMap;
5
6 public class TestMap2 {
7
8 public static void main(String[] args) {
9 HashMap map5 = new HashMap();
10 for(int i = 0; i < 10 ; i++){
11 System.out.println("HashMap put(new MyClass(" + i + "))");
12 map5.put(new MyClass(i), i);
13 }
14 System.out.println("HashMap toString()");
15 System.out.println(map5);
16 System.out.println("HashMap put(new MyClass(0))");
17 map5.put(new MyClass(0), 0);
18 System.out.println("HashMap toString()");
19 System.out.println(map5);
20 System.out.println("HashMap get(new MyClass(1))");
21 map5.get(new MyClass(1));
22
23 System.out.println(">-<>-<>-<");
24
25 TreeMap map6 = new TreeMap();
26 for(int i = 0; i < 10 ; i++){
27 System.out.println("TreeMap put(new MyClass(" + i + "))");
28 map6.put(new MyClass(i), i);
29 }
30 System.out.println("TreeMap toString()");
31 System.out.println(map6);
32 System.out.println("TreeMap put(new MyClass(0))");
33 map6.put(new MyClass(0), 0);
34 System.out.println("TreeMap toString()");
35 System.out.println(map6);
36 System.out.println("TreeMap get(new MyClass(1))");
37 map6.get(new MyClass(1));
38 }
39 }
Przykład 9: src/pl/kielce/tu/lab9/TestMap2.java{link}
7
6 Przykładowa treść laboratorium
Proszę zapoznać się z metodami wprowadzania, pobierania oraz usuwania elementów ze wszystkich przed-
stawionych kolekcji (ArrayList, LinkedList, HashSet, T reeSet, HashMap, T reeMap) oraz z klasą Iterator.
Proszę zwrócić szczególną uwagę na dodawanie duplikatów do poszczególnych kolekcji.
Proszę stworzyć oraz uruchomić aplikację, która będzie zawierać przykłady wprowadzania, pobierania oraz
usuwania z:
- ArrayList,
- HashSet,
- TreeMap,
obiektów klasy np. Samochód. Do pobierania w co najmniej w jednym przypadku powinien zostać użyty
iterator.
8


Wyszukiwarka

Podobne podstrony:
lab09 PID 14 (1)
Lab09 Queuing Disciplines
BO Lab09
java lab09 exception
so lab09
lab09 08
CPS lab09 student
Inf Lab09
AiP Lab09
lab09 PID 14ppt
MetNum Lab09
sop 2009 lab09

więcej podobnych podstron