PO Kolekcje wstęp - ćwiczenia: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Janusz (dyskusja | edycje)
Nie podano opisu zmian
 
(Nie pokazano 23 wersji utworzonych przez 3 użytkowników)
Linia 1: Linia 1:
= Ćwiczenia do wykładu o kolekcjach =
[[PO Kolekcje|Wykład o kolekcjach]]


== Zad 1. ==
[[Programowanie obiektowe|Przedmiot Programowanie obiektowe]]


Zaimplementuj w postaci listy kolekcję uporządkowaną, tzn. taką, w której kolejność elementów wynika z kolejności wstawiania. Kolekcja ta powinna udostępniać następujące operacje:
Ćwiczenia do wykładu o kolekcjach.
* wstaw na początek
* wstaw na koniec
* podaj pierwszy element
* podaj ostatni element
* podaj liczbę elementów
Kolekcja powinna być sparametryzowana typem elementów.


{{wskazowka|1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
Skorzystaj z klasy ''Stos'' zamieszczonej w wykładzie o typach uogólnionych.
Ogladaj wskazówki i rozwiązania __SHOWALL__<br>
Jak dodać tam efektywne wstawianie elementów na koniec?
Ukryj wskazówki i rozwiązania __HIDEALL__
</div>
</div>
</div>}}


{{wskazowka|2||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
== Zad 1. ==
Do efektywnego wstawiania elementów na koniec potrzebujesz dodatkowej
 
informacji w swojej klasie - atrybutu pamietającego ostatni element listy.
Zaimplementuj własną wersję implementacji interfejsu ''Map<K,V>''.
Ale co z usuwaniem ostatniego elemntu?
Wykorzystaj w tym celu jedną z klas implementujących interfejs ''Collection<E>''.
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka 1</span>
<div class="mw-collapsible-content" style="display:none">
Skorzystaj z klasy ''ArrayList<E>''. Co będzie przechowywane w jej elementach?
</div>
</div>
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka 2</span>
<div class="mw-collapsible-content" style="display:none">
Elementami ''ArrayList<E>'' powinny być obiekty klasy Para<K,V>.
</div>
</div>
</div>}}
{{wskazowka|3||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
Do efektywnego usuwania ostatniego elementu potrzebujesz dodatkowej
informacji w kazdym elemencie listy - atrybutu pamietającego poprzednika.
Cyli po prostu musisz zastosować listę dwukierunkową.
</div>
</div>
</div>}}


== Zad 2. ==
== Zad 2. ==


Dodaj do kolekcji z zadania 1 trzy wersje iteratora wbudowanego,  
Zaimplementuj (zgodnie z wykładem) klasę generującą kolejne liczby pierwsze (implementacja może
stworzone zgodnie z propozycjami z wykładu. Jaki jest koszt realizacji
polegać na sprawdzaniu kolejnych kandydatów przez dzielenie ich przez liczby mniejsze), tak by można
operacji dajElt(int i) dla pierwszego z iteratorów?
jej było używać jako iteratora.


== Zad 3. ==
== Zad 3. ==


Popraw trzecią wersję iteratora wbudowanego zaproponowaną na wykładzie tak, by pozwalała na jednoczesne przechodzenie kolekcji uporządkowanej na wiele sposobów.
Zaimplementuj graf, w którego wierzchołkach przechowywane są napisy. Graf powinien udostępniać operację obchodzenia wszerz i w głąb (z wypisywaniem kolejnych odwiedzonych wierzchołków). Jakiej kolekcji użyjesz w tym celu?


{{wskazowka|||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
Musisz w tym celu albo wynieść informację o bieżącej pozycji poza kolekcję (co ma swoje wady omawiane na wykładzie), albo pamiętać wewnątrz  kolekcji uporządkowanej kolekcję bieżących pozycji iteratorów. To drugie rozwiązanie wymaga nie tylko dodania dodatkowego parametru do metod iteratora, ale także rozwiązania problemu usuwania z kolekcji bieżących pozycji iteratorów tych pozycji, które odpowiadają już nieużywanym iteratorom. Najprostsze rozwiązanie to oczywiście dodanie metody informującej kolekcję o zakończeniu używania iteratora, ale co zrobić gdy użytkownik zapomni o wywołaniu tej metody? Zaproponuj nieco lepsze rozwiązanie wykorzystujące metodę ''finalize''.
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka 1</span>
<div class="mw-collapsible-content" style="display:none">
Do przechowania całego grafu warto wykorzystać ''TreeMap<E>'', zaś do pamiętania sąsiadów ''TreeSet<E>''. Należy także zdefiniować klasę ''Wierzchołek'' ze stosownymi operacjami.
</div>
</div>
</div>
</div>}}

Aktualna wersja na dzień 20:39, 28 maj 2020

Wykład o kolekcjach

Przedmiot Programowanie obiektowe

Ćwiczenia do wykładu o kolekcjach.

Ogladaj wskazówki i rozwiązania __SHOWALL__
Ukryj wskazówki i rozwiązania __HIDEALL__

Zad 1.

Zaimplementuj własną wersję implementacji interfejsu Map<K,V>. Wykorzystaj w tym celu jedną z klas implementujących interfejs Collection<E>.

Wskazówka 1

Wskazówka 2

Zad 2.

Zaimplementuj (zgodnie z wykładem) klasę generującą kolejne liczby pierwsze (implementacja może polegać na sprawdzaniu kolejnych kandydatów przez dzielenie ich przez liczby mniejsze), tak by można jej było używać jako iteratora.

Zad 3.

Zaimplementuj graf, w którego wierzchołkach przechowywane są napisy. Graf powinien udostępniać operację obchodzenia wszerz i w głąb (z wypisywaniem kolejnych odwiedzonych wierzchołków). Jakiej kolekcji użyjesz w tym celu?

Wskazówka 1