내일배움캠프/TIL

[JAVA]_다양한 자료구조

cork-7 2025. 1. 20. 22:01

JAVA 프로그래밍에 여러 개의 변수르 같은 곳에 저장하고 싶을 때 기본적으로 배열이라는 변수에 저장을 한다.

 

배열[Array] -  <사용시 import java.util.Arrays; 를 작성해야한다>

선언법

일반적인 선언 2번째 선언방식
int[] intArray;
long[] longArray;
double[] doubleArray;
char[] charArray;
String[] stringArray;
int intArray[]; // 정수 배열
long longArray[];
double doubleArray[]; // 실수 배열
char charArray[]; // 문자 배열
String stringArray[]; // 문자열 배열

 

순회 - 배열안에 담긴 변수들을 하나씩 꺼내는 조회하는 것

단건 조회
모든 값 조회

 

얕은 복사 깊은 복사
실제 값이 아닌 주소 값만 복사
[비유적으로 pc와 핸드폰의 카톡에서 동시에 사용해도 계정은 하나인것과 같다]
실제 값을 가진 배열의 기본형 값을 꺼내 복사
nt[] a = { 1, 2, 3, 4 }; 
int[] b = a; // 얕은 복사

b[0] = 3; // b 배열의 0번째 순번값을 3으로 수정했습니다. (1 -> 3) System.out.println(a[0]); 
// 출력 3 <- a 배열의 0번째 순번값도 3으로 조회됩니다. 
int[] a = { 1, 2, 3, 4 }; 
int[] b = new int[a.length]; 

for (int i = 0; i < a.length; i++) { 
b[i] = a[i]; // 깊은 복사 
}
  // 깊은 복사 메서드
// 1. clone() 메서드
int[] a = { 1, 2, 3, 4 };
int[] b = a.clone(); // 가장 간단한 방법입니다.
// 하지만, clone() 메서드는 2차원이상 배열에서는 얕은 복사로 동작합니다!!

import java.util.Arrays;

public class Main {
   public static void main(String[] args) {
       // 2. Arrays.copyOf() 메서드
       int[] a = { 1, 2, 3, 4 };
       int[] b = Arrays.copyOf(a, a.length);
// 배열과 함께 length값도 같이 넣어줍니다. }
}

 

String 배열

  • String 배열 선언과 생성
// String 배열을 아래와 같이 선언과 생성할 수 있습니다.
String[] stringArray = new String[3];
  • String 배열의 초기화
// 선언 후 하나씩 초기화 할 수 있습니다.
String[] stringArray = new String[3];
stringArray[0] = "val1";
stringArray[1] = "val2";
stringArray[2] = "val3";

// 선언과 동시에 초기화 할 수 있습니다.
String[] stringArray1 = new String[]{"val1", "val2", "val3"};
String[] stringArray2 = {"val1", "val2", "val3"};

 

  • String 기능 활용
메서드
응답값 타입
설명
length()
int
문자열의 길이를 반환한다.
charAt(int index)
char
문자열에서 해당 index의 문자를 반환한다.
substring(int from, int to)
String
문자열에서 해당 범위(from~to)에 있는 문자열을 반환한다. (to는 범위에 포함되지 않음)
equals(String str)
boolean
문자열의 내용이 같은지 확인한다. 같으면 결과는 true, 다르면 false가 된다.
toCharArray()
char[]
문자열을 문자배열(char[])로 변환해서 반환한다.
new String(char[] charArr)
String
문자배열(char[]) 을 받아서 String으로 복사해서 반환한다.

 

 

 

  • ArrayList
ArrayList 배열(Array)처럼 크기가 정해져 있지 않고 필요할 때마다 크기가 점점 더 늘어납니다.
선언 ArrayList<Integer> intList 형태로 선언합니다.
생성 new ArrayList<Integer>(); 형태로 생성합니다.
초기화 사이즈를 지정하는 것이 없기 때문에 초기화가 필요 없습니다.
값 추가 intList.add({추가할 값}) 형태로 값을 추가합니다.
값 수정 intList.set({수정할 순번}, {수정할 값}) 형태로 값을 수정합니다.
값 삭제 intList.remove({삭제할 순번}) 형태로 값을 삭제합니다.
전체 출력 intList.toString() 형태로 전체 값을 대괄호[]로 묶어서 출력합니다.
전체 제거 intList.clear() 형태로 전체 값을 삭제합니다.

 

