loose
이로운 개발하기
loose
전체 방문자
오늘
어제
  • 전체 (204)
    • ☕ Java (24)
    • 📘 Effective Java (9)
    • 🍃 Spring (47)
    • 📖 ORM (9)
    • ☸️ Kubernetes (13)
    • 🐧 Linux (5)
    • 🐋 Docker (5)
    • 🛠️ CI & CD (7)
    • 🕸️ Web (6)
    • 🔗 Distributed System (3)
    • 📜 Js (10)
    • 📈 Database (11)
    • 🗂️ Etc (34)
    • 🧑 Chitchat (11)
    • 📒 문학 (9)
    • 👜 개인 공부 창고 (1)

공지사항

반응형

최근 글

최근 댓글

loose

이로운 개발하기

Java 배열, List, Map, Set의 선언 방법과 차이
☕ Java

Java 배열, List, Map, Set의 선언 방법과 차이

2022. 5. 9. 17:59
반응형

배열

String[] test = {"a", "b", "c"};
int[] num = new int[3];

크기 고정

삽입/삭제 시 오래걸린다는 단점이 있다.

List

ArrayList<String> pitches = new ArrayList<String>();
ArrayList<String> pitches = new ArrayList<>(); //선호되는 방식 
//우측 제네릭 타입은 안써줘도 왼쪽 제네릭에 의해서 알 수 있으므로 더 선호되는 방식

List<Object> arrList = new ArrayList<>(); 
//객체지향적 설계를 위해 List 인터페이스를 통해 선언하는게 좋다고 함.

List는 기본적으로 데이터들이 순서대로 저장되며 중복을 허용한다.

보통 List는 ArrayList만 쓰이며 일반적인 배열 방식보다 더 권장된다. 

Map

Map<String, String> map = new HashMap<>();

Map은 순서가 보장되지 않고 Key값의 중복은 허용하지 않지만 Value값의 중복은 허용된다.

보통 Map은 HashMap으로 선언되어 사용된다. LinkedHashMap을 쓰면 순서가 보장된다.

 

Map형으로 사용할 때의 장점이 있다.

["a","a","b","b","c"]

위와 같은 배열 데이터가 주어질 때 배열 데이터의 개수를 셀 때이다.

String[] names = {"a","a","b","b","c"};

String[] tempNames = {"a", "b", "c"};
int count = 0;
int[] nameCount = new int[3];
for(int i=0; i<tempNames.length; i++){
	for(int j=0; j<names.length; j++){
    	if(tempNames[i].equals(names[j])){
    		count++;
        }
    }
    nameCount[i] = count;
    count = 0;
}

라는 코드를 짜고 frodo는 2개, neo는 2개, muzi는 1개로 숫자를 셀 수가 있다.

다만 이렇게 짜게되면 frodo를 찾을 때도 names 전부를 뒤져야하고 neo와 muzi도 마찬가지다. 

이럴 때 효율적으로 짤 수 있는 방법이 Map형을 이용하는 것이다.

 

String[] names = {"frodo","frodo","neo","neo","muzi"};

Map<String, Integer> map = new HashMap();
for(String name : names) {
	map.put(name, map.getOrDefault(name, 0) + 1);
}
System.out.println(map);
//{muzi=1, neo=2, frodo=2}

for문을 이용할 때 처럼 names를 전부 돌지 않고 5회만 돌고 끝나도록 getOrDefault를 사용해서 효율적 처리가 가능해진다.

Set

Set<String> set = new HashSet<String>(); 
set.add("a");
set.add("b");
set.add("b"); //데이터 안 들어감
set.add("c");

Set은 순서가 보장되지 않고 데이터들의 중복을 허용하지 않는다.

List와 비슷한 느낌이지만 데이터를 추가할 때 중복을 제거해주는 자료구조이다.

 

728x90

'☕ Java' 카테고리의 다른 글

Java 문자열 메소드 속도 효율 및 차이  (0) 2022.05.12
Java 8 Stream 사용법  (0) 2022.05.10
JSP와 자바빈(JavaBean)  (0) 2022.02.15
[Java vs Node.js] 무엇이 더 좋을까?  (0) 2022.01.23
기본 생성자(Default Constructor)가 필요한 이유  (0) 2021.03.30
    '☕ Java' 카테고리의 다른 글
    • Java 문자열 메소드 속도 효율 및 차이
    • Java 8 Stream 사용법
    • JSP와 자바빈(JavaBean)
    • [Java vs Node.js] 무엇이 더 좋을까?
    loose
    loose
    불만하는 사람은 90명, 해결하는 사람은 9명, 리드하는 사람은 1명 음악과 낭만을 좋아합니다.
    hELLO. 티스토리 스킨을 소개합니다.
    제일 위로

    티스토리툴바