0%

Java자주사용되는 자료구조/ ArrayList, HashTable

Java ArrayList / Hashtable

Java에서 자주 사용되는 ArrayList와 Hashtable을 정리하는 포스트

자료구조란?

  • 메모리크기는 한정적이기 때문에 유동적으로 메모리를 할당하고 비효율적인 메모리낭비를 막을 수 있게 해줍니다.

ArrayList

key와 value의 쌍 / key값은 인덱스이고, value값은 실제 값입니다. 이 때 key값은 숫자만 가능하고 기존 배열은 크기를 미리 지정하여, 메모리를 미리 할당받지만, ArrayList는 필요할 때마다 메모리를 할당받아 사용합니다. 배열의 경우 값을 삭제하여도 공간은 남아있지만, ArrayList인 경우 공간도 같이 사라지므로 메모리 낭비를 막을 수 있습니다.

선언

1
import java.util.ArrayList;
2
3
ArrayList<데이터타입> 변수이름 = new ArrayList<데이터타입>();
4
5
ex) ArrayList<String> cafe = new ArrayList<String>();

값 추가

1
ArrayList변수명.add(값);

배열과 달리 미리 메모리공간이 확보되어 있는 것이 아니라, add를 통해 값을 넣을 떄, 메모리가 할당되면서 거기에 값을 사용합니다. 인덱스를 통해 값을 넣어주는 것이 아니라, 자동으로 맨 마지막에 값을 넣어줍니다.

1
cafe.add("americano");
2
// americano를 cafe의 ArrayList에 넣어줍니다.(자동으로 제일 마지막 위치)
3
4
cafe.add(1, "latte")
5
// latte를 1번 인덱스 자리에 넣어줍니다. 1번이 비어있을 경우 2번에 넣을 수 없습니다.
1
// ArrayList의 크기를 가져올때는
2
cafe.size()
3
  
4
// index로 ArrayList의 값 가져오기&지우기
5
cafe.get(1);
6
cafe.remove(1);
7
8
// ArrayList모두 삭제
9
cafe.clear();

Hashtable

key와 value의 쌍. key값을 무조건 숫자로 할 필요 없이, 원하는 값으로 둬도 됩니다.숫자 인덱스가 없으므로, ArrayList처럼 인덱스 값으로 value를 가져올 수 없습니다.

선언

1
import java.util.Hashtable;
2
3
Hashtable<key값의 테이터타입, value값의 데이터타입> 변수이름 = new Hashtable<key값의 데이터타입, value값의 데이터타입>();
4
5
ex) Hashtable<String, String> hash = new Hashtable<String, String>();
6
7
// key값, value값 모두 String인 Hashtable

값추가

1
Hashtable변수명.put(key값, value값);
2
3
ex) hash.put("name", "mett");
4
// hash라는 hashtabledp name이라는 key값과 mett이라는 value값을 넣음
1
// Hashtable의 크기를 가져올때는 .size()를 사용
2
hash.size();
3
4
// Hashtable에서 값 가져오기&지우기
5
hash.get("name");
6
hash.remove("name");
7
8
// Hashtable 모두 삭제
9
hash.clear();

Hashtable에 들어있는 모든 값 출력

Set을 이용합니다. 여기서 Set은 Hashtable의 key값들의 집합으로 사용합니다.

1
Set<String> keys = hash.keyset();

for문을 사용하여 keys Set의 내용들을 하나씩 가져옴

1
for(String key: keys){
2
  System.out.println(key); //keys라는 Set에 들어있는 hash의 key값을 출력
3
  System.out.println(hash.get(key)) // Set에 들어있는 hash의 key값을 이용하여 hash에서 value값을 출력
4
}