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
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
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");
}