-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSortedArraySet.java
More file actions
203 lines (166 loc) · 5.1 KB
/
SortedArraySet.java
File metadata and controls
203 lines (166 loc) · 5.1 KB
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
/* @author Pepe Gallardo, Data Structures, Grado en Informática. UMA.
*
* Sets implemented using a sorted array
*/
package set;
import java.util.Arrays;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.StringJoiner;
public class SortedArraySet<T extends Comparable<? super T>> implements SortedSet<T> {
private T[] elements; // Array storing elements in this set
private int size; // Number of elements in this set
// INVARIANT: Elements are sorted in ascending order within the
// array and there are no repetitions in the
// structure
private final static int INITIAL_CAPACITY = 10;
@SuppressWarnings("unchecked")
public SortedArraySet() {
elements = (T[]) new Comparable[INITIAL_CAPACITY];
size = 0;
}
@SuppressWarnings("unchecked")
public SortedArraySet(int initialCapacity) {
elements = (T[]) new Comparable[initialCapacity];
size = 0;
}
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
private void ensureCapacity() {
if (size == elements.length)
elements = Arrays.copyOf(elements, elements.length * 2);
}
private class Finder {
boolean found;
int index;
// Uses binary search to search for elem in array.
// If elem is found:
// * found is set to true and index is set to index of cell in array containing elem.
// If elem is not found:
// * found is set to false and index is set to index of cell in array
// where elem should be stored.
Finder(T elem) {
if(isEmpty()) {
found = false;
index = 0;
} else {
int limiteInferior = 0;
int limiteSuperior = size - 1;
int index = -1;
while(!found && limiteInferior <= limiteSuperior) {
int medio = limiteInferior + (limiteSuperior - limiteInferior)/2;
if (elements[medio].compareTo(elem) == 0) {
found = true;
index = medio;
} else if (elements[medio].compareTo(elem) < 0) {
limiteInferior = medio + 1;
} else if (elements[medio].compareTo(elem) > 0){
limiteSuperior = medio - 1;
}
}
if (index == -1) {
index = limiteInferior;
}
}
}
}
public void insert(T elem) {
// todo
// Implement insert by using Finder
ensureCapacity();
Finder finder = new Finder(elem);
if (!finder.found) {
int i = size - 1;
while (i > finder.index) {
elements[i + 1] = elements[i];
i--;
}
elements[finder.index] = elem;
size++;
}
}
public boolean isElem(T elem) {
// todo
// Implement isElem by using Finder
return new Finder(elem).found;
}
public void delete(T elem) {
// todo
// Implement delete by using Finder
Finder finder = new Finder(elem);
if(finder.found) {
int i = finder.index;
while(i < size) {
elements[i] = elements[i + 1];
i++;
}
size--;
}
}
// An iterator for this class
private class SortedArraySetIterator implements Iterator<T> {
private int index;
public SortedArraySetIterator() {
// todo
}
public boolean hasNext() {
// todo
return false;
}
public T next() {
// todo
return null;
}
}
@Override
public Iterator<T> iterator() {
return new SortedArraySetIterator();
}
@Override
public String toString() {
String className = getClass().getSimpleName();
StringJoiner sj = new StringJoiner(", ", className + "(", ")");
for (int i = 0; i < size; i++)
sj.add(elements[i].toString());
return sj.toString();
}
// Adds a new element at the end of SortedArraySet.
// precondition: elem should be larger than any element in set
private void append(T elem) {
assert size == 0 || elem.compareTo(elements[size - 1]) > 0 : "append: precondition failed";
// todo
}
// Copy constructor: builds a new SortedLinkedSet with the same
// elements as parameter sortedSet
public SortedArraySet(SortedSet<T> sortedSet) {
// todo
}
public static <T extends Comparable<? super T>>
SortedArraySet<T> union(SortedArraySet<T> set1, SortedArraySet<T> set2) {
// todo Should compute a new SortedArraySet including all elements which are
// in set1 or in set2.
// Neither set1 nor set2 should be modified.
// todo
return null;
}
public static <T extends Comparable<? super T>>
SortedArraySet<T> intersection(SortedArraySet<T> set1, SortedArraySet<T> set2) {
// todo Should compute a new SortedArraySet including only common elements in
// set1 and in set2.
// Neither set1 nor set2 should be modified.
// todo
return null;
}
public static <T extends Comparable<? super T>>
SortedArraySet<T> difference(SortedArraySet<T> set1, SortedArraySet<T> set2) {
// todo Should compute a new SortedArraySet including all elements in
// set1 which are not in set2.
// Neither set1 nor set2 should be modified.
// todo
return null;
}
}