Java 16. Collection FrameWork

업데이트:
2 분 소요

Collection Framwork

1.자료구조

  • 대량의 데이터를 효율적으로 관리하는 메커니즘.
  • 우편번호, 학교에서 학생들을 관리하는 경우.
    - 무작위 명단 => 특정 학생을 찾는 것은 비효율적
    - 학년, 반, 출석번호를 사용한 체계적인 관리를 통해 특정 학생을 찾는 경우 효율적임.

배열

  • 배열은 크기가 고정되어 있어 데이터를 추가하거나 삭제는 불가.
    - 새로 배열을 만들고 옮겨야 함.

리스트

  • 원소가 원소를 가리켜서 관리하는 자료구조.
  • 데이터가 추가, 삭제될 때 연결하는 정보만 바꾸면 쉽게 처리됨.

스택

  • 선형구조(LIFO, Last In First Out)

큐 (파이프에 물나가는 구조)

  • 선형구조(FIFO, First In First Out)

트리

  • 부모 노드와 자식 노드간의 연결로 이루어진 자료 구조
  • 부모 노드 밑에 여러 자식 노드가 연결되고, 자식 노드 각각에 다시 자식 노드가 연결되는 형태의 자료구조.
  • 이진 검색 트리(binary search tree)
         - 부모노드에 자식노드가 두개 이하인 트리  

2.컬렉션 프레임워크

    Iterable<E> <- Collection<E> <- List<E>,Set<E>,Queue<E>,Map<K,V> 

List

  • 순서가 있는 데이터 집합.
  • 추가된 데이터의 순서도 유지되며, 데이터 중복도 허용됨.
  • 구현 클래스
    - ArrayList
    - LinkedList
    - Vector
    - Stack

List 인터페이스를 구현하는 컬렉션 클래스들

  • ArrayList : 배열기반 자료구조. 배열을 이용하여 객체를 저장함.
    - 데이터가 여러 개 쭉 있는 것을 표현한 것임.
    - 예) 데이터 목록(List) 좀 뽑아주세요 ~
  • 데이터의 저장 순서가 유지됨.
  • 동일 데이터의 중복 저장 허용됨.

3.객체 배열을 구현한 클래스 ArrayList

기존 배열

  • 선언과 사용 방식은 배열의 길이를 정하고 요소의 개수가 배열의 길이보다
    커지면 배열을 재할당하고 복사해야 했음.
  • 배열의 요소를 추가하거나 삭제하면 다른 요소들의 이동에 대한 구현해야 함.

ArrayList

  • 객체 배열을 좀더 효율적으로 관리하기 위해 자바에서 제공해 주는 클래스
  • 최적의 알고리즘으로 구현되어 있어 사용 방법만 익히면 유용하게 사용가능 하다.

주요 메서드

  • boolean add(E e)
    - 요소 하나를 배열에 추가함.
  • int size()
    - 배열에 추가된 요소 전체 개수를 반환함.
  • E get(int index)
    - 배열의 index 위치에 있는 요소 값을 반환함.
  • E remove(int index)
    - 배열의 index 위치에 있는 요소 값을 제거하고 그 값을 반홤함.
  • boolean isEmpty()
    - 배열이 비어 있는지 확인함.
  • Student
import java.util.ArrayList;

public class Student {
	
	int StudnetID;
	String studentName;
	ArrayList<Subject> subjectList;
	
	public Student(int studnetID, String studentName) {
		
		StudnetID = studnetID;
		this.studentName = studentName;
		subjectList = new ArrayList<>();
	}
	
	public void addSubject(String name,int scorePoint) {
		Subject subject =new Subject();
		subject.setName(name);
		subject.setScorePoint(scorePoint);
		subjectList.add(subject);
	}
	
	public void showInfo() {
		int total =0;
		for(Subject s: subjectList) {
			total += s.getScorePoint();
			System.out.println("학생 " +studentName+"의 " + s.getName() +"과목 성적은"
					+s.getScorePoint()+"입니다.");
			
		}
		System.out.println("학생 "+studentName+ " 의 총점은 "+total+"이다.");
	}
	
	
}
  • subject
public class Subject {
	
	private String name;
	private int scorePoint;
	
	

	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getScorePoint() {
		return scorePoint;
	}
	public void setScorePoint(int scorePoint) {
		this.scorePoint = scorePoint;
	}
	
	
}
  • Test
public class StudentTest {

	public static void main(String[] args) {
		
		Student studentLee = new Student(2022, "이순신");
		studentLee.addSubject("국어",100);
		studentLee.addSubject("수학", 90);
		
		Student studentShin = new Student(2020,"신사임당");
		studentShin.addSubject("국어", 90);
		studentShin.addSubject("수학", 99);
		studentShin.addSubject("영어", 91);
		
		studentLee.showInfo();
		System.out.println();
		studentShin.showInfo();
	}

}

댓글남기기