-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathListaSuArray.java
204 lines (169 loc) · 4.4 KB
/
ListaSuArray.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
// List
import java.util.NoSuchElementException;
public class ListaSuArray implements List
{
//variabili di esemplare
Object[] v;
int vSize;
//costruttore: inizializza una lista vuota
public ListaSuArray()
{
v = new Object[1];
vSize = 0;
}
/**
@return true se il contenitore e' vuoto, false altrimenti
*/
public boolean isEmpty()
{
return vSize == 0;
}
/**
@return numero di elementi nel contenitore
*/
public int size()
{
return vSize;
}
/**
@return un iteratore
*/
public Iterator iterator()
{
return new ArrayIterator();
}
// Classe Interna
class ArrayIterator implements Iterator
{
private int position;
private boolean state;
// costruttore: inizializza un iteratore
public ArrayIterator()
{
position = 0;
state = false;
}
/*
verifica se e' presente almeno un elemento dopo la posizione corrente
dell'iteratore
@return true se e' presente almeno un elemento, false altrimenti
*/
public boolean hasNext()
{
return position < vSize;
}
/*
ispeziona l'elemento DOPO la posizione corrente dell'iteratore, avanzando
successivamente l'iteratore di una posizione nella lista
@return l'elemento ispezionato, se presente
throws java.util.NoSuchElementException se non ci sono elementi dopo la
posizione corrente dell'iteratore
*/
public Object next() throws NoSuchElementException
{
if (!hasNext())
throw new NoSuchElementException();
state = true;
return v[position++];
}
/*
inserisce un nuovo elemento dopo la posizione corrente dell'iteratore,
l'iteratore si posiziona dopo il nuovo elemento
@param x elemento da inserire
*/
public void add(Object obj)
{
if (vSize >= v.length)
resize();
for (int i = vSize; i > position; i--)
v[i] = v[i-1];
v[position++] = obj;
vSize++;
state = false;
}
/*
elimina l'ultimo nodo esaminato dal metodo next()
puo' essere invocato solo dopo l'invocazione del metodo next()
@throws java.lang.IllegalStateException se precedentemente non e' stato
invocato il metodo next()
*/
public void remove() throws IllegalStateException
{
if (state == false)
throw new IllegalStateException();
for (int i = position - 1; i < vSize-1; i++)
v[i] = v[i+1];
vSize--;
position--;
state = false;
}
}
/**
Restituisce l'elemento alla posizione specificata nella lista
@index indice dell'elemento da restituire
*/
public Object get(int index)
{
if (index < 0 || index >= vSize)
throw new IllegalArgumentException();
return v[index];
}
/**
Sostituisce l'elemento alla posizione specificata nella lista con l'elemento x
@param index posizione dell'elemento da sostituire
@param x elemento da memorizzare alla posizione
specificata
@return l'elemento precedentemente memorizzato
Alla posizione specificata
*/
public Object set(int index, Object x)
{
if (index < 0 || index >= vSize)
throw new IllegalArgumentException();
Object o = v[index];
v[index] = x;
return o;
}
/**
Inserisce l'elemento specificato alla posizione specificata nella lista
Sposta a destra tutti gli elementi presenti
di un posto
@index rango dell'elemento da inserire
@x elemento da inserire
*/
public void add(int index, Object x)
{
if (index < 0 || index > vSize)
throw new IllegalArgumentException();
if (vSize >= v.length)
resize();
for (int i = vSize; i > index; i--)
v[i] = v[i - 1];
v[index] = x;
vSize++;
}
/**
Estrae l'elemento alla posizione specificata nella lista. Sposta a sinistra di
un posto tutti gli elementi che seguono
L'elemento estratto
@index rango dell'elemento da sostituire
*/
public Object remove(int index)
{
if (index < 0 || index >= vSize)
throw new IllegalArgumentException();
Object x = v[index];
for (int i = index; i < vSize - 1; i++)
v[i] = v[i + 1];
v[vSize - 1] = null;
vSize--;
return x;
}
private void resize()
{
Object[] vTmp = new Object[2 * v.length];
for (int i = 0; i < vSize; i++)
vTmp[i] = v[i];
v = vTmp;
}
}