티스토리 뷰

Language/Java

자바 자료구조

Seogineer 2022. 7. 4. 21:31

자료구조란?

  • 데이터를 추가, 삭제, 검색에 있어서 효율적으로 사용할 수 있도록 구조를 만들어서 저장해 둔 것
  • 모든 자료구조 클래스에는 래퍼런스 타입의 데이터만 저장할 수 있다.

 

java.util 패키지에 속하는 JDK 라이브러리의 자료구조 클래스들

자료구조 클래스 이름
리스트 ArrayList, LinkedList, Vector
스택 LinkedList, Stack
LinkedList
해쉬 테이블 HashMap, Hashtable
집합 HashSet

 

List

  • 데이터를 일렬로 늘어놓은 자료구조
  • 중복된 데이터를 저장하고 순서를 유지하는 선형 자료구조

선언

// ArrayList 선언
// 인덱스로 데이터 항목을 찾는 일이 많은 프로그램에서 유리함
ArrayList<String> list = new ArrayList<>();

// LinkedList 선언
// 데이터의 추가와 삭제가 빈번한 경우에 유리함
LinkedList<String> list = new LinkedList<>();

 

삽입

// 순서대로 데이터 추가
list.add("포도");
list.add("딸기");
list.add("복숭아");

// 특정 인덱스에 추가
list.add(2, "키위");

 

조회

// 인덱스에 해당하는 데이터를 조회
String str = list.get(2);

// 값에 해당하는 맨 앞 인덱스를 조회, 해당 값이 없으면 -1을 반환
int index = list.indexOf("사과");

// 값에 해당하는 맨 뒤 인덱스를 조회
int index = list.lastIndexOf("사과");

 

수정

// 인덱스 0 위치에 있는 데이터를 "오렌지"로 수정
list.set(0, "오렌지");

 

삭제

// 해당 인덱스의 데이터를 삭제하고, 뒤에 있던 데이터를 한 칸씩 앞으로 이동
list.remove(1);

 

Stack

  • 가장 나중에 넣었던 데이터를 가장 먼저 꺼내는 입출력 방식(Last-In First-Out)

선언

Stack<Integer> stack = new Stack<>();

 

삽입

stack.push(1);
stack.push(2);
stack.push(3);

 

조회

// 데이터 수 조회
stack.size();

// 가장 마지막에 삽입한 데이터를 조회
stack.peek();

// 비어있는지 확인(비어 있으면 true)
stack.empty();

// 데이터가 존재 여부 확인
stack.contains(1);

 

삭제

// 가장 마지막 데이터 반환하고 제거
stack.pop();

// stack 전체 데이터 제거
stack.clear();

 

Queue

  • 가장 처음 넣었던 데이터를 가장 먼저 꺼내는 입출력 방식(First-In First-Out)

선언

Queue<Integer> queue = new LinkedList<>();

 

삽입

// add() 또는 offer()로 데이터 삽입
queue.add(1);
queue.offer(2);
queue.offer(3);

 

조회

// 첫번째 값 조회
queue.peek();

 

삭제

// 첫번째 데이터 반환하고 제거
queue.poll();

// 첫번째 데이터 제거
queue.remove();

// 전체 데이터 제거
queue.clear();

 

Hash table

  • key를 이용해서 value를 찾는 자료구조
  • value는 중복될 수 있지만 key는 중복될 수 없다.

선언

HashMap<String, Integer> hashtable = new HashMap<>();

 

삽입

hashtable.put("해리", new Integer(95));
hashtable.put("헤르미온느", new Integer(100));
hashtable.put("론", new Integer(85));
hashtable.put("드레이코", new Integer(93));
hashtable.put("네빌", new Integer(70));

 

조회

hashtable.get("해리");

// entrySet
for(Map.Entry<String, Integer> entry : hashtable.entrySet()){
  System.out.println(entry.getKey() + ", " + entry.getValue());
}

// keySet
for (String key : hashMap.keySet()) {
  System.out.println(key + ", " + hashMap.get(key));
}

 

삭제

hashtable.remove("해리");

 

Set

  • 똑같은 값을 중복해서 저장하지 않는 자료구조
  • 저장 순서가 유지되지 않는다.

선언

HashSet<String> set = new HashSet<>();

 

삽입

set.add("자바");
set.add("카푸치노");
set.add("에스프레소");

 

조회

// 데이터 수 조회
set.size();

// 데이터 존재 여부 확인
set.contains("자바");

 

삭제

// 제거하려고 하는 데이터의 key로 데이터 제거
set.remove("자바");

// 전체 데이터 제거
set.clear();

 

 

참조

<뇌를 자극하는 Java 프로그래밍>, 한빛미디어

https://coding-factory.tistory.com/556

https://coding-factory.tistory.com/602

https://coding-factory.tistory.com/601

댓글
Total
Today
Yesterday
링크
Apple 2023 맥북 프로 14 M3, 스페이스 그레이, M3 8코어, 10코어 GPU, 512GB, 8GB, 한글