Η χρήση Vecor ή ArrayList  όταν γράφουμε κώδικα java είναι ένα πολύ συχνό φαινόμενο.
Άλλωστε είναι αυτά τα στοιχεία που θα μας βοηθήσουν ή να αποθηκεύσουμε αντικείμενα που δεν γνωρίζουμε εκ των προτέρων το πλήθος τους ή όταν θέλουμε να αναπαραστήσουμε μια πληθυκότητα ένα προς πολλά μεταξύ των κλάσεων δημιουργώντας έτσι και μια σχέση συσχέτισης.

Για να χρησιμοποιήσουμε ένα από τα δύο (vector ή arraylist ) θα πρέπει πρώτα να εισάγουμε το πακέτο της java που περιέχει τις κλάσεις Vector και ArrayList.
 Έτσι με την εντολή import java.util.* ; 
εισάγουμε όλες της κλάσεις του πακέτου util εδώ αν θέλουμε μόνο κάποιο από τα δύο τότε γράφουμε για παράδειγμα,

import java.util.Vector; 

Στην προκειμένη περίπτωση προτιμότερο είναι να εισάγουμε όλο το πακέτο αφού για την επεξεργασία ή την διαπέραση  ενός, για παράδειγμα,  vector,  θα χρειαστούμε και άλλες κλάσεις από το πακέτο αυτό.

Πώς δημιουργώ ένα Vector ή ArrayList

Η δήλωση τους γίνεται μέσα στην κλάση που θέλουμε είτε ορίζοντάς τους σαν attribute της κλάσης και η δημιουργία τους μπορεί να γίνει στην συνέχεια, στο σημείο του κώδικα που εμείς επιθυμούμε ή μπορούμε την δήλωση και την δημιουργία να την κάνουμε ταυτόχρονα είτε ως attribute είτε μέσα σε κάποια μέθοδο είτε στον κατασκευαστή της κλάσης. Το τελευταίο αποτελεί και μια τακτική για δημιουργία ιδιαίτερων μορφών σχέσεων κλάσης με κλάση.

Η δήλωση του Vector ή ArrayList σαν attribute γίνεται με την παρακάτω εντολή

private ArrayList nameOfArrayList; ή  private Vector  nameOfVector;

Η δήλωση private  είναι απλά τυχαία και όχι απαραίτητη προϋπόθεση. Το τι θα δηλώνετε για κάθε μεταβλητή  εξαρτάται από εσάς και την αναγκαιότητα του προγράμματος.

Με τις παραπάνω εντολές έχω δηλώσει ότι η μεταβλητή nameOfVector θα είναι ένας vector ή η nameOfArrayList θα είναι ένα   ArrayList γενικά. Η μεταβλητή nameOfArrayList ή nameOfVector αντιπροσωπεύουν το όνομα που θα δώσετε στο αντικείμενό σας. Το όνομα αυτό μπορεί να είναι το οποιοδήποτε αρκεί να σας θυμίζει το περιεχόμενο του. Με άλλα λόγια αν σε ένα από αυτά θέλω να αποθηκεύω ημερομηνίες, τότε ένα όνομα της μορφής dates θα ήταν προτιμότερο από ένα όνομα dt

Αν θέλω να εξειδικεύσω την δήλωση τους, δηλαδή τι περιεχόμενο μπορώ να αποθηκεύω μέσα σε αυτούς, τότε η σύνταξη θα είναι

Vector<όνομα_κλάσης> όνομα_vector ή ArrayList <όνομα_κλάσης> όνομα_arraylist 

για παράδειγμα private Vector<Pupil> pupils ή private ArrayList <Pupil> pupils 
Η παραπάνω δηλώσεις απευθύνονται σε ένα vector ή  arraylist με όνομα pupils και ο τύπος τους, δηλαδή το τι θα μπορώ να τοποθετώ μέσα τους, θα είναι αντικείμενα της κλάσης Pupil.
Αυτή η δήλωση μου δίνει την δυνατότητα όταν θα διατρέξω το Vector να μπορώ να "καλέσω" αντικείμενα της κλάσης π.χ. Pupil και να "καλέσω" στην συνέχεια μεθόδους που απευθύνονται σε αυτή την κλάση.

Δημιουργία Vector ή ArrayList

Η δημιουργία τους ορίζεται με την εντολή new και συγκεκριμένα για ταυτόχρονη Δήλωση -Δημιουργία τους:

Vector<όνομα_κλάσης> όνομα_vector  = new Vector(); και αντίστοιχα 
ArrayList <όνομα_κλάσης> όνομα_arraylist  = new ArrayList();

Η κλήση Vector() ή ArrayList() απευθύνετε στους κατασκευαστές των αντίστοιχων κλάσεων μέσα στο πακέτο util.
Εναλλακτικά, και αν  οι προγραμματιστικές μου  ανάγκες μου το επιβάλουν, τότε μόνο η δημιουργία μπορεί να γίνει μέσα σε μια μέθοδο με την παρακάτω μορφή

όνομα_vector = new Vector(); και αντίστοιχα όνομα_ arraylist = new ArrayList();
Τα ονόματα τους αναγνωρίζονται ως μεταβλητές, αφού προηγουμένως έχω φροντίσει να έχω πραγματοποιήσει την δήλωσή τους.

Διαπέραση Vector ή ArrayList

Η διαπέραση τους γίνεται με δύο τρόπους

