본문 바로가기
백엔드

자바 대표적인 자료구조 정리하기

by 천검 2024. 6. 24.
반응형

자바 대표적인 자료구조에 대해 Copilot에 물어본다.

물론! 자바에서 사용되는 대표적인 자료구조를 알려드리겠습니다. 자료구조는 데이터를 효율적으로 저장하고 관리하는 방법을 의미합니다. 아래에 몇 가지 자주 사용되는 자료구조를 설명해 드리겠습니다:

1. List (리스트):
o 순서가 있는 데이터의 집합입니다.
o 데이터의 중복을 허용합니다.
o 주요 구현체로는 ArrayList와 LinkedList가 있습니다.
o ArrayList: 배열 기반으로 구현되어 빠른 접근이 가능합니다.
o LinkedList: 링크 체인 형태로 객체를 관리하며, 삽입/삭제가 빈번한 경우에 유리합니다.

2. Set (집합):
o 저장 순서를 보장하지 않고 중복을 허용하지 않는 자료구조입니다.
o 주요 구현체로는 HashSet와 TreeSet이 있습니다.
o HashSet: 해시코드를 통해 중복을 방지하며 순서가 없습니다.
o TreeSet: 정렬된 순서로 요소를 저장하며, Comparator를 사용하여 정렬됩니다.

3. Map (맵):
o Key와 Value로 데이터를 관리하는 자료구조입니다.
o Key는 중복되지 않으며, 순서를 보장하지 않습니다.
o 주요 구현체로는 HashMap이 있으며, 해시맵으로 구현됩니다.

4. 스택 (Stack):
o 가장 나중에 입력된 자료가 가장 먼저 출력되는 자료구조입니다. (Last In First Out, LIFO)
o 주로 push (삽입)과 pop (삭제) 연산을 사용합니다.

5. 큐 (Queue):
o 가장 먼저 입력된 자료가 가장 먼저 출력되는 자료구조입니다. (First In First Out, FIFO)
o 주로 offer (삽입)과 poll (삭제) 연산을 사용합니다.

6. 트리 (Tree):
o 부모 노드와 자식 노드 간의 연결로 이루어진 자료구조입니다.

자료구조는 프로그래밍에서 중요한 개념이므로, 필요에 따라 적절한 자료구조를 선택하여 사용하시면 됩니다 23

 

정리 잘했는데 주요 사용처나 예제로 다시 한번 물어본다. 

물론입니다! 자료구조의 주요 사용처와 예제를 알려드리겠습니다:

1. List (리스트):
o 주요 사용처: 데이터를 순차적으로 저장하고 관리할 때 사용됩니다. 예를 들어, 학생 목록, 할 일 목록 등이 있습니다.
o 예제:
Java
List<String> studentNames = new ArrayList<>();
studentNames.add("Alice");
studentNames.add("Bob");
studentNames.add("Charlie");
AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

2. Set (집합):
o 주요 사용처: 중복을 허용하지 않는 데이터를 저장할 때 사용됩니다. 예를 들어, 고유한 값의 집합이 필요한 경우입니다.
o 예제:
Java
Set<Integer> uniqueNumbers = new HashSet<>();
uniqueNumbers.add(10);
uniqueNumbers.add(20);
uniqueNumbers.add(10); // 중복된 값은 추가되지 않습니다.
AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

3. Map (맵):
o 주요 사용처: Key-Value 쌍으로 데이터를 관리할 때 사용됩니다. 예를 들어, 사용자 정보, 단어 빈도수 등을 저장할 수 있습니다.
o 예제:
Java
Map<String, Integer> wordFrequencies = new HashMap<>();
wordFrequencies.put("apple", 5);
wordFrequencies.put("banana", 3);
AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

4. 스택 (Stack):
o 주요 사용처: 함수 호출, 괄호 짝 맞추기, 뒤로 가기 기능 등에서 사용됩니다.
o 예제:
Java
Stack<String> browserHistory = new Stack<>();
browserHistory.push("Homepage");
browserHistory.push("Search results");
AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

5. 큐 (Queue):
o 주요 사용처: 작업 대기열, 프로세스 스케줄링, 메시지 큐 등에서 사용됩니다.
o 예제:
Java
Queue<String> messageQueue = new LinkedList<>();
messageQueue.offer("Message 1");
messageQueue.offer("Message 2");
AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

6. 트리 (Tree):
o 주요 사용처: 계층 구조를 표현하거나 정렬된 데이터를 저장할 때 사용됩니다. 예를 들어, 조직도, 파일 시스템 등이 있습니다.

