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..42b7289
--- /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..57ec14e
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,672 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ DEFINITION_ORDER
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1520613740957
+
+
+ 1520613740957
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.8
+
+
+
+
+
+
+
+
+
+
+
+ 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/Map.java b/src/main/java/Map.java
new file mode 100644
index 0000000..17a68fd
--- /dev/null
+++ b/src/main/java/Map.java
@@ -0,0 +1,104 @@
+import java.util.Arrays;
+
+public class Map {
+
+ private int size;
+ private int defaultCapacity = 15;
+ @SuppressWarnings("unchecked")
+ private MyEntry[] myEntry = new MyEntry[defaultCapacity];
+
+ public Map(K key, V value) {
+ }
+ public Map(K key){
+ }
+ public Map() {
+ }
+
+ public void clear(){
+
+ }
+ public boolean containsKey(K key){
+ for(int i = 0; i < myEntry.length; i++){
+ if(key.equals(i)){
+ return true;
+ }
+ }
+ return false;
+ }
+ public boolean containsValue(V value){
+ for(int i = 0; i < myEntry.length; i++){
+ if(value.equals(i)){
+ return true;
+ }
+ }
+ return false;
+ }
+ public Map entrySet(){
+ return null;
+ }
+ public boolean equals(Object o){
+ for(int i = 0; i < myEntry.length; i++){
+ if(myEntry[i] == o){
+ return true;
+ }
+ }
+ return false;
+ }
+ public V get(K key) {
+ for (int i = 0; i < myEntry.length; i++) {
+ if (myEntry[i] != null) {
+ if (myEntry[i].getKey().equals(key)) {
+ return myEntry[i].getValue();
+ }
+ }
+ }
+ return null;
+ }
+
+ public int hashCode(){
+ return 0;
+ }
+ public boolean isEmpty(){
+ if(myEntry.length == 0){
+ return true;
+ }
+ return false;
+ }
+ public Set keySet(){
+ return null;
+ }
+ public void put(K key, V value) {
+ boolean addToMap = true;
+ for (int i = 0; i < myEntry.length; i++) {
+ if (myEntry[i].getKey().equals(key)) {
+ myEntry[i].setValue(value);
+ addToMap = false;
+ }
+ if (addToMap) {
+ increaseSize();
+ myEntry[size++] = new MyEntry<>(key, value);
+ }
+ }
+ }
+ public void increaseSize(){
+ if(size == myEntry.length){
+ int newSize = myEntry.length * 2;
+ myEntry = Arrays.copyOf(myEntry, newSize);
+ }
+ }
+ public void remove(K key) {
+ for (int i = 0; i < size; i++) {
+ if (myEntry[i].getKey().equals(key)) {
+ myEntry[i] = null;
+ size--;
+ }
+ }
+ }
+ public int size(){
+ return size;
+ }
+ public V values(){
+ return null;
+ }
+ }
+
diff --git a/src/main/java/MyArrayList.java b/src/main/java/MyArrayList.java
new file mode 100644
index 0000000..9dad15c
--- /dev/null
+++ b/src/main/java/MyArrayList.java
@@ -0,0 +1,62 @@
+import java.util.Arrays;
+
+public class MyArrayList {
+
+
+ private T[] myArray;
+
+ public MyArrayList() {
+
+ }
+ public MyArrayList(T[] array) {
+ myArray = Arrays.copyOf(array, array.length);
+
+ }
+ public MyArrayList(T[] array, int i) {
+ myArray = Arrays.copyOf(array, i);
+ }
+ public void add(T element){
+ int i = this.myArray.length;
+ myArray = Arrays.copyOf(myArray, i + 1);
+ myArray[i] = element;
+ }
+ public T get(int i){
+ return this.myArray[i];
+ }
+ public void remove(T element){
+ T[] newArray = Arrays.copyOf(myArray, myArray.length - 1);
+ int i = 0;
+ for(T t : myArray){
+ if(!t.equals(element)){
+ newArray[i] = t;
+ i++;
+ }
+ }
+ myArray = newArray;
+ }
+ public void set(int index, T element){
+ T[] newArray = Arrays.copyOf(myArray, myArray.length + 1);
+ for(int i = 0; i < newArray.length-1; i++){
+ newArray[i < index ? i : i+1] = myArray[i];
+ newArray[index] = element;
+ }
+ }
+
+ public void clear(T[] array){
+
+ }
+ public boolean isEmpty(){
+ if(myArray.length == 0){
+ return true;
+ }
+ return false;
+ }
+ public boolean contains(T element){
+ for(T t : myArray){
+ if(t.equals(element))
+ return true;
+
+ }
+ return false;
+ }
+}
diff --git a/src/main/java/MyEntry.java b/src/main/java/MyEntry.java
new file mode 100644
index 0000000..07df245
--- /dev/null
+++ b/src/main/java/MyEntry.java
@@ -0,0 +1,25 @@
+public class MyEntry {
+ private K key;
+ private V value;
+
+ public MyEntry(K key, V value) {
+ this.key = key;
+ this.value = value;
+ }
+
+ public K getKey() {
+ return key;
+ }
+
+ public void setKey(K key) {
+ this.key = key;
+ }
+
+ public V getValue() {
+ return value;
+ }
+
+ public void setValue(V value) {
+ this.value = value;
+ }
+}
diff --git a/src/main/java/Set.java b/src/main/java/Set.java
new file mode 100644
index 0000000..50f78dd
--- /dev/null
+++ b/src/main/java/Set.java
@@ -0,0 +1,34 @@
+public class Set {
+
+
+ public Set() {
+ }
+ public boolean add(){
+ return true;
+ }
+ public void clear(){
+
+ }
+ public boolean contains(){
+ return true;
+ }
+ public boolean equals(){
+ return true;
+ }
+ public int hashCode(){
+ return 0;
+ }
+ public boolean isEmpty(){
+ return true;
+ }
+ public boolean remove(){
+ return true;
+ }
+ public int size(){
+ return 0;
+ }
+ public T[] toArray(){
+ return null;
+ }
+
+}
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/MapTest.java b/src/test/java/MapTest.java
new file mode 100644
index 0000000..d552178
--- /dev/null
+++ b/src/test/java/MapTest.java
@@ -0,0 +1,114 @@
+import org.junit.Assert;
+import org.junit.Test;
+
+public class MapTest {
+
+ @Test
+ public void clearTest(){
+ //Given
+ //When
+ //Then
+ }
+ @Test
+ public void containsKeyTest(){
+ //Given
+ String expectKey = "Jake";
+ Map myMap = new Map<>(expectKey);
+ //When
+ myMap.containsKey(expectKey);
+ //Then
+ Assert.assertEquals("Jake", expectKey);
+ }
+ @Test
+ public void containsValueTest(){
+ //Given
+ String expectValue = "Jones";
+ Map myMap = new Map<>(expectValue);
+ //When
+ myMap.containsValue(expectValue);
+ //Then
+ Assert.assertEquals("Jones", expectValue);
+ }
+ @Test
+ public void entrySetTest(){
+ //Given
+ //When
+ // Then
+ }
+ @Test
+ public void equalsTest(){
+ //Given
+ //When
+ //Then
+ }
+
+ @Test
+ public void hashCodeTest(){
+ //Given
+ //When
+ // Then
+ }
+ @Test
+ public void isEmptyTest(){
+ //Given
+
+ //When
+ //Then
+ }
+ @Test
+ public void keySetTest(){
+ //Given
+ //When
+ //Then
+ }
+ @Test
+ public void putTest(){
+ //Given
+ String entryKey = "Jake";
+ String entryValue = "Jones";
+ Map myMap = new Map<>();
+ //When
+ myMap.put(entryKey, entryValue);
+ boolean hasKey = myMap.containsKey(entryKey);
+ boolean hasValue = myMap.containsValue(entryValue);
+ //Then
+ Assert.assertTrue(hasKey);
+ Assert.assertTrue(hasValue);
+
+ }
+ @Test
+ public void removeTest(){
+ //Given
+ String entryKey = "Jake";
+ String entryValue = "Jones";
+ Map myMap = new Map<>(entryKey, entryValue);
+ //When
+ myMap.remove(entryKey);
+ boolean hasBeenRemoved = !myMap.containsKey(entryKey);
+ //Then
+ Assert.assertTrue(hasBeenRemoved);
+ }
+ @Test
+ public void sizeTest(){
+ //Given
+ Integer sizeOfMap = 1;
+ String entryKey = "Jake";
+ String entryValue = "Jones";
+ Map myMap = new Map<>(entryKey, entryValue);
+ //When
+ myMap.size();
+ //Then
+ Assert.assertSame(1, sizeOfMap);
+ }
+ @Test
+ public void valuesTest(){
+ //Given
+ String entryKey1 = "Jake";
+ String entryValue1 = "Jones";
+ MyEntry myEntry = new MyEntry<>(entryKey1, entryValue1);
+ //When
+ myEntry.getValue();
+ //Then
+ Assert.assertEquals("Jones", entryValue1);
+ }
+}
diff --git a/src/test/java/MyArrayListTest.java b/src/test/java/MyArrayListTest.java
new file mode 100644
index 0000000..fbf7ca3
--- /dev/null
+++ b/src/test/java/MyArrayListTest.java
@@ -0,0 +1,89 @@
+import org.junit.Assert;
+import org.junit.Test;
+
+public class MyArrayListTest {
+
+ @Test
+ public void addTest(){
+ //Given
+ Object elementToAdd = "s";
+ Object[] originalArray = {"g", "r", "a", "p", "e"};
+ MyArrayList