39일 차 - 컬렉션 프레임워크, ArrayList, LinkedList (23.02.20)

yvonne·2023년 2월 20일
0

📂Java

목록 보기
40/51
post-thumbnail

1. ArrayList 와 LinkedList 의 장단점은?

구분순차적으로 추가/삭제중간에 추가/삭제검색
ArrayList빠름느림빠름
LinkedList느림빠름느림

📌 ArrayList: List 인터페이스의 구현 클래스로, ArrayList에 객체를 추가하면 객체가 인덱스로 관리된다.

  • Array is Immutable: 배열은 생성시에 크기가 고정되어있는 Immutable한 특징을 가지고 있음

    • 최초 메모리 할당 이후에는 변경할 수 가 없다.

    • 개별 요소는 다른 값으로 변경이 가능하나, 삭제는 불가하다.

    • 크기를 늘리거나 줄일 수 없다.

    • 변경이 필요한 경우, 새로 작성하는 것이 일반적으로 유리하다.

List<String> list = new ArrayList<String>();  //저장할 객체 타입을 타입 파라미터로 표기하고 기본 생성자를 호출하면 된다.

📌 LinkedList: ArrayList와 사용방법은 동일하지만, 내부 구조가 완전히 다르다.

  • ArrayList는 내부 배열에 객체를 저장해 인덱스로 관리하지만 LinkedList는 인접참조를 링크해서 체인처럼 관리한다.
  • 노드들이 연결되어 있는 형태로 데이터의 추가 삭제가 빠르지만 검색은 느리다. (참조하고 있는 노드만 변경하면 되기 때문)
  • LinkedList에서 특정 인덱스의 객체를 삽입,제거하면 앞 뒤 링크가 영향을 주고 나머지 링크는 변경되지 않는다.
  List<E> list = new LinkedList<E>();




💡 ArrayList 만드는 방법

  아래를 순차적으로 돌려서 나오도록 하시오.
  List<String> list = new ArrayList<>(); // 컬렉션 인스턴스 생성
   
   // 컬렉션 인스턴스에 문자열 인스턴스 저장
   list.add("Toy");
   list.add("Box");
   list.add("Robot");

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

public class collectionFramework2 {

	public static void main(String[] args) {

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

		list.add("Toy");
		list.add("Box");
		list.add("Robot");

		for (int i = 0; i < list.size(); i++) { 	// 1. for문 활용
			System.out.print(list.get(i) + '\t');

		}
		System.out.println();
		Iterator<String> itr =  list.iterator(); 	// 2. Iterator문 활용

		while (itr.hasNext()) {
			System.out.print(itr.next() + '\t');

		}
		System.out.println();

		for (String s : list)	 // 3. enhanced for문 활용 
			System.out.print(s + '\t');
		System.out.println();
	}

}

2. Scanner 클래스로 -1이 입력될 때까지 양의 정수를 입력 받아 저장(List객체)하고 검색하여 가장 큰 수를 출력하는 프로그램을 작성하라.

import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;

public class listTest {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		List<Integer> list = new ArrayList<>();
		System.out.println("양의 정수를 입력하시오. ");
		int input;
		while (true) {
			try {
				input = sc.nextInt();
			} catch (InputMismatchException e) {
				System.out.println("잘못 입력하셨어요."); // input에 숫자가 아닌 문자가 입력될 때 실행
				continue;
			}

			if (input == -1) { // -1 일 때는 실행 중지
				break;
			} else {
				if (input <= 0) { // -1은 아니지만 0 또는 음수일 때 다시 입력 받기
					System.out.println("다시 입력하시오.");
					continue;
				} else {
					list.add(input); // 양의 정수를 입력 받을 때 list에 추가
				}
			}
		}

		int max = 0; // 최대값 찾기
		for (int i = 0; i < list.size(); i++) {
			if (max < list.get(i)) {
				max = list.get(i);
			}

		}
		System.out.println(max);
	}

}
  • 출력결과
                                

3. Scanner 클래스를 사용하여 6개 학점('A', 'B', 'C', 'D', 'F')을 문자로 입력받아 ArrayList에 저장하고, ArrayList를 검색하여 학점을 점수(A=4.0, B=3.0, C=2.0, D=1.0, F=0)로 변환하여 평균을 출력하는 프로그램을 작성하라.

  • 6개의 학점을 빈 칸으로 분리 입력(A/B/C/D/F) >> A C A B F D 2.3333333333333335
    A: 4.0
    B: 3.0
    C: 2.0
    D: 1.0
    F: 0.0
profile
개발 연습장

0개의 댓글