Autor wykładu : Wojciech Drabik



Pobieranie 417,97 Kb.
Strona1/5
Data24.02.2019
Rozmiar417,97 Kb.
  1   2   3   4   5

Autor wykładu : Wojciech Drabik
Źródła :

  1. Java Tutorial (Internet-http://java.sun.com)

  2. JDK 1.2 Documentation

  3. J.Bielecki-Java XP, PLJ,Warszawa 2001

4. B.Eckel –Thinking in Java,Helion 2001

KOLEKCJE


  1. Pojęcia wstępne




  1. Struktura kolekcji


3. Infrastruktura kolekcji


  • iteratory

  • komparatory

  • wyjątki


4. Elementy struktury kolekcji


  • interfejsy kolekcyjne

  • klasy abstrakcyjne

  • klasy implementujące

  • algorytmy kolekcyjne

5. Algorytmy tablicowe




  1. Pojęcia wstępne

Przechowywanie obiektów(referencji do obiektów) tworzonych dynamicznie

w czasie działania programu jest istotnym problemem,który musi być rozwiązany

w każdym obiektowym języku programowania.Programista ma do wyboru

używanie wbudowanych typów tablicowych lub stosowanie wyspecjalizowanych

bibliotecznych klas kolekcyjnych.


Kolekcja – struktura danych służąca do
- przechowywania danych

- operowania na danych : dołączanie,usuwanie,przeglądanie,pobieranie


Przykłady kolekcji:

folder poczty e-mail, książka telefoniczna, słownik.


Reprezentowanie kolekcji odbywa się za pomocą obiektu kolektora.
Przeglądanie kolekcji odbywa się za pomocą obiektu iteratora.
Porządkowanie kolekcji odbywa się za pomocą obiektu komparatora.
Kolekcje bez operacji modyfikowania są niemodyfikowalne.

W przeciwnym razie są modyfikowalne.


Kolekcje , które nie dopuszczają do żadnych zmian danych są niezmienne (stałe).

W przeciwnym razie są traktowane jako zmienne.


Kolekcje których rozmiar pozostaje stały są ustalonego rozmiaru.

W przeciwnym razie są zmiennego rozmiaru.





Przykład projektowania kolekcji :

Typowe operacje kolektora powinny umożliwiać



  • umieszczanie obiektów w kolekcji : funkcjia add()

  • dostarczanie elementów kolekcji : funkcja get()

  • dostarczanie informacji o liczbie elementów : funkcja size()



public class Program {

public static void main(String[] args)

{

// utworzenie kolektora



Collector points = new Collector();
// dodanie obiektów do kolektora

points.add(new Point2D(10, 10));

points.add(new Point3D(20, 20, 20));

points.add(new Point2D(30, 30));
//pobieranie obiektów z kolektora i wyświetlanie for (int i = 0; i < points.size() ; i++) {

Object object = points.get(i);

((Point2D)object).show();

System.out.println();

}

}

} //class Program
// klasa kolektora

class Collector {
private int init = 1; //początkowy rozmiar tablicy

private Object[] pObject = new Object [init];

private int size; //rozmiar tablicy obiektów
//operacja dodawania obiektu

// z rozszerzaniem tablicy

public void add(Object pObject)

{

if (size == init) {

Object[] pObject2 = new Object [2 * init];

System.arraycopy(this.pObject,0,pObject2,0, init);

this.pObject = pObject2;

init *= 2;

}

this.pObject[size++] = pObject;

}

public Object get(int i) {return pObject[i];}
public int size() { return size; }
} //class Collector


class Point2D {
protected int x, y;
public Point2D(int x, int y)

{

this.x = x;

this.y = y;

}

public void show()

{

System.out.print("x = " + x + ", y = " + y );

}
} //class Point2D

class Point3D extends Point2D {
protected int z;
public Point3D(int x, int y, int z)

{

super(x, y);

this.z = z;

}

public void show()

{

super.show();

System.out.print(", z = " + z);

}
} //class Point3D
//-----koniec programu--------------

Przykład projektowania iteracji :

Typowe operacje iteratora powinny umożliwiać



  • dostarczanie elementów kolekcji : funkcja getNext()

  • dostarczanie informacji o istnieniu elementów : funkcja hasNext()


public class Program {

public static void main(String[] args)

{

// utworzenie kolektora



Collector points = new Collector();
// dodanie obiektów

points.add(new Point2D(10, 10));

points.add(new Point3D(20, 20, 20));

points.add(new Point2D(30, 30));
//uzyskanie iteratora

Iterator iterator = new Iterator(points);

//przeglądanie kolekcji

while (iterator.hasNext()) {

Object object = iterator.getNext();

((Point2D)object).show();

System.out.println();

}

}

}

// klasa kolekcyjna

class Collector {
private int init = 1;

private Object[] pObject = new Object [init];

private int size;
public void add(Object pObject)

{

if (size == init) {

Object[] pObject2 = new Object [2 * init];

System.arraycopy(this.pObject,0,pObject2,0, init);

this.pObject = pObject2;

init *= 2;

}

this.pObject[size++] = pObject;

}

public Object get(int i)

{

return pObject[i];

}
public int size()

{

return size;

}

}

// klasa iteratora

class Iterator {

private Collector objects;

private int pos = 0, count;
public Iterator(Collector objects)

{

this.objects = objects;

count = objects.size();

}
public boolean hasNext()

{

return pos < count;

}
public Object getNext()

{

return objects.get(pos++);

}

} //class Iterator


class Point2D {
protected int x, y;
public Point2D(int x, int y)

{

this.x = x;

this.y = y;

}

public void show()

{

System.out.print("x = " + x + ", y = " + y );

}

}
class Point3D extends Point2D {
protected int z;
public Point3D(int x, int y, int z)

{

super(x, y);

this.z = z;

}

public void show()

{

super.show();

System.out.print(", z = " + z );

}
}
//------koniec programu--------
W Javie programista nie musi programować wszystkiego od początku .
W pakiecie java.util jest gotowy zestaw interfejsów i klas (Collection FrameWork)
który może być wykorzystany w większości zadań związanych z kolekcjami
kontenerowymi ( przechowującymi obiekty ) .

Interfejs klasa abstrakcyjna klasa implementująca



2. STRUKTURA KOLEKCJI - 1












TreeSet



HashSet



  1   2   3   4   5


©operacji.org 2017
wyślij wiadomość

    Strona główna