반응형
배열
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 |