Skip to content

Instantly share code, notes, and snippets.

@YanchevskayaAnna
Created June 9, 2016 18:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save YanchevskayaAnna/3be3f39da8d8709102b114b9211a4914 to your computer and use it in GitHub Desktop.
Save YanchevskayaAnna/3be3f39da8d8709102b114b9211a4914 to your computer and use it in GitHub Desktop.
MyArrayList_MKlimov
package src.kurs2.week2.day2HomeWork.myArrayList;
import java.util.Arrays;
import java.util.Objects;
/**
* Created by miha on 03.06.2016.
*/
public class MyArrayList {
private Object[] elements;
private int size; //Yanchevskaya A. Если делать по аналогии с ArrayList, то size не используется. Используется свойство length массива
private static final int DEFAULT_SIZE = 10;
private int counter;
public MyArrayList() { //Yanchevskaya A. конструктор переставила наверх. Сначала идут свойства класса, потом конструкторы.
elements = new Object[this.DEFAULT_SIZE];
size = DEFAULT_SIZE;
}
public Object[] getElements() {
return elements;
}
public void setElements(Object[] elements) {
this.elements = elements;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public static int getDefaultSize() {
return DEFAULT_SIZE;
}
public int getCounter() {
return counter;
}
public void setCounter(int counter) {
this.counter = counter;
}
/*********Добавление объекта в ArrayList******/
public void show() {
for (int i = 0; i < counter; i++) {
System.out.println(elements[i]);
}
}
/*********Добавление объекта в ArrayList*****/
public boolean add(Object obj) {
/* if (obj == null) return false;
else if (counter < size) {
elements[counter++] = obj;
} else {
int sizeNew = size * 2;
Object[] elementsNew = new Object[sizeNew];
System.arraycopy(elements, 0, elementsNew, 0, size);
elements = elementsNew;
elements[counter++] = obj;
size = sizeNew;
}
*/
/* Yanchevskaya A.
1. Если делать по аналогии с ArrayList, то он позволяет добавлять null. Поэтому проверку на null можно не писать
2. В любом случае выполняется действие elements[counter++] = obj; - значит его можно вынести из условия
3. Расширяем массив в двух случаях: и при добавлении объекта, и при добавлении по индексу,
поэтому делаю отдельный метод ensureCapacity() и буду его вызывать везде, где нужно расширить массив
*/
ensureCapacity();
elements[counter++] = obj;
return true;
}
public void ensureCapacity(){
/*int sizeNew = size * 2;
Object[] elementsNew = new Object[sizeNew];
System.arraycopy(elements, 0, elementsNew, 0, size);
elements = elementsNew;*/
if (counter >= size) {
elements = Arrays.copyOf(elements, size * 2); // Yanchevskaya A. Если использовать данный метод - меньше кода
size = size * 2;
}
}
/*********Добавление объекта в ArrayList по индексу******/
public boolean addIndex(int index, Object obj) { // Yanchevskaya A. Метод также должен называться add, т.е. метод add перегружен.
/* if (index <= counter && index >= 0) {
if (counter < size) {
System.arraycopy(elements, index, elements, index + 1, counter - index);
elements[index] = obj;
counter++;
return true;
} else {
int sizeNew = size * 2;
Object[] elementsNew = new Object[sizeNew];
System.arraycopy(elements, 0, elementsNew, 0, counter);
System.arraycopy(elementsNew, index, elementsNew, index + 1, counter - index);
elementsNew[index] = obj;
elements = elementsNew;
counter++;
size = sizeNew;
}
return true;
} else
return false;*/
// Yanchevskaya A.
//1. Изменила проверку. Индекс может быть равен counter
//2. После расширения массива, код одинаковый
if (index > counter || index < 0) {
return false;
}
ensureCapacity();
System.arraycopy(elements, index, elements, index + 1, counter - index);
elements[index] = obj;
counter++;
return true;
}
/*********Удаление объекта в ArrayList*******/
public boolean remove(Object obj) {
/*Yanchevskaya A. нужно также обрабатывать ситуацию, если obj = null
В методе add у тебя нельзя добавить null, поэтому удаление сейчас также правильно сделано
Если посмотреть стандартный ArrayList, то добавлять null можно и при удалении также нужно учитывать null
Женя на лекции рассказывал подробно про удаление и про момент с null*/
for (int i = 0; i < counter; i++) {
if (elements[i].equals(obj)) {
System.arraycopy(elements, i + 1, elements, i, counter - i - 1);
elements[--counter] = null;
return true;
}
}
return false;
}
/*********Удаление объекта в ArrayList по индексу******/
public boolean removeIndex(int index) { // Yanchevskaya A. Метод также должен называться remove, т.е. метод remove перегружен.
//Yanchevskaya A. В ArrayList это метод: public E remove(int index) Т.е. он возвращает значение, которое удалил
if (index < counter && index >= 0) {
int numForCopy = counter - index - 1; //какое количество элементов надо скопировать
System.arraycopy(elements, index + 1, elements, index, numForCopy);
elements[--counter] = null; //уменьшаем размер массива и забываем про последний элемент
return true;
} else return false;
}
/*************Метод получения объекта по индексу******************/
public Object get(int index) {
if (index >= 0 && index < counter) {
return elements[index];
}
return null;
}
/*********Метод Set.Заменяем объект новым объектом в позиции*******/
public boolean setIndex(int index, Object obj) { //Yanchevskaya A. В ArrayList этот метод такой: public E set(int index, E element) То есть он возвращает предыдущее значение по указанному индексу
if (index < counter && index >= 0) {
elements[index] = obj;
return true;
}
return false;
}
/*********Метод size.Показываем сколько непустых елементов*******/
public int size() {
return counter;
}
/*********Метод Clear.Очищаем массив(заполняем null*******/
public boolean clear() {
for (int i = 0; i < size; i++) { //Yanchevskaya A. Достаточно пройтись до counter
elements[i] = null;
}
return true;
}
/*********Метод Contains.Проверяет есть ли объект в листе*******/
public boolean contains(Object obj) {
for (int i = 0; i < counter; i++) {
if (obj.equals(elements[i])) //Yanchevskaya A. А если obj = null, у null нет метода equals и будет ошибка
return true;
}
return false;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment