Java의 기본 개념 중 Generic과 이를 활용한 Linkedlist 대해 알아보자
Generic은, 데이터의 type이 컴파일 전까지 결정되지 않고, 사용자에 의해 결정되는 것을 말한다.
다음의 예시를 살펴보자.
class Tiger<T> {
T data;
public T getData() { return data; }
public void setData(T data) { this.data = data;}
}
class Tiger는 <T>
를 데이터 타입으로 가진다.
그 안의 멤버 변수도 마찬가지이다. 이 데이터타입은, main에서 지정이 된다.
public class hello {
public static void main(String[] args) {
Tiger<Integer> t1 = new Tiger<>();
t1.setData(100);
System.out.println(t1.getData());
Tiger<String> t2 = new Tiger<>();
t2.setData("호랑이");
System.out.println(t2.getData());
}
}
확인해보면 t1객체는 Integer으로, t2객체는 String으로 결정된 것을 알 수 있다. 이처럼 어떤 데이터 타입이든 사용자가 원하는대로 지정할 수 있다는 것이 generic의 특징이다.
Linked List는 Collection 프레임워크의 일부이다.
각 데이터가 각자의 주소와 포인터를 가지고 있으며, 이를 통해 서로 연결된다.
이때 Linkedlist의 데이터 타입은 generic이며 사용자의 필요에 맞게 활용할 수 있다.
Linkedlist를 통해 간단하게 CRUD를 구현해보자.
public class hello {
public static void main(String[] args) {
LinkedList<Integer> ll = new LinkedList<>();
// C(reade)RUD
// Create, add, insert, push, lastPush
ll.add(100);
System.out.println(ll.size());
for (int i = 0; i < 6; i++) {
ll.add(i*10);
}
System.out.println(ll.size());
Linkedlist를 생성하고 데이터를 추가하는 부분이다.
LinkedList<Integer> ll = new LinkedList<>();
을 통해 linkedlist를 생성하고,
ll.add(100)
을 통해 그 안에 데이터를 추가할 수 있다.
//CR(ead)UD
//1)
System.out.println(ll);
//2)
for (int i = 0; i < ll.size(); i++) {
Integer num = ll.get(i);
System.out.print(num + " ");
}
System.out.println("");
//3) foreach, 인덱스가 필요하지 않다면 활용
//foreach 문에서 사용하는 변수 : data, item, value
for (Integer data : ll) {
System.out.print(data + " ");
}
System.out.println("");
int[] ar = {1, 2, 3};
for(int i : ar) {
System.out.println(i + " ");
}
System.out.println("");
데이터를 읽어오는 3가지 방법이다.
Linkedlist 전체를 읽어오거나, for문, foreach문을 활용하여 각 데이터에 접근하여 읽어올 수 있다.
//CRU(pdate)D
ll.set(3, 777);
System.out.println(ll);
//CRUD(elete)
//delete, remove, erase
ll.remove(3);
System.out.println(ll);
}
}
데이터를 수정할 때는 .set()
, 삭제할 때는 .remove()
를 활용한다.