프로그래밍 언어/JAVA

[JAVA] 자바 컬렉션 프레임워크 - List 편

Rateye 2021. 1. 19. 15:38
728x90
반응형

List 인터페이스 계열

  • 저장 순서를 유지하며, 데이터 중복을 허용하는 구조
  • 인덱스 번호를 사용하여 요소 관리
  • 배열과 유사한 구조
  • add() 메서드로 데이터 추가, get() 메서드로 데이터 리턴
  • 대표적인 구현체 클래스 : ArrayList, Vector, LinkedList
		List list = new ArrayList();
		
		// add() : 데이터 추가
		list.add(1);
		list.add(2);
		list.add("삼");
		list.add(4);
		list.add(5.5);
		list.add(6);
		
		System.out.println("List 객체가 비어있는가? " + list.isEmpty());
		System.out.println("List 객체에 저장된 요소 갯수 : " + list.size());
		System.out.println("List 객체의 모든 요소 출력 : " + list);
		
		// add(int index, Object o) : 해당 인덱스에 o 를 삽입(끼워넣기)
		list.add(4, 4.4); // 4번 인덱스에 4.4 삽입(5.5는 5번으로 밀림)
		System.out.println("List 객체의 모든 요소 출력 : " + list);
		
		// set(int index, Object o) : 해당 인덱스의 데이터를 o 로 교체(설정)
		list.set(4, "FOUR"); // 4번 인덱스의 데이터를 "FOUR" 로 교체
		System.out.println("List 객체의 모든 요소 출력 : " + list);
		
		list.add(4);
		System.out.println("List 객체의 모든 요소 출력 : " + list);
		
		System.out.println("정수 4의 인덱스(앞에서부터 탐색) : " + list.indexOf(4));
		System.out.println("정수 4의 인덱스(뒤에서부터 탐색) : " + list.lastIndexOf(4));
		
		// get(int index) : index 위치의 데이터 꺼내기
		System.out.println("4번 인덱스 데이터 꺼내기 : " + list.get(4));

List 객체의 모든 요소를 꺼내는 방법

// 1. 일반 for문 사용(get() 메서드와 조합)
		for(int i = 0; i < list.size(); i++) {
			System.out.println(i + "번 인덱스 요소 : " + list.get(i));
		}
		
		System.out.println("------------------------");
		
		// 2. 향상된 for문 사용
		for(Object o : list) {
			System.out.println("요소 : " + o);
		}
		
		System.out.println("------------------------");
		
		// 3. Iterator 객체 사용
		Iterator ite = list.iterator();
		while(ite.hasNext()) {
			Object o = ite.next();
			System.out.println("요소 : " + o);
		}

		System.out.println("--------------------------------");
		
		// 정수 데이터 2를 제거하는 경우
		list.remove(2); // 2번 인덱스로 취급되므로 정수 2가 삭제되지 않음
		System.out.println("List 객체의 모든 요소 출력 : " + list);
		
		list.remove((Object)2); // Object 타입으로 변환하면 객체가 지정됨
		System.out.println("List 객체의 모든 요소 출력 : " + list);

Vector 와 ArrayList

  • List 인터페이스 구현, 저장 순서 유지, 중복 허용
  • 배열 구조를 사용
  • 사용하는 메서드도 거의 일치
  • 차이점 Vector 는 멀티쓰레드 환경에서 자동으로 동기화 제공됨 즉, 멀티쓰레드를 사용하지 않는 환경에서 성능 저하 발생
		List list3 = new Vector(list);
		System.out.println("List3 객체의 모든 요소 출력 : " + list3);
		
		System.out.println("==================================");
		// List 객체에 데이터를 한꺼번에 추가하는 방법
		// => Arrays.asList() 메서드를 호출하여 배열을 생성한 뒤
		//    List 타입 객체로 변환해준다.
		List list4 = Arrays.asList(1, 10, 4, 5, 3, 8);
		System.out.println("정렬 전 : " + list4);
		
		// List 객체의 정렬과 뒤섞기
		// => Collections 클래스의 static 메서드 sort(), shuffle() 사용
		// 1. 데이터 정렬 => 주의! 동일한 타입의 데이터만 정렬 가능
		Collections.sort(list4);
		System.out.println("정렬 후 : " + list4);
		
		// 2. 데이터 뒤섞기(셔플) => 데이터 타입 무관
		Collections.shuffle(list4);
		System.out.println("셔플 후 : " + list4);
728x90
반응형