Διαπέραση με Δείκτη.

Κατά την διαπέραση με ένα δείκτη θα πρέπει να δηλώσω και να δημιουργήσω τον δείκτη. Ο δείκτης θα δείχνει την θέση των αντικειμένων μέσα στον vector ή arraylist. Κατά συνέπεια, όσο θα υπάρχει μια επόμενη θέση, ο δείκτης θα πρέπει να μεταπηδά στην επόμενη, ώστε να φτάσει μέχρι το τέλος, δηλαδή και στο τελευταίο περιεχόμενο του vector/ arraylist. Έτσι μου δίνεται η δυνατότητα να ορίσω το τι θα κάνω με κάθε ένα από τα περιεχόμενα τους.
Η δήλωση και η δημιουργία του δείκτη γίνεται με την παρακάτω εντολή

Iterator it= όνομα_vector.iterator(); και αντίστοιχα Iterator it= όνομα_ arraylist.iterator();


Δηλαδή δηλώνω μια μεταβλητή it σαν Iterator και ορίζω ότι θα είναι ένας Iterator του vector/arraylist που έχω δημιουργήσει. Η κλήση iterator () απευθύνεται στον κατασκευαστή της κλάσης Iterator του πακέτου util. Στην συνέχεια πραγματοποιώ την διαπέραση με μια εντολή while. Ας δώσουμε τον παρακάτω κώδικα:

  1. Iterator it= pupils.iterator();
  2. while(it.hasNext()){
  3. Pupil pup=(Pupil)it.next();
  4. .........
  5. pup.toString();
  6. .......
  7. }

Στην γραμμή 1 έχω την δήλωση του δείκτη it  και και την δημιουργία του, ως δείκτη  
(vector/ arraylist) του pupils (μαθητές).

Στην γραμμή 2 ξεκινά η διαπέραση με την while και με την προϋπόθεση ο δείκτης να έχει επόμενη θέση (it.hasNext()).

Στην γραμμή 3 Θέτω μια μεταβλητή pup τύπου της κλάσης  Pupil  και στην συνέχεια "πιάνω" το αντικείμενο της κλάσης Pupil που "δείχνει" εκείνη την στιγμή ο δείκτης και με τον τελεστή (=) το αποδίδω στην μεταβλητή pup. Με άλλα λόγια, η μεταβλητή pup θα περιέχει κατά την επανάληψη της while, το κάθε ένα αντικείμενο Pupil που έχω μέσα στο vector/ arraylist.

Στην γραμμή 4 και 6 που ακολουθεί, πραγματοποιώ τον κώδικα που θέλω ενώ στην γραμμή 5 έχω ορίσει για παράδειγμα, την κλήση μιας μεθόδου (toString()) από το αντικείμενο pup, που ανήκει προφανώς  στην κλάση Pupil (μαθητής). Προφανώς η μέθοδος toString() θα επιστρέφει κάποιες πληροφορίες για το αντικείμενο pup. Στην γραμμή 7 ολοκληρώνετε και η while.

Ένα παράδειγμα για περισσότερη κατανόηση είναι το παρακάτω. Έχω μια τάξη (Α) και θέλω να εμφανίζω τις πληροφορίες του μαθητή τότε 

Class A{
private Vector<Pupil> pupils  = new Vector();

public Class(){//κατασκευαστής
....
}

public void printPupils(){//μέθοδος εκτύπωσης  μαθητών
      Iterator it= pupils.iterator();
      while(it.hasNext()){
             Pupil pup=(Pupil)it.next();
              .........
              pup.toString();
              .......
    }
}

και η κλάση Pupil

Class Pupil{
private String name;

public Pupil(String name){//κατασκευαστής
this.name=name;
}

public String toString(){//η μέθοδος εμφάνισης των στοιχείων του μαθητή
....
return ("Ο μαθητής:" +name);
}

Διαπέραση με εντολή for

Αντί για την δήλωση και δημιουργία δείκτη και την χρήση της εντολής while, η διαπέραση ενός vector/arraylist μπορεί να γίνει με την εκτέλεση μιας εντολής for.
Θα δώσουμε την εκτέλεση της for με ένα "κομψό" τρόπο.

for(όνομα_κλάσης όνομα μεταβλητής : όνομα_vector){....}

Στο πρώτο όρισμα μπαίνει το όνομα της κλάσης πχ. Pupil ενώ σαν μεταβλητή το pup. Στην συνέχεια ακολουθεί το (:) και μετά το όνομα του vector/arraylist. δηλαδή θα έχει την παρακάτω μορφή

for(Pupil pup: pupils){
.......
pup.toString();
.......
}

Ουσιαστικά δεν αλλάζει κάτι, παρά μόνο η εντολή του loop.
Δηλαδή τώρα στο παράδειγμά μας με τον μαθητή και την τάξη η μέθοδος  printPupils θα είναι

public void printPupils(){//μέθοδος εκτύπωσης  μαθητών
      for(Pupil pup: pupils){
          .......
          pup.toString();
          .......
       }
}


Θυμηθείτε ότι η προσθήκη αντικειμένων σε ένα Vector ή ArrayList γίνετε με την εντολή add
όνομα_vector .add(αντικείμενο) ή όνομα_ arraylist.add(αντικείμενο) στο παράδειγμα μας συγκεκριμένα: pupils.add(pup);

Καλή συνέχεια στην μελέτη σας.