Vector e ArrayList in Java

Vector e ArrayList in Java:

Classe Vector

Un oggetto della classe Vector è un array di oggetti di dimensione variabile, possiamo accedere agli oggetti grazie all’indice (un numero intero che ne indica la posizione).

La dimensione può cambiare durante l’esecuzione del programma, il tipo base non può essere un tipo primitivo ma una classe.

Costruttori

/* crea un vettore vuoto, con i parametri specificati */
    Vector (int initialCapacity, int capacityIncrement)
/* per default, capacityIncrement==0 */
    Vector (int initialCapacity)
/* per default, initialCapacity==10 e capacityIncrement==0 */
    Vector ()

Metodi della classe Vector

API Java

Esempio uso di Vector

Considerando come caso studio la gestione di conti correnti bancari, utilizzeremo la classe BankAccount, ogni conto è un’istanza della seguente classe

package spacecoding.data;
public class BankAccount {
    private String socialSecurityNumber; // identificativo univoco persona
    private String firstName; // nome
    private String lastName; // cognome
    private double balance; // saldo

    public BankAccount(String socialSecurityNumber, String firstName, String lastName, double initialBalance) {
        this.socialSecurityNumber = socialSecurityNumber;
        this.firstName = firstName;
        this.lastName = lastName;
        this.balance = initialBalance;
    }

    public String getSocialSecurityNumber() {
        return socialSecurityNumber;
    }

    public void setSocialSecurityNumber(String socialSecurityNumber) {
        this.socialSecurityNumber = socialSecurityNumber;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }
    public boolean withdraw(double amount){
        if(amount<=balance){
            balance-=amount;
            return true;
        }
        return false;
    }
    public void deposit(double amount){
        balance+=amount;
    }

    @Override
    public String toString() {
        return "BankAccount{" +
                "socialSecurityNumber='" + socialSecurityNumber + '\'' +
                ", firstName='" + firstName + '\'' +
                ", lastName='" + lastName + '\'' +
                ", balance=" + balance +
                '}';
    }
}

dopodiché, creo una semplicissima classe per utilizzare alcuni metodi della classe Vector in cui creo il vettore di oggetti nel seguente modo

        Vector bankAccounts = new Vector(1,0);

la prima cifra rappresenta la capacità iniziale del vettore, la seconda cifra la quantità di cui la capacità del vettore viene incrementata automaticamente quando la sua dimensione diventa maggiore della sua capacità. Se usiamo 0 il vettore raddoppierà la sua dimensione.

Per rendere il codice più leggibile consiglio di creare il vettore di oggetti specificando il tipo di oggetti che conterrà, pertanto:

        Vector<BankAccount> bankAccounts = new Vector<BankAccount>(1,0);

successivamente creo gli oggetti che rappresentano un conto corrente

BankAccount bankAccount1 = new BankAccount("123456789","Mario","Rossi",50000);
// aggiungo gli elementi all'array
bankAccounts.add(bankAccount1);
bankAccounts.add(new BankAccount("987654321","Giovanni","Mela",50000));

adesso possiamo utilizzare i metodi di Vector per eseguire le seguenti operazioni (ognuna nel commento prima dell’istruzione)

        // visualizzo il numero di elementi dell'array
        System.out.println("Ci sono memorizzati: "+bankAccounts.size()+ " conti correnti");
        // visualizzo il primo elemento
        System.out.println(bankAccounts.firstElement().toString());
        // visualizzo l'ultimo elemento
        System.out.println(bankAccounts.lastElement().toString());
        // visualizzo un elemento specificandone la posizione
        System.out.println(bankAccounts.get(0).toString());
        // sostituisco un elemento specificando la posizione
        BankAccount bankAccount3=new BankAccount("132413321","William","Cancelli",100000);
        bankAccounts.set(1,bankAccount3);
        // rimuovo un elemendo specificando la posizione
        bankAccounts.remove(0);
        // rimuovo tutti gli elementi del vettore
        bankAccounts.clear();
        // controllo se è vuoto
        if(bankAccounts.isEmpty()){
            System.out.println("L'array è vuoto");
        }else{
            System.out.println("L'array non è vuoto");
        }

Classe ArrayList

Anche la classe ArrayList rappresenta un vettore di oggetti analogamente a quanto detto per la classe Vector.

Differenze tra Vector e ArrayList in Java:

  • i metodi della classe ArrayList non sono sincronizzati mentre quelli di Vector lo sono, quindi nel caso si usino in programmi con threads e quindi nella programmazione concorrente è consigliato l’uso di Vector
  • Vector fornisce un controllo maggiore sulla capacità grazie a specifici metodi e costruttori

Costruttori

/* crea un vettore vuoto con la capacita' iniziale indicata */
    ArrayList (int initialCapacity)
/* per default, initialCapacity==10 */
    ArrayList ()

Metodi della classe ArrayList

API Java

Esempio uso di ArrayList

Conformemente al caso trattato prima, ovvero la gestione di conti correnti creiamo il vettore con la seguente istruzione

ArrayList<BankAccount> bankAccounts=new ArrayList<BankAccount>();

In modo analogo, eseguiamo le stesse operazioni fatte con i metodi di Vector con i metodi di ArrayList riformulando alcune istruzioni

        BankAccount bankAccount1 = new BankAccount("123456789","Mario","Rossi",50000);

        // aggiungo gli elementi all'array
        bankAccounts.add(bankAccount1);
        bankAccounts.add(new BankAccount("987654321","Giovanni","Mela",50000));
        // visualizzo il numero di elementi dell'array
        System.out.println("Ci sono memorizzati: "+bankAccounts.size()+ " conti correnti");
        // visualizzo il primo elemento
        System.out.println(bankAccounts.get(0).toString());
        // visualizzo l'ultimo elemento
        System.out.println(bankAccounts.get(bankAccounts.size()-1).toString());
        // visualizzo un elemento specificandone la posizione
        System.out.println(bankAccounts.get(0).toString());
        // sostituisco un elemento specificando la posizione
        BankAccount bankAccount3=new BankAccount("132413321","William","Cancelli",100000);
        bankAccounts.set(1,bankAccount3);
        // rimuovo un elemendo specificando la posizione
        bankAccounts.remove(0);
        // rimuovo tutti gli elementi del vettore
        bankAccounts.clear();
        // controllo se è vuoto
        if(bankAccounts.isEmpty()){
            System.out.println("L'array è vuoto");
        }else{
            System.out.println("L'array non è vuoto");
        }

Pubblicato da Carlo Contardi

Carlo Contardi, docente di informatica e sviluppatore Full Stack, condivide la sua passione per la programmazione e l’informatica attraverso il suo blog Space Coding. Offre preziosi consigli e soluzioni pratiche a chi vuole imparare a programmare o migliorare le proprie abilità. 🚀👨‍💻

Translate »