Java

Java collections (ArrayList, HashSet) + HashMap

최종군 2024. 7. 15. 18:46

 

 

자바 컬렉션으로는 크게 자주 사용하는 예로 

3가지가 있다 

 

첫 번째는 ArrayList 

 

순서가 있고 중복이 허용이 된다는 특징을 가지고 있다 

그리고 데이터 조회가 간편하다는 장점을 가지고 있다 

ArrayList list = new ArrayList(2);

 

ArrayList는 <제네릭> 매개변수타입을 쓰는 것이 일반적이지만 

위에 코드처럼 제네릭 선언을 안하는 경우가 있다 

제네릭을 선언을 안하게 된다면 해당 ArrayList는 Object 타입이 된다.

 

list2.add(new Music("하입보이", "뉴진스"));
list2.add(new Music("Believer", "Imagine Dragons"));
list2.add("끝");

 

위 처럼 Music 객체 타입도 선언이 가능하고 

밑에 처럼 String 타입도 ArrayList에 추가할 수 있다. 

 

 

ArrayList<Music> list2 = new ArrayList(5); // 5 크기를 지정

 

--- > 제네릭 매개변수를 Music 객체로 형을 제한했다 

매개변수 타입 Music으로 제한을 하게 된다면 

 

list2.add(new Music("하입보이", "뉴진스"));
list2.add(new Music("Believer", "Imagine Dragons"));
list2.add("끝");     컴파일 오류가 발생하게 된다

 

String 타입은 접근이 불가능해진다. 

 

 

ArrayList 접근하는 방법  

 

for (int i=0; i<mList.size(); i++) {
System.out.println( mList.get(i) );
}

for문을 통해서 get()메소드를 i를 통해 인덱스에 직접 접근을 하여 

출력을 한다. 

 

 

 

System.out.println("------for each-----");
for(Music m : mList) {
System.out.println(m);
// 따로 get 메서드가 필요없다

향상된 for문 : for문 보다 좀 더 가독성이 좋게 출력이 가능하다. 

 

.clear(); 메소드 mList에 추가한 데이터를 모두 지우는데 사용이 된다 

 

mList.remove(1); ArrayList는 인덱스를 통해서 접근을 한다. 

인덱스에 해당하는 데이터를 삭제해준 후 true, false를 반환해준다. 

 

.isEmpty(); 

List 안에 데이터가 있는 지 없는 지 확인을 해준다 

해당 list안에 데이터가 없으면 true를 데이터가 존재한다면 false를 리턴해준다. 

 

 


 

Set  특징 : 순서가 없고 중복도 허용되지 않는다. 

Set 중복 체크 : equals(), hashCode()  통해 중복데이터가 체크된다. 

 

 

HashSet<Student> hSet = new HashSet<>();

 

HashSet을 <Student>타입으로 타입매개변수를 초기화를 했다. 

hSet.add(new Student("기다운", 70));
hSet.add(new Student("종군님", 40));
hSet.add(new Student("기다운", 100));

 

Set의 특징은 중복을 허용하지않는다와 순서가 없다. 

 

[기다운 : 70, 종군님 : 40, 기다운 : 100]

 

위처럼 작성을 하게 된다면 중복이 없어서 모두가 출력이 된다 

하지만 

 

 

1.hSet.add(new Student("기다운", 70));
2.hSet.add(new Student("종군님", 40));
3.hSet.add(new Student("기다운", 70));

 

위  코드처럼 

3번 점수를 100점에서 70점으로 초기화를 했다

 

그렇게 된 이후에 호출을 해보면 

 

[기다운 : 70, 종군님 : 40]으로 출력이 되게된다. 

* 여기서 다시 한 번 Set 특징을 살펴보면 중복을 허용하지 않는다가 

생각이 날 것이다

 

Set 호출하기 

Set은 ArrayList와 다르게 get을 통해서 

호출하지 않는다. 왜냐면 Set은 순서가 없기 때문이다 

 

 

Iterator<Student>it = hSet.iterator();

hasNext() - 해당 컬렉션즈에 데이터가 있는지 없는지 확인 true, false를 통해서 가능하다 

next(); 데이터를 조회하는 용도로 사용이 된다 

 

 

System.out.println("-Iterator--");

while(it.hasNext()) {
System.out.println(it.next());
}

 

위와 같이 반복문을 통해서 접근이 가능하다 

 

 


 

다음은 HashMap<String, Snack>hMap = new HashMap<>();

 

hMap의 키는 String 타입이고 Value 값은 Snack 객체를 주었다. 

 

hMap.put("바나나킥", new Snack("바나나맛", 1024));

 

HashMap은 get을 통해서 value 값에 접근을 할 수 있다

ArrayList와는 다르게 "인덱스"를 통해서 접근을 하는 게 아닌 

get() 에는 key값을 통해서 value에 접근을 할수가 있다. 

 

키 목록 조회 :

Set<String> keyList = hMap.keySet(); 

keySet은 해당 Map에서 가지고 있는 키들을 모두 모아준다 

 

for(String key : keyList){

System.out.println(key + " : " + hMap.get(key));

}

 

 

 

 

 

'Java' 카테고리의 다른 글

Servlet Filter  (0) 2024.10.16
spring interceptor  (0) 2024.10.15
자바 헷갈리는 내용 정리  (1) 2024.07.15
내가 잘 모르는 부분들 내용정리 JAVA  (0) 2024.07.15
자바 예외처리 ~ IO 입출력 내용 정리  (0) 2024.07.14