package ex0730;

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

/*
  ArrayList
    : List 인터페이스 구현 클래스
    : 검색시 속도가 빠름
    : 동기화 되지 않음(멀티 스레드에서 안전하지 않음)
  LinkedList
    : List 인터페이스 구현 클래스
    : 검색은 느림
    : 앞에서 추가하고 뒤에서 삭제가 빈번한 경우 빠름
    : 앞뒤 아무데서나 추가 삭제 가 빈번한 경우 
    : 중간에 삽입 삭제시에는 속도가 현저히 떨어짐. LinkedList 사용하지 말 것.
    : 동기화 되지 않음(멀티 스레드에서 안전하지 않음)
 */
public class Ex01_List {
	public static void main(String[] args) {
		List<String> list1 = new ArrayList<>();
		list1.add("자바");
		list1.add("오라클");
		list1.add("서블릿");
		System.out.println("ArrayList...");
		print(list1);
		
		List<String> list2 = new LinkedList<String>();
		list2.add("서울");
		list2.add("부산");
		list2.add("대구");
		System.out.println("\nLinkedList...");
		print(list2);
		
	}
	
	public static void print(List<String> list) {
		for(String s : list) {
			System.out.print(s +"  ");
		}
		System.out.println();
	}
}

2021.07.30 - [쌍용강북교육센터/7월] - Q 0729_Ex001~Ex002_List

 

Q 0729_Ex001~Ex002_List

package ex0729; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.ListIterator; /* - List 인터페이스 : 순서가 있다. : 배열과 유사한 구조 : 가변 길이(저장..

development-writing.tistory.com

내가 여기에서 왜 업캐스팅을 하지? 하고 오늘 수업할 때 선생님께 질문했더니, 예제를 통해 그 이유를 알려주셨다.

업캐스팅을 안했으면 ArrayList 와 LinkedList 두 개를 선언하고 print() 메소드를 정의할 때,  매개변수에 

public static void print(ArrayList<String> list1)

public static void print(LinkedList<String> list2) 이렇게 해야 되서, 업캐스팅해서 한 번만 적으면 코드가 짧아진다.


package ex0730;

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

public class Ex02_List {
	public static void main(String[] args) {
		ArrayList<String> list1 = new ArrayList<>();
		LinkedList<String> list2 = new LinkedList<>();
		
		timeTest1("LinkedList", list2);
		timeTest1("ArrayList", list1); // 앞줄과 순서를 바꿔보면 시간 차이가 보임
		System.out.println("-------------------------------");
		
		timeTest2("LinkedList", list2);
		timeTest2("ArrayList", list1);
	}
	
	public static void timeTest1(String cls, List<String> list) {
		long s, e;
		
		s = System.nanoTime();
		for(int i=0; i<20000; i++) {
			list.add( String.valueOf(i) );
				// 가장 뒤에 추가하는 경우 실행 순서에 따라 차이가 있으나 ArrayList가 빠름
		}
		e = System.nanoTime();
		
		System.out.printf("%s, 시간:%,d\n", cls, (e-s));
		
		list.clear();
	}

	public static void timeTest2(String cls, List<String> list) {
		long s, e;
		
		s = System.nanoTime();
		for(int i=0; i<20000; i++) {
			list.add( 0, String.valueOf(i) ); // 앞 추가 삭제시 LinkedList 가 빠름
		}
		e = System.nanoTime();
		
		System.out.printf("%s, 시간:%,d\n", cls, (e-s));
		
		list.clear();
	}
}

이것은 ArrayList와 LinkedList 검색 시 걸리는 시간을 비교해본 것이다. 

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

Q 0729_Ex001~Ex002_List  (0) 2021.07.30
0729_Ex06~Ex09_system : Java API  (0) 2021.07.29
0729_ConsoleEx_콘솔 입력  (0) 2021.07.29
0729_Ex01~Ex05_Generic  (0) 2021.07.29
0728_Ex11~Ex17_generic : 제네릭  (0) 2021.07.29

+ Recent posts