Java

List, Set, Map

hs_developer 2022. 6. 24. 21:14

자바에서는 배열 말고도 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