2024.06.28.금.TIL 내일배움캠프 52일차 <자료구조>

김기남·2024년 6월 28일
0

안녕하세요, 오늘은 알고리즘 풀이 중에 불현듯 개념이 희미해진 기초를 다잡기 위해, 자바 기초 자료구조에 대해 캠프에서 제공해주는 내용으로 다시 정리해 보았습니다.

자료구조

컴퓨터의 한정된 자원으로 최고의 성능을 내기 위해서는 활용하는 데이터가 잘 구조화 되어 있어야겠죠🙂
여러 유형 중 Java에서 빈번하게 쓰이는 세 가지를 예시와 함께 알아보겠습니다.

배열(Array)

배열은 동일한 자료형의 데이터를 여러 개 담을 수 있는 공간이며, 복수의 데이터를 다룰 때에 사용되는 아주 기본적인 형태입니다. 배열을 다룰 때에는 몇 가지 주의할 점이 있습니다. 예시를 통해 확인해볼까요? 😊

public class ArrayEx01 {

    public static void main(String[] args) {

        int[] price = { 12000, 35000, 6000, 8400, 430000 };
//        int[] price = new int[]{ 12000, 35000, 6000, 8400, 430000 };

        String[] mbti = { "INFP", "ENFP", "ISTJ", "ESTJ" };
//        String[] mbti = new int[]{ "INFP", "ENFP", "ISTJ", "ESTJ" };


        System.out.println(price);
        System.out.println(mbti);

        System.out.println(price.length);
        System.out.println(mbti.length);


        for (int i = 0; i < mbti.length; i++) {

            System.out.println(mbti[i]);
        }
    }
}

  • 최초 선언 시, 자료형 뒤에 [] 를 붙여주면 해당 자료형의 배열을 선언할 수 있습니다.
  • {} 로 감싼 값들을 배열로 선언된 변수에 대입할 수 있습니다.
  • 배열의 요소는 순서를 의미하는 인덱스값을 가지며 0 부터 순서를 셉니다.
  • 전체 배열의 크기, 즉 요소의 갯수는 length 함수를 사용하여 확인할 수 있습니다.
  • 특정 인덱스(순서)의 값을 가져오기 위해서는 배열 변수 뒤에 [인덱스] 를 작성하면 됩니다.
  • 일반적으로 배열의 모든 요소에 대한 반복문을 적용할 때에는 for (int i = 0; i < 배열변수.length; i++) 와 같이 조건을 설정합니다. 인덱스가 0부터 시작한다는 점을 활용한 것이죠
  • System.out.println(배열변수) 와 같이 직접 배열 변수를 함수에게 전달하면 우리가 예상한 것과는 전혀 다른 내용이 출력됩니다. [I@1b0375b3, [Ljava.lang.String;@2f7c7260 와 같이 자료형과 뭔지 모를 문자들의 조합이 출력되죠. 이는 기본형 외의 자료형을 담는 변수가 값 자체가 아닌 주소를 가진다는 것을 드러냅니다.
  • 배열변수[인덱스] = 값 의 형태로 기존 요소의 값을 덮어쓸 수 있습니다.

리스트(List)

리스트는 순서를 구분하며 값의 중복을 허용하는 데이터의 모음입니다. Java 에서는 List의 형태를 활용한 몇 가지의 구현체(Vector, ArrayList, LinkedList)가 있으며, 현재 가장 활용이 많이 되는 ArrayList를 살펴보겠습니다.

import java.util.ArrayList;

public class ArrayList01 {

    public static void main(String[] args) {

        ArrayList list1 = new ArrayList(5);
        list1.add(100);
        list1.add("INFP");

        for (int i = 0; i < list1.size(); i++) {

            System.out.println(list1.get(i));
        }



        ArrayList<Integer> list2 = new ArrayList<Integer>(5);
        list2.add(100);
//        list2.add("INFP");

        for (int i = 0; i < list2.size(); i++) {

            System.out.println(list2.get(i));
        }

    }
}
  • ArrayList는 기본적으로 Object, 즉 모든 Java 객체를 담을 수 있습니다. 하지만 시스템 안정성을 위해 요소의 자료형을 제한해야 할 경우
  • add() 함수를 통해 요소를 추가할 수 있습니다.
  • ArrayList 크기, 요소의 갯수를 확인하기 위해서는 size() 함수를 사용합니다.
  • 특정 인덱스의 값을 사용하기 위해서는 ArrayList변수.get(인덱스) 와 같이 작성합니다.

맵(Map)

맵은 키와 값을 쌍으로 하는 데이터의 모음입니다. 순서를 따지지 않는다는 점이 리스트와 구분됩니다. 또한 키의 경우 중복을 허용하지 않지만 값은 중복을 허용한다는 특징을 가지고 있습니다. 리스트와 마찬가지로 Java에서 제공하는 구현체가 있으며, 이 중 활용도가 높은 HashMap에 대하여 살펴보겠습니다.

import java.util.HashMap;

public class HashMap01 {

    public static void main(String[] args) {

        HashMap map01 = new HashMap();
        map01.put("age", 31);
        map01.put("mbti", "INFP");

        System.out.println(map01.get("age"));


        HashMap<String, String> map02 = new HashMap<String, String>();
//        map02.put("age", 31);
        map02.put("mbti", "INFP");

        System.out.println(map02.get("mbti"));
    }
}
  • HashMap의 요소는 키와 값으로 구성되며, Spring 개발 시 활용되는 JSON 형식의 데이터로 변환 시 빈번하게 사용됩니다.
  • 데이터의 입력은 HashMap변수.put(키) = 값 과 같으며, 값을 불러오기 위해서는 HashMap변수.get(키) 와 같이 작성하면 됩니다.
  • ArrayList와 같이 HashMap<String, String> 와 같은 형식으로 변수를 선언하면 입력되는 데이터의 자료형을 제한할 수 있습니다.
  • 하나의 HashMap에서 키는 중복될 수 없으나 값은 중복될 수 있습니다.
profile
새로운 시작~!

0개의 댓글