  • LinkedList
LinkedList 기본적인 기능은 ArrayList 와 동일하지만 LinkedList는 값을 나누어 담기 때문에 모든 값을 조회하는 속도가 느립니다. 대신에, 값을 중간에 추가하거나 삭제할 때는 속도가 빠릅니다.
선언 LinkedList<Integer> linkedList 형태로 선언합니다.
생성 new LinkedList<Integer>(); 형태로 생성합니다.
초기화 사이즈를 지정하는 것이 없기 때문에 초기화가 필요 없습니다.
값 추가 linkedList.add({추가할 값}) 형태로 값을 추가합니다.
값 중간에 추가 linkedList.add({추가할 순번}, {추가할 값}) 형태로 값을 중간에 추가합니다.
값 수정 linkedList.set({수정할 순번}, {수정할 값}) 형태로 값을 수정합니다.
값 삭제 linkedList.remove({삭제할 순번}) 형태로 값을 삭제합니다.
전체 출력 linkedList.toString() 형태로 전체 값을 대괄호[]로 묶어서 출력합니다.
전체 제거 linkedList.clear() 형태로 전체 값을 삭제합니다.

 

  • Stack
Stack 나중에 들어간 것이 가장 먼저 나온다(Last-In-First-out) 
선언 Stack<Integer> intStack 형태로 선언합니다.
생성 new Stack<Integer>(); 형태로 생성합니다.
추가 intStack.push({추가할 값}) 형태로 값을 추가합니다.
조회 intStack.peek() 형태로 맨 위값을 조회합니다.
꺼내기 intStack.pop() 형태로 맨 위값을 꺼냅니다. (꺼내고 나면 삭제됨)

 

  • Queue
Queue First In First Out : 먼저 들어간 순서대로 값을 조회할 수 있다.
선언 Queue<Integer> intQueue 형태로 선언합니다.
생성 new LinkedList<Integer>(); 형태로 생성합니다.
추가 intQueue.add({추가할 값}) 형태로 값을 맨 위에 추가합니다.
조회 intQueue.peek() 형태로 맨 아래 값을 조회합니다.
꺼내기 intQueue.poll() 형태로 맨 아래 값을 꺼냅니다. (꺼내고 나면 삭제됨)

 

  • Set
Set 순서가 보장되지 않는 대신 중복을 허용하지 않도록 유지할 수 있습니다 
선언 Set<Integer> intSet 형태로 선언합니다.
생성 new HashSet<Integer>(); 형태로 생성합니다.
추가 intSet.add({추가할 값}) 형태로 값을 맨 위에 추가합니다.
조회 intSet.remove({삭제할 값}) 형태로 삭제할 값을 직접 지정합니다.
포함 확인 intSet.contains({포함 확인 할 값}) 형태로 해당 값이 포함되어있는지 boolean 값으로 응답받습니다.

- Set은 생성자가 없는 인터페이스라 바로 생성 불가

- 생성자가 존재하는 HashSet으로 바로 생성가능

  • Map
Map key-value 형태로 데이터를 저장하기 때문에 기존에 순번으로만 조회하던 방식에서, key 값을 기준으로 value를 조회할 수 있습니다.
선언 Map<String, Integer> intMap 형태로 Key타입과 Value타입을 지정해서 선언합니다.
생성 new HashMap<>(); 형태로 생성합니다.
추가 intMap.put({추가할 Key값},{추가할 Value값}) 형태로 Key에 Value값을 추가합니다.
조회 intMap.get({조회할 Key값}) 형태로 Key에 있는 Value값을 조회합니다.
전체 key 조회 intMap.keySet() 형태로 전체 key 값들을 조회합니다.
전체 value 조회 intMap.values() 형태로 전체 value 값들을 조회합니다.
삭제 intMap.remove({삭제할 Key값}) 형태로 Key에 있는 Value값을 삭제합니다.

- 중복을 허용하지 않는다

🔎 length vs length() vs size() - 길이값 가져오기
1. length
  • arrays(int[], double[], String[])
  • length는 배열의 길이를 조회해 줍니다.
2. length()
  • String related Object(String, StringBuilder etc)
  • length()는 문자열의 길이를 조회해 줍니다. (ex. “ABCD”.length() == 4)
3. size()
  • Collection Object(ArrayList, Set etc)
  • size()는 컬렉션 타입 목록의 길이를 조회해 줍니다.