자바에서는 배열 말고도 List, Set, Map, Stack, Queue 타입의 변수를 선언한 뒤 값을 넣어 사용할 수 있는데
이런 내용을 모아놓은 것이 자료구조다.
실제로 배열보다는 List, Set, Map을 더 많이 사용한다.
Stack과 Queue는 사용 비중이 적어 개념 정도만 알아도 된다.
List는 자바의 자료형 중 하나로 배열과 비슷하지만
List는 삽입, 삭제를 통해 크기를 자유롭게 변경 가능하고 순차 액세스만 가능하기 때문에 배열보다는 좀 느리다.
다만 배열은 크기를 변경할 수 없기 때문에 예기치 못한 상황에 대처하기가 힘든데
List는 동적으로 크기를 변경할 수 있기 때문에 그 점에서 배열보다 유리하다.
List 선언 (ArrayList, LinkedList)
ArrayList<데이터형> 리스트명= new ArrayList<데이터형>();
ArrayList와 LinkedList 두 유형으로 선언이 가능한데
ArrayList는 대량의 데이터 검색에
LinkedList는 대량의 데이터 삽입, 삭제에 유리하다.
List 추가
리스트명.add("값")
List 삭제
리스트명.remove("값")
리스트명.remove(인덱스)
List 값 변경
리스트명.set(인덱스, "바꿀 값");
List 크기 확인 리스트명.size();
List에 특정 값 들었는지 확인
리스트명.contains("값");
List가 비었는지 확인
리스트명.isEmpty();
Set을 List와 비교하면
1. Set은 중복 값을 삽입할 수 없다.
2. Set은 특정한 순서를 가지고 있지 않다.
import java.util.*;
public class SetTest {
public static void main(String[] args) {
HashSet<String> set= new HashSet<String>(); // set 선언
set.add("a");
set.add("b");
set.add("b"); // set에 중복 값 저장 안됨
set.add("c");
System.out.println("set 크기 확인: " + set.size());
Iterator<String> iter= set.iterator(); // set을 iterator에 담기
while(iter.hasNext()) // iterator에 다음 값이 있다면
{
System.out.println("iterator: " + iter.next()); // iter에서 값 꺼내기
}
}
}
set 크기 확인: 3
iterator: a
iterator: b
iterator: c
String 타입만 받는 HashSet를 선언하고 총 4개의 값을 넣었는데
set은 중복 값을 허용하지 않기 때문에 동일한 값은 하나만 들어간다.
또한 삽입 시 순서가 없기 때문에 배열이나 리스트처럼 .get(인덱스)로 값을 가져올 수 없고
Iterator를 통해 가져와야 하는데
set.iterator()으로 set 값을 iterator에 담은 후 .next로 값을 하나씩 뽑아내는 식이다.
Set 선언하기(LinkedHashSet, TreeSet으로도 가능)
HashSet<데이터타입> set명= new HashSet<데이터타입>();
Set에 값 추가
set명.add("값")
Set 크기 확인
set명.size();
Set 내용 출력할 수 있게 Iterator 안에 담기
Iterator<데이터타입> iterator명= set명.Iterator();
Iterator 안에 담은 set 출력하기
Iterator명.next();
or
while(iterator명.hasNext())
{
iterator명.next(); // 값 없을 때까지 계속 출력
}
주로 사용되는 Set은 HashSet 말고도 LinkedHashSet, TreeSet이 있는데 특징은 다음과 같다.
Linked
- 다른 Set들과 동일하게 중복은 허용하지 않으나 .add()한 순서대로 값이 저장된다.
TreeSet
- 오름차순으로 값을 가지며 다른 set보다 대량의 데이터를 빠르게 검색한다.
import java.util.HashMap;
public class MapTest {
public static void main(String[] args) {
HashMap<String, Integer> map= new HashMap<String, Integer>(); // Map 선언
map.put("AA", 450);
map.put("BB", 4800); // Map에 값 넣기
map.put("CC", 1350);
// Map의 key는 중복 불가, 동일한 key에 다른 값 넣을 경우 최근에 넣은 값 적용
System.out.println("Map value: " + map.get("BB"));
System.out.println("Map size: " + map.size());
map.replace("BB", 6000); // key 값 변경
System.out.println("BB: " + map.get("BB")); // 6000
System.out.println("Key Exist: " + map.containsKey("BB")); // 키가 있는지 확인
System.out.println("Value Exist: " + map.containsValue(450)); // Value가 있는지 확인
System.out.println("Map Empty: " + map.isEmpty()); // Map의 크기가 0인지 확인
map.remove("BB"); // key에 해당하는 값 삭제
}
}
Map value: 4800
Map size: 3
BB: 6000
Key Exist: true
Value Exist: true
Map Empty: false
Map은 선언 시 <key, value>로 값을 넣는다.
Key와 Value는 한 쌍으로 Key로 식별하고 Value에 사용할 값을 넣는다.
Map은 선언 시 HashMap, TreeMap, HashTable, LinkedHashMap으로 선언이 가능하다.
'Java' 카테고리의 다른 글
오버라이드, 오버로드 (0) | 2022.06.25 |
---|---|
extends, implements (0) | 2022.06.24 |
배열 선언, 초기화 (0) | 2022.06.24 |
static 변수, static 메서드 (0) | 2022.06.22 |
제네릭 (0) | 2022.06.13 |