본문 바로가기
Java의 정석/컬렉션 프레임워크

Map (링크드 해시맵) 예제 02

by Hwanii_ 2023. 8. 26.
728x90
package practice;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class Hashmap {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		while(true) {
			System.out.print("텍스트 입력 >> ");

			String text = sc.nextLine();

			if(text.equals("종료") || text.equals("end") || text.equals("END")) {
				System.out.println("시스템을 종료 합니다.");
				break;
			}

			String[] textArr = text.split(" ");

			for(int i = 0; i < textArr.length; i++) {
				System.out.println("log11111 : " + textArr[i]);
			}

			Map<String, Integer> map = new LinkedHashMap<String, Integer>();

			for(String data : textArr) {	//	사용자가 입력한 문자열을 담은 배열을 차례대로 data 라는 변수에 저장.
				data = data.toLowerCase();

				if(map.containsKey(data)) {	//	키에 어떤 문자열이 포함 되어 있으면, 
					map.put(data, map.get(data) + 1);	//	그 키에 값을 저장하고 + 1
				}
				else {	//	키에 어떤 문자열이 포함 되어 있지 않으면,
					map.put(data, 1);	//	그 키에 값을 저장.
				}
			}

			System.out.println("단어 빈도 : ");

			for(String data : map.keySet()) {	//	키를 차례대로 data 라는 변수에 저장.
				
				System.out.println("log22222 : " + map.keySet());
				
				System.out.println(data + " : " + map.get(data) + " 회");
			}
			
			List<String> kdatas = new ArrayList<String>(map.keySet());	//	map에 있는 key를 모두 ArrayList 에 복사.
			for(int i = 0; i < kdatas.size(); i++) {
				String key = kdatas.get(i);
				
				System.out.println("log33333 : " + map.keySet());
				
				System.out.println("log44444 : " + kdatas);
				
				System.out.println(key + " : " + map.get(key) + " 회");
			}

		}
		sc.close();

	}	//	main()

}	//	Hashmap

 

글자를 입력 받으면,

글자를 키로 저장하고, 해당 키의 값으로 입력한 글자의 입력 횟수를,

키 - 값 한쌍의 형태로 저장하는 예시.

 

1.

사용자가 입력한 문자를 띄워쓰기 1칸을 기준으로 잘라서, textArr 변수에 저장 하기.

 

2.

로그 확인.

 

 

3.

LinkedHashMap

해시맵의 기능을 갖고 있으면서, 데이터의 삽입 순서를 유지 하는 특성.

 

일반적인 HashMap은 요소 (데이터)의 순서를 보장 하지 않지만,

LinkedHashMap은 요소 (데이터)의 삽입 순서를 기억 한다.

 

LinkedHashMap은 HashMap의,

HashTable 과, Linked List를 조합 하여 구현 된다.

키-값 쌍을 순서대로 접근 할 수 있고,

검색 및 조회 작업에서도 일반적인 HashMap과 비슷한 성능을 보인다.

 

4.

맵의 키에 특정한 문자가 들어있지 않으면 >>  else 문

 

맵의 키에 특정한 문자가 이미 들어 있으면 >> if 문

 

5.

 

 

for-each 문으로 쉽게 표현 할 수 있다.

 

 

keySet() 메서드는 링크드해시맵이 들고 있는 모든 키를 보여준다.

 

그런데 향상 for문을 이용 하면,

루프 1회차 기준으로, 첫번째 키 부터 차례대로 data 라는 변수에 덮어 씌워 진다.

 

map.get(key) 메서드는, 해당하는 키에 값을 보여준다.

 

6.

for-each 문을 사용 하지 않으면, 코드가 살짝 길어진다.

 

 

링크드해시맵이 가지고 있는 모든 키를 차례대로 배열리스트에 복사 한다.

 

배열리스트의 생성자에 해당하는 == map.keySet() 메서드를 넣으면,

배열리스트에 링크드해시맵 컬렉션의 데이터를 복사가 된다.

 

즉, 배열리스트 생성자에 다른 컬렉션을 넣으면,

해당 컬렉션의 요소들이 새로운 배열리스트로 복사되어 저장 된다.

 

보통, 다른 컬렉션의 요소를 새로운 컬렉션으로 복사하거나 이동하는데 사용 한다.

 

 

 

3번 로그를 보면, 링크드해시맵이 들고 있는 모든 키 데이터 이고,

 

4번 로그를 보면, 모든 키 데이터가 배열리스트로 복사 된 모습을 확인 할 수 있다.

반응형

'Java의 정석 > 컬렉션 프레임워크' 카테고리의 다른 글

ArrayList와 Java API 확인  (0) 2023.09.17
Collection, List, Set, Map  (0) 2023.09.17
컬렉션 프레임워크와 핵심 인터페이스  (0) 2023.09.17
Map (해시맵) 예제 01  (0) 2023.07.30
HashMap (해시맵)  (0) 2023.07.30