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..fddb5ab
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,622 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ minCa
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ DEFINITION_ORDER
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1520540995390
+
+
+ 1520540995390
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.8
+
+
+
+
+
+
+
+
+
+
+
+
\ 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..5131790
--- /dev/null
+++ b/src/main/java/MyArrayList.java
@@ -0,0 +1,77 @@
+import java.util.Arrays;
+
+public class MyArrayList {
+
+ private T[] myArray;
+ private Integer actualSize = 0;
+
+ public MyArrayList() {
+ this.myArray = (T[]) new Object[10];
+ }
+
+ public MyArrayList(int arrayLength){
+ this.myArray = (T[]) new Object[arrayLength];
+ }
+
+ public T[] getMyArray() {
+ return this.myArray;
+ }
+
+ public void add(T element){//add element to array
+ resizeMyArray();
+ this.myArray[actualSize++] = element;
+ }
+
+ public T get(int index){//get element at specified index
+ return this.myArray[index];
+ }
+
+ public T remove(int index){// remove element at specified index return removed element
+ T originalValue = this.myArray[index];
+ int shiftOver = actualSize - index - 1;
+ if (shiftOver > 0)
+ System.arraycopy(this.myArray, index+1, this.myArray, index,
+ shiftOver);
+ this.myArray[--actualSize] = null;
+
+ return originalValue;
+ }
+
+ public T set(int index, T element){// replaces element at index with specific element
+ T originalValue = this.myArray[index];
+ this.myArray[index] = element;
+ return originalValue;
+ }
+
+ public void clear(){// removes all elements from list
+ for(int i = 0; i < actualSize; i++){
+ this.myArray[i] = null;
+ }
+ actualSize = 0;
+ }
+
+ public boolean isEmpty(){// returns true if array has no elements
+ return actualSize == 0;
+ }
+
+ public boolean contains(T elementWanted){//return true if array contains specified element
+ for (T element : this.myArray){
+ if (element == elementWanted){
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public Integer size(){// returns size of array
+ return actualSize;
+ }
+
+ public void resizeMyArray(){
+ if (this.actualSize >= myArray.length -1) {
+ this.myArray = Arrays.copyOf(myArray, myArray.length + myArray.length);
+ }
+ }
+
+
+}
diff --git a/src/main/java/MySet.java b/src/main/java/MySet.java
new file mode 100644
index 0000000..9db2dfe
--- /dev/null
+++ b/src/main/java/MySet.java
@@ -0,0 +1,32 @@
+public class MySet {
+
+ private MyArrayList mySet;
+
+ public MySet(){
+ this.mySet = new MyArrayList<>(10);
+ }
+
+ public void add(T setElement){
+ if (!contains(setElement)){
+ this.mySet.add(setElement);
+ } else{
+ System.out.println("This element is already in this set!");
+ }
+ }
+
+ public Integer size(){
+ return this.mySet.size();
+ }
+
+ public void clear(){
+ this.mySet.clear();
+ }
+
+ public boolean contains(T element){
+ return this.mySet.contains(element);
+ }
+
+ public boolean isEmpty(){
+ return this.mySet.isEmpty();
+ }
+}
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..dbba5e3
--- /dev/null
+++ b/src/test/java/MyArrayListTest.java
@@ -0,0 +1,169 @@
+import org.junit.Assert;
+import org.junit.Test;
+
+public class MyArrayListTest {
+
+ MyArrayList testList = new MyArrayList(2);
+ MyArrayList testListNullary = new MyArrayList();
+ Object newElement = new Object();
+ Object newElement1 = new Object();
+ String testString1 = "One";
+ String testString2= "Two";
+ String testString3 = "Three";
+
+ @Test
+ public void nullaryConstructorTest() {
+ //Given
+ Object[] expected = new Object[10];
+ //when
+ Object[] actual = testListNullary.getMyArray();
+ //Then
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void constructorWithSizeTest() {
+ //Given
+ Object[] expected = new Object[2];
+ //when
+ Object[] actual = testList.getMyArray();
+ //Then
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void addObjectWithNullaryConstructorTest(){
+ //When
+ testListNullary.add(newElement);
+ testListNullary.getMyArray();
+ //Then
+ Assert.assertTrue(testListNullary.size() == 1);
+ }
+
+ @Test
+ public void addObjectWithOneArgumentConstructorTest(){
+ //When
+ Object newElement2 = new Object();
+ testList.add(newElement);
+ testList.add(newElement1);
+ testList.add(newElement2);
+ testList.getMyArray();
+ //Then
+ Assert.assertTrue(testList.size() == 3);
+ }
+ @Test
+ public void addStringWithNullaryConstructorTest(){
+ //When
+ testListNullary.add(testString1);
+ testListNullary.getMyArray();
+ //Then
+ Assert.assertTrue(testListNullary.size() == 1);
+ }
+
+ @Test
+ public void addStringtWithOneArgumentConstructorTest(){
+ //When
+ testList.add(testString1);
+ testList.add(testString2);
+ testList.add(testString3);
+ testList.getMyArray();
+ //Then
+ Assert.assertTrue(testList.size() == 3);
+ }
+
+ @Test
+ public void getTest(){
+ //Given
+ Object expected = newElement1;
+ //When
+ testListNullary.add(newElement);
+ testListNullary.add(newElement1);
+ Object actual = testListNullary.get(1);
+ //Then
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void getStringTest(){
+ //Given
+ String expected = testString2;
+ //When
+ testListNullary.add(testString1);
+ testListNullary.add(testString2);
+ String actual = testListNullary.get(1).toString();
+ //Then
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void removeStringTest(){
+ //Given
+ String expected = testString2;
+ testListNullary.add(testString1);
+ testListNullary.add(testString2);
+ testListNullary.add(testString3);
+ //When
+ String actual = testListNullary.remove(1).toString();
+ //Then
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void setTest(){
+ //Given
+ Object newElement2 = new Object();
+ Object expected = newElement1;
+ //When
+ testListNullary.add(newElement);
+ testListNullary.add(newElement1);
+ Object actual = testListNullary.set(1, newElement2);
+ //Then
+ Assert.assertEquals(expected, actual);
+ Assert.assertTrue(testListNullary.get(1).equals(newElement2));
+ }
+
+ @Test
+ public void clearTest(){
+ //When
+ testListNullary.add(newElement);
+ testListNullary.add(newElement1);
+ testListNullary.clear();
+ //Then
+ Assert.assertTrue(testListNullary.size() == 0);
+ }
+
+ @Test
+ public void isEmptyTest1(){
+ Assert.assertTrue(testListNullary.isEmpty() == true);
+ }
+
+ @Test
+ public void isEmptyTest2(){
+ testList.add(newElement);
+ testList.add(newElement1);
+ Assert.assertTrue(testList.isEmpty() != true);
+ }
+
+ @Test
+ public void containsTest(){
+ testList.add(newElement);
+ testList.add(newElement1);
+ Assert.assertTrue(testList.contains(newElement1) == true);
+ }
+
+ @Test
+ public void containsTest1(){
+ testList.add(newElement);
+ testList.add(newElement1);
+ Assert.assertFalse(testList.contains(newElement1) != true);
+ }
+
+ @Test
+ public void resizeMyArrayTest(){
+ testList.add("Hi");
+ testList.add("How");
+ testList.add("are");
+ testList.add("you");
+ Assert.assertTrue(testList.getMyArray().length == 8);
+ }
+}
diff --git a/src/test/java/MySetTest.java b/src/test/java/MySetTest.java
new file mode 100644
index 0000000..e3f5850
--- /dev/null
+++ b/src/test/java/MySetTest.java
@@ -0,0 +1,124 @@
+import org.junit.Assert;
+import org.junit.Test;
+
+public class MySetTest {
+
+ MySet stringSetTest = new MySet<>();
+ MySet integerSetTest = new MySet<>();
+
+ @Test
+ public void addStringTest(){
+ //Given
+ String newString = "Hi";
+ //When
+ stringSetTest.add(newString);
+ //Then
+ Assert.assertTrue(stringSetTest.size() == 1);
+ }
+
+ @Test
+ public void addIntegerTest(){
+ //Given
+ Integer newInteger = 3;
+ //When
+ integerSetTest.add(newInteger);
+ //Then
+ Assert.assertTrue(integerSetTest.size() == 1);
+ }
+
+ @Test
+ public void integerSetSizeTest(){
+ //Given
+ Integer expected = 3;
+ //When
+ integerSetTest.add(5);
+ integerSetTest.add(6);
+ integerSetTest.add(7);
+ //Then
+ Integer actual = integerSetTest.size();
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void stringSetSizeTest(){
+ //Given
+ Integer expected = 3;
+ //When
+ stringSetTest.add("Foo");
+ stringSetTest.add("Bar");
+ stringSetTest.add("Baz");
+ //Then
+ Integer actual = stringSetTest.size();
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void containsStringTest(){
+ //When
+ stringSetTest.add("Foo");
+ stringSetTest.add("Bar");
+ stringSetTest.add("Baz");
+ //Then
+ Assert.assertTrue(stringSetTest.contains("Hi") != true);
+ }
+
+ @Test
+ public void containsIntegerTest(){
+ //When
+ integerSetTest.add(5);
+ integerSetTest.add(6);
+ integerSetTest.add(7);
+ //Then
+ Assert.assertTrue(integerSetTest.contains(9) != true);
+
+ }
+
+ @Test
+ public void clearStringTest(){
+ //When
+ stringSetTest.add("Foo");
+ stringSetTest.add("Bar");
+ stringSetTest.add("Baz");
+ stringSetTest.clear();
+ //Then
+ Assert.assertTrue(stringSetTest.size() == 0);
+ }
+
+ @Test
+ public void clearIntegerTest(){
+ //When
+ integerSetTest.add(5);
+ integerSetTest.add(6);
+ integerSetTest.add(7);
+ integerSetTest.clear();
+ //Then
+ Assert.assertTrue(integerSetTest.size() == 0);
+ }
+
+ @Test
+ public void isEmptyStringTest1(){
+ Assert.assertTrue(stringSetTest.isEmpty() == true);
+ }
+
+ @Test
+ public void isEmptyStringTest2(){
+ stringSetTest.add("Hello");
+ stringSetTest.add("World");
+ Assert.assertTrue(stringSetTest.isEmpty() != true);
+ }
+
+
+ @Test
+ public void isEmptyIntegerTest1(){
+ Assert.assertTrue(integerSetTest.isEmpty() == true);
+ }
+
+ @Test
+ public void isEmptyIntegerTest2(){
+ integerSetTest.add(9);
+ integerSetTest.add(15);
+ Assert.assertTrue(integerSetTest.isEmpty() != true);
+ }
+
+
+}