public class ListTester {
public static void main
(String[] args
) { ListOfStrings list = new ListOfStrings();
list.add("Doreen");
list.add("John");
list.add("Dan");
list.add("Tim");
list.add("Elaine");
list.add("Jack");
list.add("Sheba");
list.removeFirst();
list.removeLast();
list.ensureCapacity(13);
list.compress();
list.getIndex("John");
}
}
import java.util.Arrays;
public class ListOfStrings {
public static final int DEFAULT_CAPACITY = 6;
private int size = 0;
public ListOfStrings(){
}
public int getCapacity(){
return names.length;
}
public int getSize(){
return size;
}
if(this.getSize() == this.getCapacity()){
// double the array size
System.
arraycopy(names,
0, temp,
0, names.
length); names = temp;
}
names[size] = name;
size++;
}
public void set
(int i,
String name
){ if(i < 0 || i > getSize() - 1){
String message
= "index " + i
+ " not valid"; }
names[i] = name;
}
public String remove
(int removeIndex
){ if(removeIndex < 0 || removeIndex > getSize() - 1){
String message
= "index " + removeIndex
+ " not valid"; }
String removedItem
= names
[removeIndex
]; // Save for(int i = removeIndex; i <= size - 2; i++){
names[i] = names[i + 1];
}
names[size - 1] = null;
size--;
return removedItem;
}
if(i < 0 || i > getSize() - 1){
String message
= "index " + i
+ " not valid"; }
return names[i];
}
remove(0);
return temp;
}
remove(size - 1);
return temp;
}
public void compress(){
System.
arraycopy(names,
0, temp,
0, size
); names = temp;
}
public void ensureCapacity(int newCapacity) {
if(newCapacity > this.getCapacity()){
System.
arraycopy(names,
0, temp,
0, names.
length); names = temp;
}
}
public int getIndex
(String s
){ int index = 1;
for(int i = 0; (i < names.length); i++){
if(names[i].equals(s)){
index = i;
}
}
return index;
}
{
String removedItem
= names
[getIndex
(s
)]; // Save for(int i = getIndex(s); i <= size - 2; i++){
names[i] = names[i + 1];
}
names[size - 1] = null;
size--;
return removedItem;
}
public void Clear(){
names
= new String[DEFAULT_CAPACITY
]; }
@Override
s += "capacity: " + this.getCapacity();
s += ". size: " + this.getSize();
s += ".\n";
s += "[";
boolean first = true;
for(int i = 0; i < size; i++){
if(first){
s+= names[i];
first = false;
} else {
s+= ", " + names[i];
}
}
s += "]";
return s;
}
}
cHVibGljIGNsYXNzIExpc3RUZXN0ZXIgewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIExpc3RPZlN0cmluZ3MgbGlzdCA9IG5ldyBMaXN0T2ZTdHJpbmdzKCk7CgogICAgICAgIGxpc3QuYWRkKCJEb3JlZW4iKTsKICAgICAgICBsaXN0LmFkZCgiSm9obiIpOwogICAgICAgIGxpc3QuYWRkKCJEYW4iKTsKICAgICAgICBsaXN0LmFkZCgiVGltIik7CiAgICAgICAgbGlzdC5hZGQoIkVsYWluZSIpOwogICAgICAgIGxpc3QuYWRkKCJKYWNrIik7CiAgICAgICAgCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpc3QpOwogICAgICAgIGxpc3QuYWRkKCJTaGViYSIpOyAgICAgICAgCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpc3QpOwogICAgICAgIAogICAgICAKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGlzdCk7CiAgICAgICAgbGlzdC5yZW1vdmVGaXJzdCgpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaXN0KTsKICAgICAgICBsaXN0LnJlbW92ZUxhc3QoKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGlzdCk7CiAgICAgICAgbGlzdC5lbnN1cmVDYXBhY2l0eSgxMyk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpc3QpOwogICAgICAgIGxpc3QuY29tcHJlc3MoKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGlzdCk7CiAgICAgICAgbGlzdC5nZXRJbmRleCgiSm9obiIpOwogICAgICAgCiAgICAgICAgCiAgICAgICAKICAgICAgICAKICAgIH0KfQoKCmltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwoKcHVibGljIGNsYXNzIExpc3RPZlN0cmluZ3MgewogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9DQVBBQ0lUWSA9IDY7CiAgICBwcml2YXRlIFN0cmluZ1tdIG5hbWVzID0gbmV3IFN0cmluZ1tERUZBVUxUX0NBUEFDSVRZXTsKICAgIHByaXZhdGUgaW50IHNpemUgPSAwOwogICAgCiAgICAKICAgIHB1YmxpYyBMaXN0T2ZTdHJpbmdzKCl7CiAgICAgICAgCiAgICB9CiAgICAKICAgIHB1YmxpYyBpbnQgZ2V0Q2FwYWNpdHkoKXsKICAgICAgICByZXR1cm4gbmFtZXMubGVuZ3RoOwogICAgfQogICAgCiAgICBwdWJsaWMgaW50IGdldFNpemUoKXsKICAgICAgICByZXR1cm4gc2l6ZTsKICAgIH0KICAgIAogICAgcHVibGljIHZvaWQgYWRkKFN0cmluZyBuYW1lKXsKICAgICAgICBpZih0aGlzLmdldFNpemUoKSA9PSB0aGlzLmdldENhcGFjaXR5KCkpewogICAgICAgICAgICAvLyBkb3VibGUgdGhlIGFycmF5IHNpemUKICAgICAgICAgICAgU3RyaW5nW10gdGVtcCA9IG5ldyBTdHJpbmdbdGhpcy5nZXRDYXBhY2l0eSgpICogMl07CiAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobmFtZXMsIDAsIHRlbXAsIDAsIG5hbWVzLmxlbmd0aCk7CiAgICAgICAgICAgIG5hbWVzID0gdGVtcDsKICAgICAgICB9CiAgICAgICAgbmFtZXNbc2l6ZV0gPSBuYW1lOwogICAgICAgIHNpemUrKzsKICAgIH0KICAgIAogICAgcHVibGljIHZvaWQgc2V0KGludCBpLCBTdHJpbmcgbmFtZSl7CiAgICAgICAgaWYoaSA8IDAgfHwgaSA+IGdldFNpemUoKSAtIDEpewogICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9ICJpbmRleCAiICsgaSArICIgbm90IHZhbGlkIjsKICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24obWVzc2FnZSk7CiAgICAgICAgfQogICAgICAgIG5hbWVzW2ldID0gbmFtZTsKICAgIH0KICAgIAogICAgcHVibGljIFN0cmluZyByZW1vdmUoaW50IHJlbW92ZUluZGV4KXsKICAgICAgICBpZihyZW1vdmVJbmRleCA8IDAgfHwgcmVtb3ZlSW5kZXggPiBnZXRTaXplKCkgLSAxKXsKICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSAiaW5kZXggIiArIHJlbW92ZUluZGV4ICsgIiBub3QgdmFsaWQiOwogICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihtZXNzYWdlKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgU3RyaW5nIHJlbW92ZWRJdGVtID0gbmFtZXNbcmVtb3ZlSW5kZXhdOyAvLyBTYXZlCiAgICAgICAgZm9yKGludCBpID0gcmVtb3ZlSW5kZXg7IGkgPD0gc2l6ZSAtIDI7IGkrKyl7CiAgICAgICAgICAgIG5hbWVzW2ldID0gbmFtZXNbaSArIDFdOwogICAgICAgIH0KICAgICAgICBuYW1lc1tzaXplIC0gMV0gPSBudWxsOwogICAgICAgIHNpemUtLTsKICAgICAgICByZXR1cm4gcmVtb3ZlZEl0ZW07CiAgICB9CiAgICAKICAgIHB1YmxpYyBTdHJpbmcgZ2V0KGludCBpKXsKICAgICAgICBpZihpIDwgMCB8fCBpID4gZ2V0U2l6ZSgpIC0gMSl7CiAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gImluZGV4ICIgKyBpICsgIiBub3QgdmFsaWQiOwogICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihtZXNzYWdlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5hbWVzW2ldOwogICAgfQogICAgCiAgICBwdWJsaWMgU3RyaW5nIHJlbW92ZUZpcnN0KCl7CiAgICBTdHJpbmcgdGVtcCA9IG5hbWVzWzBdOwogICAgcmVtb3ZlKDApOwogICAgcmV0dXJuIHRlbXA7CiAgICB9CiAgICAKICAgIHB1YmxpYyBTdHJpbmcgcmVtb3ZlTGFzdCgpewogICAgU3RyaW5nIHRlbXAgPSBuYW1lc1swXTsKICAgIHJlbW92ZShzaXplIC0gMSk7CiAgICByZXR1cm4gdGVtcDsKICAgIH0KICAgIAogICAgcHVibGljIHZvaWQgY29tcHJlc3MoKXsKICAgICAgICBTdHJpbmdbXSB0ZW1wID0gbmV3IFN0cmluZ1tzaXplXTsKICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG5hbWVzLCAwLCB0ZW1wLCAwLCBzaXplKTsKICAgICAgICBuYW1lcyA9IHRlbXA7CiAgICB9CiAgICAKICAgIHB1YmxpYyB2b2lkIGVuc3VyZUNhcGFjaXR5KGludCBuZXdDYXBhY2l0eSkgewogICAgICAgIGlmKG5ld0NhcGFjaXR5ID4gdGhpcy5nZXRDYXBhY2l0eSgpKXsKICAgICAgICBTdHJpbmdbXSB0ZW1wID0gbmV3IFN0cmluZ1tuZXdDYXBhY2l0eV07CiAgICAgICAgU3lzdGVtLmFycmF5Y29weShuYW1lcywgMCwgdGVtcCwgMCwgbmFtZXMubGVuZ3RoKTsKICAgICAgICBuYW1lcyA9IHRlbXA7CiAgICAgICAgfQogICAgfQogICAgCiAgICBwdWJsaWMgaW50IGdldEluZGV4KFN0cmluZyBzKXsKICAgIGludCBpbmRleCA9IDE7CiAgICAgICAgZm9yKGludCBpID0gMDsgKGkgPCBuYW1lcy5sZW5ndGgpOyBpKyspewogICAgICAgICAgICBpZihuYW1lc1tpXS5lcXVhbHMocykpewogICAgICAgICAgICBpbmRleCA9IGk7CiAgICB9ICAgICAgICAKICAgIH0KICAgIHJldHVybiBpbmRleDsKICAgIH0KICAKICAgIHB1YmxpYyBTdHJpbmcgcmVtb3ZlKFN0cmluZyBzKQogICAgeyAgCiAgICAgICAgU3RyaW5nIHJlbW92ZWRJdGVtID0gbmFtZXNbZ2V0SW5kZXgocyldOyAvLyBTYXZlCiAgICAgICAgZm9yKGludCBpID0gZ2V0SW5kZXgocyk7IGkgPD0gc2l6ZSAtIDI7IGkrKyl7CiAgICAgICAgICAgIG5hbWVzW2ldID0gbmFtZXNbaSArIDFdOwogICAgICAgIH0KICAgICAgICBuYW1lc1tzaXplIC0gMV0gPSBudWxsOwogICAgICAgIHNpemUtLTsKICAgICAgICByZXR1cm4gcmVtb3ZlZEl0ZW07CiAgICB9CiAgICAgICAgCgogICAgICAgIAogICAgCiAgICAKICAgIHB1YmxpYyB2b2lkIENsZWFyKCl7CiAgICAgICAgbmFtZXMgPSBuZXcgU3RyaW5nW0RFRkFVTFRfQ0FQQUNJVFldOwogICAgfQogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCl7CiAgICAgICAgU3RyaW5nIHMgPSAiIjsKICAgICAgICBzICs9ICJjYXBhY2l0eTogIiArIHRoaXMuZ2V0Q2FwYWNpdHkoKTsKICAgICAgICBzICs9ICIuIHNpemU6ICIgKyB0aGlzLmdldFNpemUoKTsKICAgICAgICBzICs9ICIuXG4iOwogICAgICAgIHMgKz0gIlsiOwogICAgICAgIGJvb2xlYW4gZmlyc3QgPSB0cnVlOwogICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspewogICAgICAgICAgICBpZihmaXJzdCl7CiAgICAgICAgICAgICAgICBzKz0gbmFtZXNbaV07CiAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcys9ICIsICIgKyBuYW1lc1tpXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzICs9ICJdIjsKICAgICAgICAKICAgICAgICByZXR1cm4gczsKICAgIH0KICAgIAp9Cg==