Recent Posts
Recent Comments
Link
06-30 12:53
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

List 컬렉션 본문

DEV&OPS/Java

List 컬렉션

ALEPH.GEM 2022. 5. 9. 11:05

List 컬렉션

순서를 유지하며 객체를 저장하며 중복해서 저장할 수 있습니다.

 

ArrayList

인덱스 정보가 있는 List 컬렉션입니다.

인덱스가 있으므로 삽입과 삭제가 빈번한 구조에서는 바람직하지 않습니다.

이런 경우 LinkedList를 사용하는 것이 좋습니다.

java 1.5부터 제네렉을 통해 객체의 타입을 지정해줘서 불필요한 casting을 하지 않아도 됩니다.

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

public class ArrayListEx {

	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		
		list.add("1st");
		list.add("2nd");
		list.add("3rd");
		list.add(2, "index2");
		list.add("4th");
		
		int size = list.size();
		System.out.println("개수: "+size);
		System.out.println("인덱스2: "+list.get(2));
		System.out.println();
		
		for(int i=0; i < list.size(); i++ ) {
			System.out.println(i+" : "+list.get(i));
		}
		
		System.out.println();
		
		list.remove(2);
		list.remove(2);
		list.remove("1st");
		
		for(int i=0; i < list.size(); i++ ) {
			System.out.println(i+" : "+list.get(i));
		}
		
		System.out.println();
		
		List<Integer> list2 = Arrays.asList(3,6,9);
		for(int value : list2) {
			System.out.println(value);
		}
	}

}

 

Vector

ArrayList와 유사하지만 Vector는 synchronized 된 메소드로 구성되어 멀티스레드에 안전합니다.

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

class Board{
	String subject;
	String content;
	String writer;
	
	public Board(String subject, String content, String writer) {
		this.subject = subject;
		this.content = content;
		this.writer = writer;
	}
}

public class VectorEx {

	public static void main(String[] args) {
		List<Board> list = new Vector<Board>();
		
		list.add(new Board("제목0", "내용0", "글쓴이0"));
		list.add(new Board("제목1", "내용1", "글쓴이1"));
		list.add(new Board("제목2", "내용2", "글쓴이2"));
		
		list.remove(0);
		for(int i=0; i<list.size(); i++) {
			Board board = list.get(i);
			System.out.println(board.subject);
			System.out.println(board.content);
			System.out.println(board.writer);
		}
	}

}

 

LinkedList

리스트를 인덱스로 관리하지 않고 앞뒤(인접) 참조 링크로 체인 처럼 관리합니다.

그래서 중간에 삽입 삭제가 빈번히 일어나는 구조에서 효율이 좋습니다.

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

public class LinkedListEx {

	public static void main(String[] args) {
		List<String> list1 = new ArrayList<String>();
		List<String> list2 = new LinkedList<String>();
		
		long startTime;
		long endTime;
		
		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) + "나노초");
		
		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) + "나노초");
	}

}

 

 

 

 

 

 

 

 

 

 

728x90

'DEV&OPS > Java' 카테고리의 다른 글

Map 컬렉션  (0) 2022.05.09
Set 컬렉션  (0) 2022.05.09
람다식  (0) 2022.05.06
Generic  (0) 2022.04.21
Thread Pool  (0) 2022.04.20