자료구조는 프로그래밍에서 핵심적인 개념이며, 상황에 맞게 적절한 자료구조를 선택하여 사용하시면 됩니다!

1. 스택

스택이 익숙치가 않아 좀더 상세한 예제를 달라고 했다.

네, 맞습니다! Stack<String>은 스택을 생성하는 코드입니다. 스택은 LIFO (Last In First Out) 형태의 자료구조로, 주로 계산기, 뒤로 가기 버튼 등에서 사용됩니다. 여기 예제를 보여드리겠습니다:

Java
import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<String> browserHistory = new Stack<>();
        browserHistory.push("Homepage"); // 스택에 데이터를 삽입합니다.
        browserHistory.push("Search results");
        // 스택 = ["Homepage", "Search results"], top=1

        System.out.println(browserHistory.pop()); // 스택의 꼭대기 값을 반환하고 삭제합니다. (Search results)
        System.out.println(browserHistory.peek()); // 스택의 꼭대기 값을 반환합니다. (Homepage)
        System.out.println(browserHistory.isEmpty()); // 스택이 비어있는지 확인합니다. (false)
        System.out.println(browserHistory); // 스택 내의 모든 요소를 출력합니다. ([Homepage])
    }
}

AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

스택은 데이터를 삽입하고 삭제할 때 유용한 자료구조입니다. 필요한 경우 다양한 연산을 수행할 수 있습니다! 😊12

 

그대로 코드를 넣어서 돌려본다.

import java.util.Stack;

public class stackExample {
    public static void main(String[] args) {
        Stack<String> browserHistory = new Stack<>();
        browserHistory.push("Homepage"); // 스택에 데이터를 삽입합니다.
        browserHistory.push("Search results");
        // 스택 = ["Homepage", "Search results"], top=1

        System.out.println(browserHistory.pop()); // 스택의 꼭대기 값을 반환하고 삭제합니다. (Search results)
        System.out.println(browserHistory.peek()); // 스택의 꼭대기 값을 반환합니다. (Homepage)
        System.out.println(browserHistory.isEmpty()); // 스택이 비어있는지 확인합니다. (false)
        System.out.println(browserHistory); // 스택 내의 모든 요소를 출력합니다. ([Homepage])
    }
}
D:\develop\jdk\ojdk-17\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2024.1.1\lib\idea_rt.jar=9238:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2024.1.1\bin" -Dfile.encoding=UTF-8 -classpath D:\develop\workspace\demo\target\classes;C:\Users\AA\.m2\repository\org\springframework\boot\spring-boot-starter-web\3.2.5\spring-boot-starter-web-3.2.5.jar;C:\Users\AA\.m2\repository\org\springframework\boot\spring-boot-starter\3.2.5\spring-boot-starter-3.2.5.jar;C:\Users\AA\.m2\repository\org\springframework\boot\spring-boot\3.2.5\spring-boot-3.2.5.jar;C:\Users\AA\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\3.2.5\spring-boot-autoconfigure-3.2.5.jar;C:\Users\AA\.m2\repository\org\springframework\boot\spring-boot-starter-logging\3.2.5\spring-boot-starter-logging-3.2.5.jar;C:\Users\AA\.m2\repository\ch\qos\logback\logback-classic\1.4.14\logback-classic-1.4.14.jar;C:\Users\AA\.m2\repository\ch\qos\logback\logback-core\1.4.14\logback-core-1.4.14.jar;C:\Users\AA\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.21.1\log4j-to-slf4j-2.21.1.jar;C:\Users\AA\.m2\repository\org\apache\logging\log4j\log4j-api\2.21.1\log4j-api-2.21.1.jar;C:\Users\AA\.m2\repository\org\slf4j\jul-to-slf4j\2.0.13\jul-to-slf4j-2.0.13.jar;C:\Users\AA\.m2\repository\jakarta\annotation\jakarta.annotation-api\2.1.1\jakarta.annotation-api-2.1.1.jar;C:\Users\AA\.m2\repository\org\yaml\snakeyaml\2.2\snakeyaml-2.2.jar;C:\Users\AA\.m2\repository\org\springframework\boot\spring-boot-starter-json\3.2.5\spring-boot-starter-json-3.2.5.jar;C:\Users\AA\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.15.4\jackson-databind-2.15.4.jar;C:\Users\AA\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.15.4\jackson-annotations-2.15.4.jar;C:\Users\AA\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.15.4\jackson-core-2.15.4.jar;C:\Users\AA\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.15.4\jackson-datatype-jdk8-2.15.4.jar;C:\Users\AA\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.15.4\jackson-datatype-jsr310-2.15.4.jar;C:\Users\AA\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.15.4\jackson-module-parameter-names-2.15.4.jar;C:\Users\AA\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\3.2.5\spring-boot-starter-tomcat-3.2.5.jar;C:\Users\AA\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\10.1.20\tomcat-embed-core-10.1.20.jar;C:\Users\AA\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\10.1.20\tomcat-embed-el-10.1.20.jar;C:\Users\AA\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\10.1.20\tomcat-embed-websocket-10.1.20.jar;C:\Users\AA\.m2\repository\org\springframework\spring-web\6.1.6\spring-web-6.1.6.jar;C:\Users\AA\.m2\repository\org\springframework\spring-beans\6.1.6\spring-beans-6.1.6.jar;C:\Users\AA\.m2\repository\io\micrometer\micrometer-observation\1.12.5\micrometer-observation-1.12.5.jar;C:\Users\AA\.m2\repository\io\micrometer\micrometer-commons\1.12.5\micrometer-commons-1.12.5.jar;C:\Users\AA\.m2\repository\org\springframework\spring-webmvc\6.1.6\spring-webmvc-6.1.6.jar;C:\Users\AA\.m2\repository\org\springframework\spring-aop\6.1.6\spring-aop-6.1.6.jar;C:\Users\AA\.m2\repository\org\springframework\spring-context\6.1.6\spring-context-6.1.6.jar;C:\Users\AA\.m2\repository\org\springframework\spring-expression\6.1.6\spring-expression-6.1.6.jar;C:\Users\AA\.m2\repository\org\slf4j\slf4j-api\2.0.13\slf4j-api-2.0.13.jar;C:\Users\AA\.m2\repository\org\springframework\spring-core\6.1.6\spring-core-6.1.6.jar;C:\Users\AA\.m2\repository\org\springframework\spring-jcl\6.1.6\spring-jcl-6.1.6.jar;C:\Users\AA\.m2\repository\org\springframework\boot\spring-boot-starter-websocket\3.2.5\spring-boot-starter-websocket-3.2.5.jar;C:\Users\AA\.m2\repository\org\springframework\spring-messaging\6.1.6\spring-messaging-6.1.6.jar;C:\Users\AA\.m2\repository\org\springframework\spring-websocket\6.1.6\spring-websocket-6.1.6.jar stackExample
Search results
Homepage
false
[Homepage]

