/** * Title: Studio di implementazioni dell'adt Lista

* Description: Implementa l'interfaccia Lista utilizzando gli array

* Copyright: Copyright (c) Roberto Posenato

* Company: Università degli Studi di Verona

* @author Roberto Posenato * @version 1.0 */ //package Lista; public class ListaArray implements Lista { private static int dimensioneIniziale = 20; //la dimensione iniziale della lista private Object[] lista; private int nOggetti; public ListaArray() { lista = new Object[dimensioneIniziale]; nOggetti = 0; } public ListaArray(int n) throws IllegalArgumentException { if (n>0) { lista = new Object[n]; nOggetti = 0; } else throw new IllegalArgumentException(); } public boolean eVuota() { return nOggetti == 0; } public int lunghezza() { //la variabile d'ausilio fa risparmiare un bel tempo return nOggetti; } public void cancella(int k) throws IllegalArgumentException { // 0<=k=nOggetti) throw new IllegalArgumentException(); else { nOggetti--;//se sono all'ultimo elemento, ho già fatto if (k != nOggetti) {//non sono nell'ultimo elemento for ( ; k < nOggetti; k++) lista[k]=lista[k+1]; } } } public Object elemento(int k) throws IllegalArgumentException { // 0<=k=nOggetti) throw new IllegalArgumentException(); else return lista[k]; } public void inserisci(int k, Object u) throws IllegalArgumentException { // 0<=knOggetti) throw new IllegalArgumentException(); else { if (nOggetti+1 <= lista.length) { //c'e' ancora spazio for (int i=nOggetti ; i > k; i--) lista[i]=lista[i-1]; lista[k]=u; nOggetti++; } else {//e' necessario aumentare la dimensione dell'array Object[] listaNuova = new Object[lista.length + dimensioneIniziale]; for(int i=0; i < k; i++)//copio tutti gli elementi prima di k listaNuova[i]=lista[i]; listaNuova[k]=u; //inserisco il nuovo elemento in posizione k for(int i=k; i < nOggetti; i++)//copio tutti gli altri elementi dopo k listaNuova[i+1]=lista[i]; nOggetti++; lista=listaNuova; } } } }