List 컬렉션의 특징 및 주요 메소드

특징

인덱스로 관리

중복해서 객체 저장 기능

구현 클래스

ArrayList

Vector

LinkedList

주요 메소드


 기능

메소드 

설명 

객체

추가

 

boolean add(E e) 

  주어진 객체를 맨 끝에 추가 

void add(int index, E element) 

  주어진 인덱스에 객체를 추가 

set(int index, E element) 

  주어진 인덱스에 저장된 객체를 주어진 객체로 바꿈 

객체

검색 

boolean contains(Object o)

  주어진 객체가 저장되어 있는지 여부 

E get(int index)     *

  주어진 인덱스에 저장된 객체를 리턴 

isEmpty() 

  컬렉션이 비어 있는지 조사 

int size()     *

  저장되어있는 전체 객체수를 리턴 

객체

삭제 

void clear() 

  저장된 모든 객체를 삭제 

E remove(int index) 

  주어진 인덱스에 저장된 객체를 삭제 

boolean remove(Object o)  

  주어진 객체를 삭제 



객체 추가, 찾기, 삭제

Exam

import java.util.ArrayList;
import java.util.List;

public class test {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("김나박"); //맨끝에 객체 추가
list.add("박효신"); //맨끝에 객체 추가
list.add(0, "홍길동"); //저장된 인덱스에 객체 삽입
String index1 = list.get(1); //인덱스로 객체 찾기
System.out.println("index1 = " + index1); //출력
System.out.println(); //공백

//list를 반복하며 객체를 꺼내서 출력
for (int i = 0; i < list.size(); i++) {
System.out.println("list.get(" + i + ") = " + list.get(i));
}
System.out.println(list.size()); //리스트의 사이즈
System.out.println(); //공백

list.remove(0); //인덱스로 객체삭제
list.remove("김나박"); // 객체 삭제

//list를 반복하며 객체를 꺼내서 출력
for (int i = 0; i < list.size(); i++) {
System.out.println("list.get(" + i + ") = " + list.get(i));
}
System.out.println(list.size()); //리스트의 사이즈
}
}

//결과

index1 = 김나박 list.get(0) = 홍길동 list.get(1) = 김나박 list.get(2) = 박효신 3 list.get(0) = 박효신 1



ArrayList

List<E> list = new ArrayList<E>();
 E = 타입 파라미터 

기본적으로 10개의 저장할 수 있는  내부 배열 생성

 1

 2

10 

 

 

 

 

 

 

 

 

 

 



저장 용량 (capacity)

초기 : 10

초기 용량 지정 가능            List<E> list = new ArrayList<E>(30);        30개의 배열

저장 용량을 초과한 객체들이 들어오면 자동적으로 늘어난다.

객체 제거

바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로 1씩 당겨진다.

0

  2

1번 삭제시->

0

 1

 

 

 

 

 



Exam

import java.util.ArrayList;
import java.util.List;

public class ArrayListExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();

list.add("Java");
list.add("JDBC");
list.add("Servlet/JSP");
list.add(2, "DataBase");
list.add("iBATIS");
int size = list.size();
System.out.println("총 객체수 = " + size);
System.out.println();

String skill = list.get(2);
System.out.println("2: " + skill);
System.out.println();

for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
System.out.println(i + ": " + str);
}
System.out.println();


list.remove(2); //삭제
list.remove(2); //삭제
list.remove("iBATIS"); //삭제
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
System.out.println(i + ": " + str);
}
System.out.println();
}
} 결과 총 객체수 = 5 2: DataBase 0: Java 1: JDBC 2: DataBase 3: Servlet/JSP 4: iBATIS 0: Java 1: JDBC


고정된 객체들로 구성된 List 생성

List<T> list = Arrays.asList(T... a);

Exam

import java.util.Arrays;
import java.util.List;

public class ArraysAsListExample {
public static void main(String[] args) {

List<String> list1 = Arrays.asList("김나박", "김범수", "박효신");
for (String name : list1) {
System.out.println("name = " + name);
}

List<Integer> list2 = Arrays.asList(new Integer(1), 2, 3);
for (int value : list2) {
System.out.println("value = " + value);
}
}
} 결과 name = 김나박 name = 김범수 name = 박효신 integer = 1 integer = 2 integer = 3


Vector

List<E> list = new Vector<E>();

특징

Vector는 스레드 동기화(synchronization)가 되어 있기 때문에 

복수의 스레드가 동시에 Vecctor에 접근해서 객체를 추가, 삭제하더라도 스레드에 안전(thread safe)하다.


Arrays List =    public boolean add(...) { ... }
                        vs 
Vector       =  public sysnchronized boolean add( ... ) { ... }                         Thread의 동기화불록 참고


Exam

import java.util.List;
import java.util.Vector;

public class VectorExample {
public static void main(String[] args) {
List<Board> list = new Vector<>();

list.add(new Board("제목1", "내용1", "글쓴이1"));
list.add(new Board("제목2", "내용2", "글쓴이2"));
list.add(new Board("제목3", "내용3", "글쓴이3"));
list.add(new Board("제목4", "내용4", "글쓴이4"));
list.add(new Board("제목5", "내용5", "글쓴이5"));

list.remove(2);
list.remove(3);

for (int i = 0; i < list.size(); i++) {
Board board = list.get(i);
System.out.println(board.subject + "\t" + board.content + "\t" + board.writer);
}
}
} 결과 제목1 내용1 글쓴이1 제목2 내용2 글쓴이2 제목4 내용4 글쓴이4


LinkedList

    List<E> list = new LinkedList<E>();

특징

인접 참조를 링크해서 체인처럼 관리

특정 인덱스에서 객체를 제거하거나 추가하게 되면 바로 앞뒤 링크만 변경

빈번한 객체 삭제와 삽입이 일어나는 곳에서는 ArrayList보다 좋은 성능 발휘

Exam

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class LinkedListExample {
public static void main(String[] args) {
List<String > list1 = new ArrayList<>();
List<String > list2 = new LinkedList<>();

long startTime;
long endTime;

//특정위치에 데이터를 10000번 삽입시간 차이
//ArrayList
startTime = System.nanoTime();
for (int i = 0; i < 10000; i++) {
list1.add(0, String.valueOf(i));
}
endTime = System.nanoTime();
System.out.println("ArrayList 걸린 시간: " + (endTime-startTime) + " ns");

//LinkedList
startTime = System.nanoTime();
for (int i = 0; i < 10000; i++) {
list2.add(0, String.valueOf(i));
}
endTime = System.nanoTime();
System.out.println("LinkedList 걸린 시간: " + (endTime-startTime) + " ns");
} }

결과
ArrayList 걸린 시간: 22325130 ns LinkedList 걸린 시간: 3664420 ns



+ Recent posts