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..a654ce2
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,587 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ DEFINITION_ORDER
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1520609910450
+
+
+ 1520609910450
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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/MyArrayList.java b/src/main/java/MyArrayList.java
new file mode 100644
index 0000000..4845ede
--- /dev/null
+++ b/src/main/java/MyArrayList.java
@@ -0,0 +1,83 @@
+import java.util.Arrays;
+
+public class MyArrayList {
+
+ private E[] myArrayList;
+
+ public MyArrayList() {
+ myArrayList = (E[]) new Object[0];
+ }
+
+ public MyArrayList(Integer size) {
+
+ }
+
+ public E[] MyArrayList(int size) {
+ return myArrayList = (E[]) new Object[size];
+ }
+
+
+ public void add(E elementToAppend) {
+ E[] newArray = Arrays.copyOf(myArrayList, myArrayList.length + 1);
+ newArray[newArray.length - 1] = elementToAppend;
+ this.myArrayList = newArray;
+ }
+
+ public void addAtIndex(Integer index, E elementToInsert) {
+ E[] newArray = Arrays.copyOf(myArrayList, myArrayList.length + 1);
+ int x = 0;
+ for(int i = 0; i < newArray.length; i++) {
+ if(i != index) {
+ newArray[i] = myArrayList[x];
+ x++;
+ } else {
+ newArray[i] = elementToInsert;
+ }
+ }
+ myArrayList = newArray;
+ }
+
+ public E get(Integer index) {
+ return this.myArrayList[index];
+ }
+
+
+ public void remove(Integer index) {
+ E[] newArray = Arrays.copyOf(myArrayList, myArrayList.length - 1);
+ int x = 0;
+ for(int i = 0; i < newArray.length; i++) {
+ if( index != i) {
+ newArray[x] = myArrayList[i];
+ x++;
+ }
+ }
+ this.myArrayList = newArray;
+ }
+
+
+ public E set(Integer index, E elementToStore) { //index of element to replace; element to be stored
+ return myArrayList[index] = elementToStore;
+ }
+
+
+ public void clear() {
+ myArrayList = Arrays.copyOf(myArrayList, 0);
+ }
+
+ public boolean isEmpty() {
+ if (myArrayList.length == 0) {
+ return true;
+ }
+ return false;
+ }
+
+ public boolean contains(E value) {
+ for (E valueInArray : myArrayList) {
+ if (valueInArray == value) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/src/main/java/MySet.java b/src/main/java/MySet.java
new file mode 100644
index 0000000..d3ae354
--- /dev/null
+++ b/src/main/java/MySet.java
@@ -0,0 +1,48 @@
+public class MySet {
+
+ MyArrayList mySet;
+
+ public MySet() {
+ mySet = new MyArrayList<>();
+ }
+
+ public MySet(Integer size) {
+ mySet = new MyArrayList<>(size);
+ }
+
+ public void add(E elementToAppend) {
+ if (!mySet.contains(elementToAppend)) {
+ mySet.add(elementToAppend);
+ }
+ }
+
+ public void addAtIndex(Integer index, E elementToInsert) {
+ if (!mySet.contains(elementToInsert)) {
+ mySet.addAtIndex(index, elementToInsert);
+ }
+ }
+
+ public E get(Integer index) {
+ return mySet.get(index);
+ }
+
+ public void remove(Integer index) {
+ mySet.remove(index);
+ }
+
+ public E set(Integer index, E elementToStore) {
+ return mySet.set(index, elementToStore);
+ }
+
+ public void clear() {
+ mySet.clear();
+ }
+
+ public boolean isEmpty() {
+ return mySet.isEmpty();
+ }
+
+ public boolean contains(E value) {
+ return mySet.contains(value);
+ }
+}
diff --git a/src/test/java/MyArrayListTest.java b/src/test/java/MyArrayListTest.java
new file mode 100644
index 0000000..eee9a08
--- /dev/null
+++ b/src/test/java/MyArrayListTest.java
@@ -0,0 +1,105 @@
+import org.junit.Assert;
+import org.junit.Test;
+
+public class MyArrayListTest {
+
+// @Before
+// MyArrayList testMyArrayList = new MyArrayList<>();
+
+ @Test
+ public void addTest() {
+ MyArrayList testMyArrayList = new MyArrayList<>();
+ Integer expected = 12;
+ testMyArrayList.add(expected);
+ Integer actual = testMyArrayList.get(0);
+
+ Assert.assertEquals(expected, actual);
+ }
+
+
+ @Test
+ public void addAtIndexTest() {
+ MyArrayList testMyArrayList = new MyArrayList<>();
+ testMyArrayList.add(3);
+ testMyArrayList.add(12);
+ testMyArrayList.addAtIndex(1, 12);
+
+ Integer expected = 12;
+
+ Integer actual = testMyArrayList.get(1);
+
+ Assert.assertEquals(expected, actual);
+ }
+
+
+ @Test
+ public void removeTest() {
+ MyArrayList testMyArrayList = new MyArrayList<>();
+
+ testMyArrayList.add(3);
+ testMyArrayList.add(12);
+ testMyArrayList.remove(0);
+
+ int expected = 3;
+ int actual = testMyArrayList.get(0);
+
+ Assert.assertEquals(expected, actual);
+ }
+
+
+ @Test
+ public void setTest() {
+ MyArrayList testMyArrayList = new MyArrayList<>();
+
+ testMyArrayList.add(3);
+ testMyArrayList.add(12);
+
+ testMyArrayList.set(1, 69);
+
+ int expected = 69;
+ int actual = testMyArrayList.get(1);
+
+ Assert.assertEquals(expected, actual);
+ }
+
+
+ @Test
+ public void clearTest() {
+ MyArrayList testMyArrayList = new MyArrayList<>();
+
+ testMyArrayList.add(3);
+ testMyArrayList.add(12);
+
+ testMyArrayList.clear();
+
+ Assert.assertTrue(testMyArrayList.isEmpty());
+ }
+
+
+ @Test
+ public void isEmptyTest() {
+ MyArrayList testMyArrayList = new MyArrayList<>();
+
+ testMyArrayList.add(3);
+ testMyArrayList.add(12);
+
+ testMyArrayList.clear();
+
+ Assert.assertTrue(testMyArrayList.isEmpty());
+ }
+
+
+ @Test
+ public void containsTest() {
+ MyArrayList testMyArrayList = new MyArrayList<>();
+
+ testMyArrayList.add(3);
+ testMyArrayList.add(12);
+
+ boolean expected = true;
+ boolean actual = testMyArrayList.contains(12);
+
+ Assert.assertEquals(expected, actual);
+
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/MySetTest.java b/src/test/java/MySetTest.java
new file mode 100644
index 0000000..7503287
--- /dev/null
+++ b/src/test/java/MySetTest.java
@@ -0,0 +1,84 @@
+import org.junit.Assert;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class MySetTest {
+
+ @Test
+ public void addTest() {
+ MySet testSet = new MySet<>();
+ testSet.add(3);
+ testSet.add(11);
+ testSet.add(12);
+ int expected = 11;
+ int actual = testSet.get(1);
+ Assert.assertEquals(expected, actual);
+
+ }
+
+ @Test
+ public void addAtIndexTest() {
+ MySet testSet = new MySet<>();
+ testSet.add(3);
+ testSet.add(11);
+ testSet.add(12);
+ testSet.addAtIndex(0, 10);
+ int expected = 10;
+ int actual = testSet.get(0);
+ Assert.assertEquals(expected, actual);
+
+
+ }
+
+ @Test
+ public void removeTest() {
+ MySet testSet = new MySet<>();
+ testSet.add(3);
+ testSet.add(11);
+ testSet.add(12);
+ testSet.remove(1);
+ int expected = 11;
+ int actual = testSet.get(1);
+ Assert.assertEquals(expected, actual);
+
+ }
+
+
+ @Test
+ public void setTest() {
+ MySet testSet = new MySet<>();
+ testSet.add(3);
+ testSet.add(12);
+ testSet.set(1, 11);
+ int expected = 11;
+ int actual = testSet.get(1);
+ Assert.assertEquals(expected, actual);
+
+ }
+
+ @Test
+ public void clearTest() {
+ MySet testSet = new MySet<>();
+ testSet.add(3);
+ testSet.add(12);
+ testSet.clear();
+
+ boolean expected = true;
+ boolean actual = testSet.isEmpty();
+
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void containsTest() {
+ MySet testSet = new MySet<>();
+ testSet.add(3);
+ testSet.add(12);
+
+ boolean expected = true;
+ boolean actual = testSet.contains(3);
+
+ Assert.assertEquals(expected, actual);
+ }
+}
\ No newline at end of file