2. 큐

이제 큐도 상세한 예제를 만들어 달라고 요청한다.

물론입니다! 큐(Queue)는 데이터를 선입선출 (FIFO, First In First Out) 형식으로 관리하는 자료구조입니다. 이제 몇 가지 자바에서 큐를 사용하는 예제를 살펴보겠습니다:

1. 큐 생성 및 값 추가:
Java
import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        queue.add(1); // 큐에 값 1 추가
        queue.add(2); // 큐에 값 2 추가
        queue.offer(3); // 큐에 값 3 추가

        System.out.println("큐의 첫 번째 값: " + queue.peek()); // 1 출력
    }
}
AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

2. 큐에서 값 제거:
Java
import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        queue.offer(1);
        queue.offer(2);
        queue.offer(3);

        int removedValue = queue.poll(); // 큐에서 첫 번째 값을 반환하고 제거
        System.out.println("제거된 값: " + removedValue); // 1 출력
    }
}
AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

3. 큐의 크기 확인 및 초기화:

Java
import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {
    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>();
        queue.offer("A");
        queue.offer("B");
        queue.offer("C");

        System.out.println("큐의 크기: " + queue.size()); // 3 출력
        queue.clear(); // 큐 초기화
        System.out.println("큐가 비어있는지 확인: " + queue.isEmpty()); // true 출력
    }
}
AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.

위 예제들은 큐를 생성하고 값 추가, 제거, 크기 확인, 초기화하는 방법을 보여줍니다. 필요에 따라 큐를 활용하여 데이터를 효율적으로 관리할 수 있습니다! 😊12

 

하나만 돌려본다.

import java.util.LinkedList;
import java.util.Queue;

public class queueExample {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        queue.add(1); // 큐에 값 1 추가
        queue.add(2); // 큐에 값 2 추가
        queue.offer(3); // 큐에 값 3 추가

