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/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..022ab29
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ 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..b2526f7
--- /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..97451e5
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,613 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ DEFINITION_ORDER
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1520543370253
+
+
+ 1520543370253
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 9.0
+
+
+
+
+
+
+
+
+
+
+
+
\ 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..a8d8ec7
--- /dev/null
+++ b/src/main/java/MyArrayList.java
@@ -0,0 +1,204 @@
+import java.util.Arrays;
+
+class MyArrayList{
+ private E[] arrayList;
+
+ public MyArrayList(){
+ this.arrayList = (E[]) new Object[0];
+ }
+
+ public MyArrayList(int size){
+ this.arrayList = (E[]) new Object[size];
+ }
+
+ public void add(E numberToAdd){
+ for(int i = 0; i < arrayList.length; i++){
+ if(arrayList[i]==null){
+ arrayList[i] = numberToAdd;
+ return;
+ }
+ }
+ this.arrayList = Arrays.copyOf(arrayList, arrayList.length + 1);
+ arrayList[arrayList.length - 1] = numberToAdd;
+ }
+
+ public void add1(int index, E numToAdd){
+ E[] tempArray = Arrays.copyOf(arrayList, arrayList.length + 1);
+ if (tempArray[index].equals(null)) {
+ tempArray[index] = numToAdd;
+ } else {
+ Integer counter = this.arrayList.length;
+ while (index < counter) {
+ tempArray[counter] = tempArray[counter - 1];
+ counter--;
+ }
+ tempArray[index] = numToAdd;
+
+ }
+ this.arrayList = tempArray;
+ }
+
+ public E get(int index){
+ return arrayList[index];
+ }
+
+ public E remove(int index){
+ return arrayList[index];
+ }
+
+// public E set(int index, E element){
+// return null;
+// }
+
+ public void clear(){
+ this.arrayList = Arrays.copyOf(arrayList,0);
+ }
+
+ public boolean isEmpty(){
+ if(size() == 0){
+ return true;
+ }
+ return false;
+
+ }
+
+ public boolean contains(E obj){
+ for(E value : arrayList){
+ if(value.equals(obj)){
+ return true;
+ }
+
+ }
+ return false;
+ }
+
+ public int size() {
+ return arrayList.length;
+ }
+
+ public E[] toArray(E[] integers) {
+
+ if(integers.length < arrayList.length){
+ return ((E[]) Arrays.copyOf(arrayList, arrayList.length, integers.getClass()));
+ }
+ System.arraycopy(arrayList, 0, integers, 0, arrayList.length);
+ if (integers.length > arrayList.length) {
+ integers[arrayList.length] = null;
+ }
+ return integers;
+ }
+
+ public void set(E value, int index) {
+ arrayList[index] = value;
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//import java.util.*;
+//
+//public class MyArrayList {
+// private E[] arrayList;
+//
+//
+// public MyArrayList(){
+// this.arrayList = (E[]) new Object[0];
+// }
+//
+// public MyArrayList(Integer size){
+// arrayList = (E[]) new Object[size];
+//
+// }
+//
+// public void add(E value){
+// arrayList = Arrays.copyOf(arrayList, arrayList.length+1);
+// value = arrayList[arrayList.length-1];
+// }
+//
+// public void add(int input, E value) {
+// arrayList = Arrays.copyOf(arrayList, arrayList.length + 1);
+// for(Integer i = arrayList.length-1; i > input; i--){
+// arrayList[i]=arrayList[i-1];
+// }
+// this.arrayList[input]=value;
+// }
+//
+//}
diff --git a/src/main/java/MySet.java b/src/main/java/MySet.java
new file mode 100644
index 0000000..1e1a03d
--- /dev/null
+++ b/src/main/java/MySet.java
@@ -0,0 +1,53 @@
+public class MySet {
+ MyArrayList mySet;
+
+ public MySet() {
+ mySet = new MyArrayList<>();
+ }
+
+ public MySet(int sizeOfSet){
+ mySet = new MyArrayList<>(sizeOfSet);
+ }
+
+ public void add(E valueToAdd){
+ if (!mySet.contains(valueToAdd)){
+ mySet.add(valueToAdd);
+ }
+ }
+
+ public void add(int index, E valueToAdd){
+ if(!mySet.contains(valueToAdd)){
+ mySet.add1(index, valueToAdd);
+ }
+ }
+
+ public void remove(int index){
+ mySet.remove(index);
+ }
+
+
+ public void set(E value, int index){
+ mySet.set(value, index);
+ }
+ public E get(int index){
+ return mySet.get(index);
+ }
+ public void clear(){
+ mySet.clear();
+ }
+ public Integer size(){
+ return this.size();
+ }
+ public Boolean contains(E value){
+ if (mySet.contains(value)){
+ return true;
+ }
+ return false;
+ }
+ public Boolean isEmpty(){
+ if (mySet.isEmpty()){
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/src/test/java/MyArrayListTest.java b/src/test/java/MyArrayListTest.java
new file mode 100644
index 0000000..ceac642
--- /dev/null
+++ b/src/test/java/MyArrayListTest.java
@@ -0,0 +1,122 @@
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.ArrayList;
+
+import static org.junit.Assert.*;
+
+public class MyArrayListTest {
+
+
+ @Test
+ public void addTest() {
+ //Given
+ MyArrayList myArrayList = new MyArrayList<>();
+ //When
+ myArrayList.add(3);
+ myArrayList.add(6);
+ //Then
+ Integer[] actual = myArrayList.toArray(new Integer[myArrayList.size()]);
+ Integer[] expected = new Integer[]{3, 6};
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void add1Test(){
+ //Given
+ MyArrayList myArrayList = new MyArrayList<>();
+ //When
+ myArrayList.add(1);
+ myArrayList.add(2);
+ myArrayList.add(3);
+ myArrayList.add(4);
+ myArrayList.add(5);
+
+ myArrayList.add1(2, 7);
+
+ //Then
+ Integer expected = 2;
+ Integer actual = myArrayList.get(7);
+
+ Assert.assertEquals(expected, actual);
+ }
+
+
+
+ @Test
+ public void getTest() {
+ //Given
+ MyArrayList myArrayList = new MyArrayList<>();
+ //When
+ myArrayList.add(1);
+ myArrayList.add(2);
+ myArrayList.add(3);
+ myArrayList.add(4);
+ myArrayList.add(5);
+ //Then
+ Integer expected = 3;
+ Assert.assertEquals(expected, myArrayList.get(2));
+ }
+
+ @Test
+ public void removeTest() {
+ //Given
+ MyArrayList myArrayList = new MyArrayList<>();
+ //When
+ myArrayList.add(1);
+ myArrayList.add(2);
+ myArrayList.add(3);
+ myArrayList.add(4);
+ myArrayList.add(5);
+ myArrayList.remove(1);
+ //Then
+ Integer[] actual = myArrayList.toArray(new Integer[myArrayList.size()]);
+ Integer[] expected = new Integer[]{1, 2, 3, 4, 5};
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void setTest() {
+ //Given
+ MyArrayList myArrayList = new MyArrayList<>();
+ //When
+ myArrayList.add(1);
+ myArrayList.add(2);
+ myArrayList.add(3);
+ myArrayList.add(4);
+ myArrayList.add(5);
+ Integer[] expected = new Integer[]{1, 2, 3, 4, 5};
+ Integer[] actual = myArrayList.toArray(new Integer[myArrayList.size()]);
+ //Then
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void clearTest() {
+ //Given
+ MyArrayList myArrayList = new MyArrayList<>();
+ //When
+ myArrayList.add(3);
+ myArrayList.add(4);
+ myArrayList.add(5);
+ myArrayList.clear();
+ Assert.assertEquals(myArrayList.size(), 0);
+ Assert.assertTrue(myArrayList.isEmpty());
+ }
+
+
+ @Test
+ public void containsTest() {
+ //Given
+ MyArrayList myArrayList = new MyArrayList<>();
+ //When
+ myArrayList.add(4);
+ myArrayList.add(5);
+ Assert.assertTrue(myArrayList.contains(4));
+ Assert.assertFalse(myArrayList.contains(9));
+ }
+
+
+
+
+}
\ 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..cb0ce6d
--- /dev/null
+++ b/src/test/java/MySetTest.java
@@ -0,0 +1,133 @@
+import org.junit.Test;
+import org.junit.Assert;
+
+public class MySetTest {
+
+ @Test
+ public void addTest(){
+ //Given
+ MySet mySet = new MySet<>();
+ //When
+ Integer expected = 4;
+ mySet.add(expected);
+ //Then
+ Integer actual = mySet.get(0);
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void removeTest(){
+ //Given
+ Integer removedAtIndex = 2;
+ Integer expected = 3;
+ MySet mySet = new MySet<>();
+ //When
+ mySet.add(1);
+ mySet.add(2);
+ mySet.add(3);
+ mySet.add(4);
+ mySet.add(5);
+ mySet.remove(removedAtIndex);
+ //Then
+ Integer actual = mySet.get(removedAtIndex);
+ Assert.assertEquals(expected, actual);
+
+ }
+
+ @Test
+ public void getTest(){
+ //Given
+ Integer indexValue = 3;
+ Integer expected = 4;
+ MySet mySet = new MySet<>();
+ mySet.add(1);
+ mySet.add(2);
+ mySet.add(3);
+ mySet.add(4);
+ mySet.add(5);
+
+ //When
+ Integer actual = mySet.get(indexValue);
+ //Then
+ Assert.assertEquals(actual, expected);
+
+ }
+ @Test
+ public void setTest() {
+ //Given
+ MySet mySet = new MySet<>();
+ String expected = "you";
+ mySet.add("got way to much");
+ mySet.add("time");
+ mySet.add("I'm the **** I ain't even in my prime");
+ mySet.set(expected, 2);
+ //When
+ String actual = mySet.get(2);
+ //Then
+ Assert.assertEquals(expected, actual);
+
+ }
+
+ @Test
+ public void addTest2() {
+ //Given
+ MySet mySet = new MySet<>();
+ mySet.add(1);
+ mySet.add(2);
+ mySet.add(3);
+ mySet.add(4);
+ mySet.add(5);
+
+ mySet.add(3, 7);
+
+ //When
+ Integer expected = 7;
+ Integer actual = mySet.get(3);
+ //Then
+ Assert.assertEquals(expected, actual);
+
+ }
+
+ @Test
+ public void clearTest() {
+
+ //Given
+ MySet mySet = new MySet<>();
+ //When
+ mySet.add(3);
+ mySet.add(4);
+ mySet.add(5);
+ mySet.clear();
+ Assert.assertEquals(mySet.size(), 0);
+ Assert.assertTrue(mySet.isEmpty());
+ }
+
+ @Test
+ public void isEmptyTest() {
+ //Given
+ MySet mySet = new MySet<>();
+ Boolean expected = true;
+ //When
+ Boolean actual = mySet.isEmpty();
+ //Then
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void containsTest() {
+ //Given
+ MySet mySet = new MySet<>();
+ String valueToContain = "I";
+ mySet.add("accept your challenge");
+ mySet.add(valueToContain);
+ mySet.add("M'Baku");
+ Boolean expected = true;
+
+ //When
+ Boolean actual = mySet.contains(valueToContain);
+
+ //Then
+ Assert.assertEquals(expected, actual);
+ }
+
+}