ArrayList
- 연속적인 데이터의 리스트 (데이터는 연속적으로 들어 있어야 하고, 중간에 빈 공간이 있어서는 안됨)
- 내부적으로 Object[] 배열을 이용하여 요소를 저장
- index를 사용하여 요소에 빠르게 접근
- 일반적인 배열과는 달리, 가변적으로 공간을 늘이거나 줄인다.
- 데이터가 중간에 삽입할 경우, 빈 공간이 생기지 않도록 요소들의 위치를 재정렬 해야함.
- read가 빠르지만, insert/delete가 느리다. (삽입, 삭제가 적고, 작은 데이터를 다룰 때 사용)
코드
(1) List.java : List라면 갖춰야 할 ADT(객체에 대한 설계도)를 Interface로 구현. (Java에서 Interface를 ADT로 사용함)
(2) ArrayList.java : 배열을 이용한 ArrayList 구현.
(1) List.java
/* Arraylist의 ADT */
import java.util.Iterator;
public interface List<E> extends Iterable<E> {
void add(E item);
E get(int index);
void remove(int index);
int size();
boolean isEmpty();
void clear();
}
(2) ArrayList.java
/* ArrayList.java */
import java.util.Iterator;
import java.util.Arrays;
@SuppressWarnings("unchecked")
public class ArrayList<E> implements List<E>, Iterable<E> {
private E[] elements;
private int index = 0;
public ArrayList() {
this.elements = (E[]) new Object[10];
}
public void add(E item) {
this.elements[this.index++] = item;
}
public E get(int index) {
return this.elements[index];
}
public void remove(int index) {
for (int i = index; i < this.index - 1; i++) {
this.elements[i] = this.elements[i+1];
this.elements[i+1] = null;
}
this.index--;
}
public int size() {
return this.index;
}
public boolean isEmpty() {
return this.index == 0 ? true : false;
}
public void clear() {
for (int i = 0; i < this.elements.length; i++) {
this.elements[i] = null;
}
this.index = 0;
// Arrays.fill(this.elements, null);
// 위 for문과 같은 결과 도출. fill()은 위의 for문처럼 똑같이 동작하는 메소드.
}
public Iterator<E> iterator() {
return Arrays.stream(this.elements).iterator(); // java의 배열을 iterator로 만듬.
}
}
class Test {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("Hello");
list.add("World");
list.add("!!!");
list.forEach(System.out::println);
}
}
실행 결과
Hello
World
!!!
null
null
null
null
null
null
null
// forEach문으로 요소 끝까지 탐색해서 null도 print됨.
2024.09.02 - [자료구조] - [자료구조] 스택(Stack) with Java
[자료구조] 스택(Stack) with Java
Stack(스택) 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 및 Last in First Out(LIFO) 구조의 자료구조. Java에서 자료구조(알고리즘)를 만들 때, 해당 객체에 대한 설계도(ADT, Abstract Data Type)를 Interface
lightningtech.tistory.com
출처: https://github.com/gikpreet/class-programming_with_java/tree/master
GitHub - gikpreet/class-programming_with_java
Contribute to gikpreet/class-programming_with_java development by creating an account on GitHub.
github.com
'자료구조' 카테고리의 다른 글
[자료구조] Queue(큐) with Java (1) | 2024.09.07 |
---|---|
[자료구조] LinkedList (0) | 2024.09.04 |
[자료구조] 스택(Stack) with Java (0) | 2024.09.02 |
[자료구조] 삽입 정렬 (Insertion Sort) (0) | 2024.08.27 |
[자료구조] 선택 정렬 (Selection Sort) (0) | 2024.08.27 |