diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..1f58a0f
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+generics
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..c20d346
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__junit_junit_4_12.xml b/.idea/libraries/Maven__junit_junit_4_12.xml
new file mode 100644
index 0000000..d411041
--- /dev/null
+++ b/.idea/libraries/Maven__junit_junit_4_12.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
new file mode 100644
index 0000000..f58bbc1
--- /dev/null
+++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..d30d09e
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..ca63f44
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000..e22f673
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,760 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ size
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ DEFINITION_ORDER
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Android
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1520540023747
+
+
+ 1520540023747
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No facets are configured
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.8
+
+
+
+
+
+
+
+
+
+
+
+ generics
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.8
+
+
+
+
+
+
+
+
+
+
+
+ Maven: junit:junit:4.12
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/generics.iml b/generics.iml
new file mode 100644
index 0000000..9717c26
--- /dev/null
+++ b/generics.iml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/.deleteme b/src/main/java/.deleteme
deleted file mode 100644
index e69de29..0000000
diff --git a/src/main/java/MyArrayList.java b/src/main/java/MyArrayList.java
new file mode 100644
index 0000000..603989c
--- /dev/null
+++ b/src/main/java/MyArrayList.java
@@ -0,0 +1,92 @@
+import java.util.ArrayList;
+import java.util.Arrays;
+
+public class MyArrayList {
+
+ private int counter = 0;
+ private T[] array;
+
+ public MyArrayList(){
+ this.array = (T[]) new Object[0];
+ }
+ public MyArrayList(Integer i){
+ this.array = (T[]) new Object[i];
+ }
+ public void add(T value){
+ T[] newArray = Arrays.copyOf(array, array.length+1);
+ counter++;
+ newArray[newArray.length-1] = value;
+ this.array = newArray;
+
+ }
+ public void add(Integer i, T value){
+ T[] newArray = Arrays.copyOf(array, array.length+1);
+ counter++;
+ for (int index = 0, newIndex = 0; index < newArray.length; index++){
+ if (index != i){
+ newArray[index] = array[newIndex];
+ newIndex++;
+ }
+ newArray[i] = value;
+ }
+ this.array = newArray;
+ }
+ public T get(Integer i){
+ return array[i];
+ }
+ public void remove(int index){
+ T[] newArray = Arrays.copyOf(array, array.length-1);
+ counter--;
+ for (int i = 0, newIndex = 0; i < array.length; i++){
+ if (i != index){
+ newArray[newIndex] = array[i];
+ newIndex++;
+ }
+ }
+ this.array = newArray;
+ }
+ public void remove(T value){
+ T[] newArray = Arrays.copyOf(array, array.length-1);
+ counter--;
+ for (int i = 0, newIndex = 0; i < array.length; i++){
+ if (array[i] != value){
+ newArray[newIndex] = array[i];
+ newIndex++;
+ }
+ }
+ this.array = newArray;
+ }
+ public void set(int i, T value){
+ array[i] = value;
+ }
+ public void clear(){
+ this.array = (T[]) new Object[0];
+ counter = 0;
+ }
+ public boolean isEmpty(){
+ if (array.length == 0){
+ return true;
+ }
+ return false;
+ }
+ public boolean contains(T value){
+ for (int i = 0; i < array.length;i++){
+ if(array[i].equals(value)){
+ return true;
+ }
+ }
+ return false;
+ }
+ public int size(){
+ return counter;
+ }
+ public T[] toArray(T[] a) {
+ if (a.length < array.length)
+ // Make a new array of a's runtime type, but my contents:
+ return (T[]) Arrays.copyOf(a, a.length, a.getClass());
+ System.arraycopy(a, 0, a, 0, a.length);
+ if (a.length > array.length)
+ a[array.length] = null;
+ return a;
+ }
+}
diff --git a/src/main/java/MySet.java b/src/main/java/MySet.java
new file mode 100644
index 0000000..5530311
--- /dev/null
+++ b/src/main/java/MySet.java
@@ -0,0 +1,81 @@
+import java.util.Arrays;
+
+/**
+ * A set by definition has no duplicates. Thus it should not be able to instantiate an array with anything other than
+ * length of 0 because that would defeat the purpose of it being non duplicates.
+ * BUT there is also the case that I should not be
+ * dealing with the array, but rather the supposed set I am suppose to be making but I honestly have no idea how to
+ * make that work so I'm just going to leave this at this for now.
+ *
+ */
+public class MySet {
+
+ private int counter = 0;
+ private T[] setArray;
+ MyArrayList myArrayList;
+
+ public MySet(){
+ this.setArray = (T[]) new Object[0];
+ }
+// public MySet(Integer i){
+// this.setArray = (T[]) new Object[i];
+// }
+ public int size(){
+ return this.counter;
+ }
+ public T get(int i){
+ return this.setArray[i];
+ }
+ public void add(T value){
+ if(!this.contains(value)) {
+ T[] newArray = Arrays.copyOf(setArray, setArray.length + 1);
+ counter++;
+ newArray[newArray.length-1] = value;
+ this.setArray = newArray;
+ }
+ }
+ public void add(int i, T value){
+ if(!this.contains(value)) {
+ T[] newArray = Arrays.copyOf(setArray, setArray.length + 1);
+ counter++;
+ for (int index = 0, newIndex = 0; index < newArray.length; index++) {
+ if (index != i) {
+ newArray[index] = setArray[newIndex];
+ newIndex++;
+ }
+ newArray[i] = value;
+ }
+ this.setArray = newArray;
+ }
+ }
+ public boolean isEmpty(){
+ if (setArray.length == 0){
+ return true;
+ }
+ return false;
+ }
+ public boolean contains(T value){
+ for (int i = 0; i < setArray.length;i++){
+ if(setArray[i].equals(value)){
+ return true;
+ }
+ }
+ return false;
+ }
+ public void remove(T value){
+ T[] newArray = Arrays.copyOf(setArray, setArray.length-1);
+ counter--;
+ for (int i = 0, newIndex = 0; i < setArray.length; i++){
+ if (setArray[i] != value){
+ newArray[newIndex] = setArray[i];
+ newIndex++;
+ }
+ }
+ this.setArray = newArray;
+ }
+ public void clear(){
+ this.setArray = (T[]) new Object[0];
+ counter = 0;
+ }
+
+}
diff --git a/src/test/java/.deleteme b/src/test/java/.deleteme
deleted file mode 100644
index e69de29..0000000
diff --git a/src/test/java/MyArrayListTest.java b/src/test/java/MyArrayListTest.java
new file mode 100644
index 0000000..225135c
--- /dev/null
+++ b/src/test/java/MyArrayListTest.java
@@ -0,0 +1,126 @@
+import org.junit.Assert;
+import org.junit.Test;
+
+public class MyArrayListTest {
+
+ @Test
+ public void addTest(){
+ MyArrayList testArrayList = new MyArrayList<>(2);
+ Integer num = 8;
+ Integer expected = 8;
+ testArrayList.add(num);
+ Integer actual = testArrayList.get(2);
+ Assert.assertEquals(expected, actual);
+ }
+ @Test
+ public void addTestSize(){
+ MyArrayList testArrayList = new MyArrayList<>(0);
+ testArrayList.add(1);
+ testArrayList.add(2);
+ Integer actual = testArrayList.size();
+ Integer expected = 2;
+ Assert.assertEquals(expected,actual);
+ }
+ @Test
+ public void addTestSize2(){
+ MyArrayList testArrayList = new MyArrayList<>(5);
+ testArrayList.add(1);
+ Integer actual = testArrayList.size();
+ Integer expected = 1;
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void addTestO(){
+ MyArrayList testArrayList = new MyArrayList<>();
+ testArrayList.add(1);
+ testArrayList.add(2);
+ testArrayList.add(3);
+ testArrayList.add(3, 2);
+ Integer expected = 2;
+ Integer actual = testArrayList.get(3);
+ Assert.assertEquals(expected, actual);
+ }
+ @Test
+ public void removeTest(){
+ MyArrayList testArrayList = new MyArrayList<>();
+ Integer[] visual = {3, 4, 8};
+ testArrayList.add(3);
+ testArrayList.add(4);
+ testArrayList.add(8);
+ testArrayList.remove(1);
+ Integer[] removed = {4, 8};
+ Integer expected = 2;
+ Integer actual = testArrayList.size();
+ Assert.assertEquals(expected, actual);
+
+ }
+ @Test
+ public void removeTest2(){
+ MyArrayList testArrayList = new MyArrayList<>();
+ String[] visual = {"3", "4", "8"};
+ testArrayList.add("3");
+ testArrayList.add("4");
+ testArrayList.add("8");
+ testArrayList.remove("3");
+ Integer expected = 2;
+ Integer actual = testArrayList.size();
+ Assert.assertEquals(expected,actual);
+
+ }
+ @Test
+ public void getTest(){
+ MyArrayList testArrayList = new MyArrayList<>();
+ testArrayList.add(3);
+ testArrayList.add(4);
+ testArrayList.add(5);
+ Integer expected = 5;
+ Integer actual = testArrayList.get(2);
+ Assert.assertEquals(expected, actual);
+ }
+ @Test
+ public void setTest(){
+ MyArrayList testArrayList = new MyArrayList<>();
+ testArrayList.add(5);
+ testArrayList.set(0, 10);
+ Integer expected = 10;
+ Integer actual = testArrayList.get(0);
+ Assert.assertEquals(expected, actual);
+ }
+ @Test
+ public void clearTest(){
+ MyArrayList testArrayList = new MyArrayList<>();
+ testArrayList.add(5);
+ testArrayList.add(6);
+ testArrayList.add(7);
+ Integer expected = 0;
+ testArrayList.clear();
+ Integer actual = testArrayList.size();
+ Assert.assertEquals(expected,actual);
+ }
+ @Test
+ public void isEmptyTest(){
+ MyArrayList testArrayList = new MyArrayList<>();
+ Assert.assertTrue(testArrayList.isEmpty());
+ }
+ @Test
+ public void containsTest(){
+ MyArrayList testArrayList = new MyArrayList<>();
+ testArrayList.add(5);
+ testArrayList.add(6);
+ testArrayList.add(7);
+ boolean actual = testArrayList.contains(5);
+ boolean expected = true;
+ Assert.assertEquals(expected, actual);
+ }
+ @Test
+ public void sizeTest(){
+ MyArrayList testArrayList = new MyArrayList<>();
+ testArrayList.add(5);
+ testArrayList.add(6);
+ testArrayList.add(7);
+ Integer expected = 3;
+ Integer actual = testArrayList.size();
+ Assert.assertEquals(expected, actual);
+ }
+}
diff --git a/src/test/java/MySetTest.java b/src/test/java/MySetTest.java
new file mode 100644
index 0000000..e0484eb
--- /dev/null
+++ b/src/test/java/MySetTest.java
@@ -0,0 +1,86 @@
+import org.junit.Assert;
+import org.junit.Test;
+
+public class MySetTest {
+
+ @Test
+ public void sizeTest(){
+ MySet testSet = new MySet();
+ testSet.add(1);
+ int expected = 1;
+ int actual = testSet.size();
+ Assert.assertEquals(expected, actual);
+ }
+ @Test
+ public void addTest(){
+ MySet testSet = new MySet();
+ testSet.add(1);
+ testSet.add(2);
+ testSet.add(3);
+ int expected = 3;
+ int actual = testSet.size();
+ Assert.assertEquals(expected, actual);
+ }
+ @Test
+ public void addTest2(){
+ MySet testSet = new MySet();
+ testSet.add(1);
+ testSet.add(2);
+ testSet.add(2);
+ testSet.add(2);
+ int expected = 2;
+ int actual = testSet.size();
+ Assert.assertEquals(expected, actual);
+ }
+ @Test
+ public void addTest3(){
+ MySet testSet = new MySet();
+ testSet.add(1);
+ testSet.add(2);
+ testSet.add(2, 3);
+ int expected = 3;
+ int actual = testSet.get(2);
+ Assert.assertEquals(expected, actual);
+ }
+ @Test
+ public void addTest4(){
+ MySet testSet = new MySet();
+ testSet.add(1);
+ testSet.add(2);
+ int expected = 2;
+ int actual = testSet.size();
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void removeTest(){
+ MySet testSet = new MySet();
+ testSet.add(1);
+ testSet.add(2);
+ testSet.remove(1);
+ int actual = testSet.size();
+ int expected = 1;
+ Assert.assertEquals(expected, actual);
+ }
+ @Test
+ public void isEmptyTest(){
+ MySet testSet = new MySet();
+ Assert.assertTrue(testSet.isEmpty());
+ }
+ @Test
+ public void containsTest(){
+ MySet testSet = new MySet();
+ testSet.add(5);
+ Assert.assertTrue(testSet.contains(5));
+ }
+ @Test
+ public void clearTest(){
+ MySet testSet = new MySet();
+ testSet.add(5);
+ testSet.add(1);
+ testSet.clear();
+ int expected = 0;
+ int actual = testSet.size();
+ Assert.assertEquals(expected, actual);
+ }
+}