자료구조
자료구조 | 2-2. Java의 List 실습
sunNprize
2022. 6. 1. 15:21
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
//add한 순서를 지켜주는 List 입니다.
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(2);
list.add(3);
//특정 인덱스에 추가
list.add(1, 2);
//특정 인덱스의 값 삭제
list.remove(2);
System.out.println("list = " + list);
//둘은 같음 ( 오토 박싱 )
System.out.println(list.contains(3));
System.out.println(list.contains(Integer.valueOf(3)));
LinkedList<MyData> myData = new LinkedList<>();
myData.add(MyData.create(1));
myData.add(MyData.create(2));
myData.add(MyData.create(3));
System.out.println(myData.contains(MyData.create(2))); // true
//하지만 해당 MyData 에 toString 과 equals 를 오버라이딩하지 않는 경우 Objects 값의 같은 값을 비교해도 같은 값을 반환하지 않음.
}
}
- LinkedList 실습.
public class MyData {
int value;
public MyData(int value) {
this.value = value;
}
static MyData create(int value) {
return new MyData(value);
}
@Override
public String toString() {
return "MyData{" + "value=" + value + '}';
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
MyData myData = (MyData) o;
return value == myData.value;
}
@Override
public int hashCode() {
return value;
}
}
- 다형성
public class Main {
public static void main(String[] args) {
List<MyData> list = new Vector<>(); // 벡터형인데, 리스트형으로도 표현 가능하다 >> 다형성
list.add(MyData.create(1));
list.add(MyData.create(2));
list.add(MyData.create(3));
System.out.println(list.size());
System.out.println(list.isEmpty());
//다형성때문에 보통 파라미터를 List 로 받는 경우가 대부분입니다.
}
}
-List 의 초기갯수??
public static void main(String[] args) {
//arraylist > 초기갯수 설정가능! > get으로 인덱스로 불러올 수 있음
//linkedlist > 인덱스로
List<MyData> list = new ArrayList<>(1);
list.add(MyData.create(1));
list.add(MyData.create(2));
list.add(MyData.create(3));
method1(list);
}
static void method1(List<MyData> list) {
System.out.println(list);
System.out.println(list.size());
System.out.println(list.isEmpty());
}
Arraylist | LinkedList | |
데이터의 검색 | 좋음 | 별로.. |
데이터의 추가, 삭제 | 별로.. | 좋음 |
- Linkedlist에서 데이터의 삽입, 삭제시에서는 ArrayList와 비교해 굉장히 빠르다.
- LinkedList는 이전 노드와 다음 노드를 참조하는 상태만 변경하면 된다. > 삽입, 삭제시 O(1) 의 시간 복잡도를 가짐
- ArrayList의 경우 삽입, 삭제 이후 다른 데이터를 복사해야 하기때문에 최악의 경우 O(N)의 성능을 낸다.
- ArrayList와 Vector의 차이????
- 멀티 스레드 환경에서는 Vector > threadSafe 하다
- 하지만 조금더 오버헤드가 발생함
- Vector 는 자체적으로 Array의 특징을 가진다. > 검색에 용이...
- Arraylist는 Vector와 다름