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..08f5cba
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,660 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ myArrayList
+
+
+ mySet
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ DEFINITION_ORDER
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1520539685909
+
+
+ 1520539685909
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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..0d042b3
--- /dev/null
+++ b/src/main/java/MyArrayList.java
@@ -0,0 +1,116 @@
+import java.util.Arrays;
+
+public class MyArrayList {
+ private T[] mainArray;
+
+ public MyArrayList() {
+ this.mainArray = (T[]) new Object[0];
+ }
+
+ public MyArrayList(int size){
+ this.mainArray = (T[]) new Object[size];
+ }
+
+ public T get(int index){
+ return mainArray[index];
+ }
+
+ public void add(T valueToAdd) {
+ for(int i = 0; i < mainArray.length; i++){
+ if(mainArray[i]==null){
+ mainArray[i] = valueToAdd;
+ return;
+ }
+ }
+ this.mainArray = Arrays.copyOf(mainArray, mainArray.length + 1);
+ mainArray[mainArray.length - 1] = valueToAdd;
+ }
+
+ public void add(int indexValue, T valToAdd){
+ T[] result = (T[]) new Object[mainArray.length + 1];
+ int counter = indexValue + 1;
+ for (int i = 0; i < indexValue; i++) {
+ result[i] = mainArray[i];
+ }
+ result[indexValue] = valToAdd;
+ for (int i = indexValue; i < mainArray.length; i++) {
+ result[i + 1] = mainArray[indexValue];
+ }
+ mainArray = Arrays.copyOf(mainArray, mainArray.length + 1);
+ for (int i = 0; i < result.length; i++) {
+ mainArray[i] = result[i];
+ }
+ }
+
+ public void remove(T valueToRemove) {
+ boolean valueExists;
+ do {
+ for (int i = 0; i < mainArray.length; i++) {
+ if (mainArray[i] == valueToRemove) {
+ removeValueAtIndex(i);
+ }
+ }
+ valueExists = doesItReallyExist(valueToRemove);
+ } while (valueExists == true);
+ }
+
+ private void removeValueAtIndex(int indexValue) {
+ T[] result = (T[]) new Object[mainArray.length - 1];
+ int counter = indexValue + 1;
+ for (int i = 0; i < indexValue; i++) {
+ result[i] = mainArray[i];
+ }
+ for (int i = indexValue + 1; i < mainArray.length; i++) {
+ result[i] = mainArray[indexValue - 1];
+ }
+ mainArray = Arrays.copyOf(mainArray, mainArray.length - 1);
+ for (int i = 0; i < result.length; i++) {
+ mainArray[i] = result[i];
+ }
+ }
+
+ private boolean doesItReallyExist(T valueToRemove) {
+ for (T value : this.mainArray) {
+ if (value == valueToRemove) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public T[] toArray(T[] a) {
+ if (a.length < mainArray.length) {
+ return (T[]) Arrays.copyOf(mainArray, mainArray.length, a.getClass());
+ }
+ System.arraycopy(mainArray, 0, a, 0, mainArray.length);
+ if (a.length > mainArray.length) {
+ a[mainArray.length] = null;
+ }
+ return a;
+ }
+
+ public int size() {
+ return mainArray.length;
+ }
+
+ public void clear() {
+ this.mainArray = Arrays.copyOf(mainArray, 0);
+ }
+
+ public boolean isEmpty() {
+ if (size() == 0) {
+ return true;
+ }
+ return false;
+ }
+
+ public boolean contains(T valueToLookFor) {
+ boolean foundIt = false;
+ for (T value : mainArray) {
+ if (value.equals(valueToLookFor)) {
+ foundIt = true;
+ }
+ }
+ return foundIt;
+ }
+}
diff --git a/src/main/java/MySet.java b/src/main/java/MySet.java
new file mode 100644
index 0000000..d2d1919
--- /dev/null
+++ b/src/main/java/MySet.java
@@ -0,0 +1,108 @@
+import java.util.Arrays;
+
+public class MySet {
+ private T[] mainArray;
+
+ public MySet() {
+ this.mainArray = (T[]) new Object[0];
+ }
+
+ public T get(int index){
+ return mainArray[index];
+ }
+
+ public void add(T valueToAdd) {
+ if(contains(valueToAdd) == false) {
+ this.mainArray = Arrays.copyOf(mainArray, mainArray.length + 1);
+ mainArray[mainArray.length - 1] = valueToAdd;
+ }
+ }
+
+ public void add(int indexValue, T valToAdd){
+ T[] result = (T[]) new Object[mainArray.length + 1];
+ int counter = indexValue + 1;
+ for (int i = 0; i < indexValue; i++) {
+ result[i] = mainArray[i];
+ }
+ result[indexValue] = valToAdd;
+ for (int i = indexValue; i < mainArray.length; i++) {
+ result[i + 1] = mainArray[indexValue];
+ }
+ mainArray = Arrays.copyOf(mainArray, mainArray.length + 1);
+ for (int i = 0; i < result.length; i++) {
+ mainArray[i] = result[i];
+ }
+ }
+
+ public void remove(T valueToRemove) {
+ boolean valueExists;
+ do {
+ for (int i = 0; i < mainArray.length; i++) {
+ if (mainArray[i] == valueToRemove) {
+ removeValueAtIndex(i);
+ }
+ }
+ valueExists = doesItReallyExist(valueToRemove);
+ } while (valueExists == true);
+ }
+
+ private void removeValueAtIndex(int indexValue) {
+ T[] result = (T[]) new Object[mainArray.length - 1];
+ int counter = indexValue + 1;
+ for (int i = 0; i < indexValue; i++) {
+ result[i] = mainArray[i];
+ }
+ for (int i = indexValue + 1; i < mainArray.length; i++) {
+ result[i] = mainArray[indexValue - 1];
+ }
+ mainArray = Arrays.copyOf(mainArray, mainArray.length - 1);
+ for (int i = 0; i < result.length; i++) {
+ mainArray[i] = result[i];
+ }
+ }
+
+ private boolean doesItReallyExist(T valueToRemove) {
+ for (T value : this.mainArray) {
+ if (value == valueToRemove) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public T[] toArray(T[] a) {
+ if (a.length < mainArray.length) {
+ return (T[]) Arrays.copyOf(mainArray, mainArray.length, a.getClass());
+ }
+ System.arraycopy(mainArray, 0, a, 0, mainArray.length);
+ if (a.length > mainArray.length) {
+ a[mainArray.length] = null;
+ }
+ return a;
+ }
+
+ public int size() {
+ return mainArray.length;
+ }
+
+ public void clear() {
+ this.mainArray = Arrays.copyOf(mainArray, 0);
+ }
+
+ public boolean isEmpty() {
+ if (size() == 0) {
+ return true;
+ }
+ return false;
+ }
+
+ public boolean contains(T valueToLookFor) {
+ boolean foundIt = false;
+ for (T value : mainArray) {
+ if (value.equals(valueToLookFor)) {
+ foundIt = true;
+ }
+ }
+ return foundIt;
+ }
+}
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..5e568ac
--- /dev/null
+++ b/src/test/java/MyArrayListTest.java
@@ -0,0 +1,83 @@
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * made by Frankie!
+ */
+public class MyArrayListTest {
+
+ @Test
+ public void addTest() {
+ MyArrayList myArrayList = new MyArrayList<>();
+ myArrayList.add(4);
+ myArrayList.add(5);
+ Integer[] actual = myArrayList.toArray(new Integer[myArrayList.size()]);
+ Integer[] expected = new Integer[]{4, 5};
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void addTest2() {
+ MyArrayList myArrayList = new MyArrayList<>();
+ myArrayList.add("Hello");
+ myArrayList.add("World");
+ String[] actual = myArrayList.toArray(new String[myArrayList.size()]);
+ String[] expected = new String[]{"Hello", "World"};
+ Assert.assertEquals(expected, actual);
+ }
+
+
+ @Test
+ public void removeTest() {
+ MyArrayList myArrayList = new MyArrayList<>();
+ myArrayList.add(4);
+ myArrayList.add(5);
+ myArrayList.remove(5);
+ Integer[] actual = myArrayList.toArray(new Integer[myArrayList.size()]);
+ Integer[] expected = new Integer[]{4};
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void clearTest() {
+ MyArrayList myArrayList = new MyArrayList<>();
+ myArrayList.add(4.0);
+ myArrayList.add(5.5);
+ myArrayList.add(7.8);
+ myArrayList.clear();
+ Assert.assertEquals(myArrayList.size(), 0);
+ Assert.assertTrue(myArrayList.isEmpty());
+ }
+
+
+ @Test
+ public void setTest() {
+ MyArrayList myArrayList = new MyArrayList<>();
+ myArrayList.add(4.0);
+ myArrayList.add(5.5);
+ myArrayList.add(7.8);
+ myArrayList.add(2, 10.4);
+ Double[] actual = myArrayList.toArray(new Double[myArrayList.size()]);
+ Double[] expected = new Double[]{4.0, 5.5, 10.4, 7.8};
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void containsTest() {
+ MyArrayList myLongList = new MyArrayList<>();
+ myLongList.add(46457L);
+ myLongList.add(57876757L);
+ Assert.assertTrue(myLongList.contains(46457L));
+ Assert.assertFalse(myLongList.contains(6757467636457L));
+ }
+
+ @Test
+ public void getTest(){
+ MyArrayList myArrayList = new MyArrayList<>();
+ myArrayList.add(4.0);
+ myArrayList.add(5.5);
+ myArrayList.add(7.8);
+ Object expected = 5.5;
+ Assert.assertEquals(expected, myArrayList.get(1));
+ }
+}
diff --git a/src/test/java/MySetTest.java b/src/test/java/MySetTest.java
new file mode 100644
index 0000000..968b5bd
--- /dev/null
+++ b/src/test/java/MySetTest.java
@@ -0,0 +1,81 @@
+import org.junit.Assert;
+import org.junit.Test;
+
+public class MySetTest {
+
+ @Test
+ public void addTest() {
+ MySet mySet = new MySet<>();
+ mySet.add(4);
+ mySet.add(5);
+ mySet.add(5);
+ mySet.add(4);
+ Integer[] actual = mySet.toArray(new Integer[mySet.size()]);
+ Integer[] expected = new Integer[]{4, 5};
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void addTest2() {
+ MySet mySet = new MySet<>();
+ mySet.add("Hello");
+ mySet.add("World");
+ String[] actual = mySet.toArray(new String[mySet.size()]);
+ String[] expected = new String[]{"Hello", "World"};
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void removeTest() {
+ MySet mySet = new MySet<>();
+ mySet.add(4);
+ mySet.add(5);
+ mySet.remove(5);
+ Integer[] actual = mySet.toArray(new Integer[mySet.size()]);
+ Integer[] expected = new Integer[]{4};
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void clearTest() {
+ MySet mySet = new MySet<>();
+ mySet.add(4.0);
+ mySet.add(5.5);
+ mySet.add(7.8);
+ mySet.clear();
+ Assert.assertEquals(mySet.size(), 0);
+ Assert.assertTrue(mySet.isEmpty());
+ }
+
+
+ @Test
+ public void setTest() {
+ MySet mySet = new MySet<>();
+ mySet.add(4.0);
+ mySet.add(5.5);
+ mySet.add(7.8);
+ mySet.add(2, 10.4);
+ Double[] actual = mySet.toArray(new Double[mySet.size()]);
+ Double[] expected = new Double[]{4.0, 5.5, 10.4, 7.8};
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void containsTest() {
+ MySet myLongList = new MySet<>();
+ myLongList.add(46457L);
+ myLongList.add(57876757L);
+ Assert.assertTrue(myLongList.contains(46457L));
+ Assert.assertFalse(myLongList.contains(6757467636457L));
+ }
+
+ @Test
+ public void getTest(){
+ MySet mySet = new MySet<>();
+ mySet.add(4.0);
+ mySet.add(5.5);
+ mySet.add(7.8);
+ Object expected = 5.5;
+ Assert.assertEquals(expected, mySet.get(1));
+ }
+}