        System.out.println("큐의 첫 번째 값: " + queue.peek()); // 1 출력
    }
}
D:\develop\jdk\ojdk-17\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2024.1.1\lib\idea_rt.jar=11274:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2024.1.1\bin" -Dfile.encoding=UTF-8 -classpath D:\develop\workspace\demo\target\classes;C:\Users\AA\.m2\repository\org\springframework\boot\spring-boot-starter-web\3.2.5\spring-boot-starter-web-3.2.5.jar;C:\Users\AA\.m2\repository\org\springframework\boot\spring-boot-starter\3.2.5\spring-boot-starter-3.2.5.jar;C:\Users\AA\.m2\repository\org\springframework\boot\spring-boot\3.2.5\spring-boot-3.2.5.jar;C:\Users\AA\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\3.2.5\spring-boot-autoconfigure-3.2.5.jar;C:\Users\AA\.m2\repository\org\springframework\boot\spring-boot-starter-logging\3.2.5\spring-boot-starter-logging-3.2.5.jar;C:\Users\AA\.m2\repository\ch\qos\logback\logback-classic\1.4.14\logback-classic-1.4.14.jar;C:\Users\AA\.m2\repository\ch\qos\logback\logback-core\1.4.14\logback-core-1.4.14.jar;C:\Users\AA\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.21.1\log4j-to-slf4j-2.21.1.jar;C:\Users\AA\.m2\repository\org\apache\logging\log4j\log4j-api\2.21.1\log4j-api-2.21.1.jar;C:\Users\AA\.m2\repository\org\slf4j\jul-to-slf4j\2.0.13\jul-to-slf4j-2.0.13.jar;C:\Users\AA\.m2\repository\jakarta\annotation\jakarta.annotation-api\2.1.1\jakarta.annotation-api-2.1.1.jar;C:\Users\AA\.m2\repository\org\yaml\snakeyaml\2.2\snakeyaml-2.2.jar;C:\Users\AA\.m2\repository\org\springframework\boot\spring-boot-starter-json\3.2.5\spring-boot-starter-json-3.2.5.jar;C:\Users\AA\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.15.4\jackson-databind-2.15.4.jar;C:\Users\AA\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.15.4\jackson-annotations-2.15.4.jar;C:\Users\AA\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.15.4\jackson-core-2.15.4.jar;C:\Users\AA\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.15.4\jackson-datatype-jdk8-2.15.4.jar;C:\Users\AA\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.15.4\jackson-datatype-jsr310-2.15.4.jar;C:\Users\AA\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.15.4\jackson-module-parameter-names-2.15.4.jar;C:\Users\AA\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\3.2.5\spring-boot-starter-tomcat-3.2.5.jar;C:\Users\AA\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\10.1.20\tomcat-embed-core-10.1.20.jar;C:\Users\AA\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\10.1.20\tomcat-embed-el-10.1.20.jar;C:\Users\AA\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\10.1.20\tomcat-embed-websocket-10.1.20.jar;C:\Users\AA\.m2\repository\org\springframework\spring-web\6.1.6\spring-web-6.1.6.jar;C:\Users\AA\.m2\repository\org\springframework\spring-beans\6.1.6\spring-beans-6.1.6.jar;C:\Users\AA\.m2\repository\io\micrometer\micrometer-observation\1.12.5\micrometer-observation-1.12.5.jar;C:\Users\AA\.m2\repository\io\micrometer\micrometer-commons\1.12.5\micrometer-commons-1.12.5.jar;C:\Users\AA\.m2\repository\org\springframework\spring-webmvc\6.1.6\spring-webmvc-6.1.6.jar;C:\Users\AA\.m2\repository\org\springframework\spring-aop\6.1.6\spring-aop-6.1.6.jar;C:\Users\AA\.m2\repository\org\springframework\spring-context\6.1.6\spring-context-6.1.6.jar;C:\Users\AA\.m2\repository\org\springframework\spring-expression\6.1.6\spring-expression-6.1.6.jar;C:\Users\AA\.m2\repository\org\slf4j\slf4j-api\2.0.13\slf4j-api-2.0.13.jar;C:\Users\AA\.m2\repository\org\springframework\spring-core\6.1.6\spring-core-6.1.6.jar;C:\Users\AA\.m2\repository\org\springframework\spring-jcl\6.1.6\spring-jcl-6.1.6.jar;C:\Users\AA\.m2\repository\org\springframework\boot\spring-boot-starter-websocket\3.2.5\spring-boot-starter-websocket-3.2.5.jar;C:\Users\AA\.m2\repository\org\springframework\spring-messaging\6.1.6\spring-messaging-6.1.6.jar;C:\Users\AA\.m2\repository\org\springframework\spring-websocket\6.1.6\spring-websocket-6.1.6.jar queueExample
큐의 첫 번째 값: 1

 

반응형

댓글