본문 바로가기

STUDY/Java

[JAVA] Collection (List, Set, Map)

 

01 Collection

- 자료 모음

- List: 순서가 있고 중복 허용 (ArrayList, Vector, LinkedList)

- Set: 순서가 없고 중복 불가 (TreeSet)

- Map:

 

 


 

 

02. ArrayList

- 여러 객체(다중 객체)들을 집합

ex) ArrayList.add(): list에 객체 추가하기

package com.collection;

import java.util.ArrayList;

public class AlistTest {
	public static void main(String[] args) {
		ArrayList<String> alist = new ArrayList<String>();
		alist.add("홍길동");
		alist.add("김철수");
		alist.add("박상우");
		alist.add(1, "최은진");
		
		for(String k : alist) {
			System.out.println(k);
		}
	}
}
 

① 7행: <String>형 alist 객체 생성

② 8행~11행: alist.add(""); 객체 추가

③ 11행: ArrayList도 0부터 시작

 

[결과화면]


ex) ArrayList.addAll();

package com.collection;

import java.util.ArrayList;

public class AlistTest {
	public static void main(String[] args) {
		ArrayList<String> alist = new ArrayList<String>();
		ArrayList<String> alist2 = new ArrayList<String>();
		alist.add("홍길동");
		alist.add("김철수");
		alist.add("박상우");
		alist.add(1, "최은진");
		
		alist2.add("이영희");
		alist2.add("박민주");
		
		alist.addAll(alist2);
		
		for(String k : alist) {
			System.out.println(k);
		}
	}
}
 

① 17행: addAll()은 alist에 alist2의 데이터를 한번에 추가

② 17행: 같은 형의 데이터만 합칠 수 있음

 

[결과화면]

 


 

 

ex) 메모장 파일로 입력받아 출력하기 (FileInputStream)

 

인코딩 변경 필수

 

① 메모장.txt 파일의 인코딩을 ANSI로 변경

package com.collection;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileTest {

	public static void main(String[] args) throws FileNotFoundException {
		FileInputStream fis = new FileInputStream("c:/java_test/ScoreInfo.txt");
		while(true) {
		try {
				int a = fis.read();
				if(a == -1)
					break;
				else
					System.out.print((char)a);
		} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
 

② Stream은 1byte이기 때문에 한글이 깨져서 불러와짐

 

[결과화면]

 


ex) 메모장 파일로 입력받아 출력하기 (FileReader)

package com.collection;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class FileTest {

	public static void main(String[] args) throws FileNotFoundException {
		FileReader fr = new FileReader("c:/java_test/ScoreInfo.txt");
		int a;
		try {
				while((a = fr.read())!=-1){
					System.out.print((char)a);
				}
					
		} catch (IOException e) {
				e.printStackTrace();
			}
	}
}
 

① FileReader는 2byte

 

[결과화면]

 


 

ex) 메모장 파일로 입력받아 출력하기 (FileReader + BufferedReader)

package com.collection;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class FileTest {

	public static void main(String[] args) throws FileNotFoundException {
		FileReader fr = new FileReader("c:/java_test/ScoreInfo.txt");
		BufferedReader br = new BufferedReader(fr);
		while(true) {
			try {
				String str = br.readLine();
				if(str == null)
					break;
				System.out.println(str);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
 

① 한 글자씩 FileReader로 읽어 BufferedReader에 저장

 

[결과화면]

 

 


 

 

03 TreeMap<K, V>

- Key: 분류할 수 있는 기준 (중복 불가)

- Value: Key와 연결되어 있는 값 (중복 허용)

 

ex) Treemap.put(k, v)

package com.collection;

import java.util.Set;
import java.util.TreeMap;

public class TreemapTest {

	public static void main(String[] args) {
		TreeMap<Integer, String> tmap = new TreeMap<Integer, String>();
		tmap.put(1, "월요일");
		tmap.put(2, "화요일");
		tmap.put(3, "수요일");
		tmap.put(4, "목요일");
		tmap.put(5, "금요일");
		tmap.put(6, "토요일");
		tmap.put(7, "일요일");
		
		Set<Integer> kset = tmap.keySet();
		
		System.out.println("kset = " + kset);
	}
}
 

① 10행: tmap.put(k, v): key와 value를 한 쌍으로 저장

② 18행: TreeMap은 Set을 상속 받음

③ 18행: KeySet(): 맵 구조의 키가 모여있음

--> Key 값을 끊어서 분류해야 사용 가능

 

[결과화면]

 


 

ex) Itherator<E>

package com.collection;

import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;

public class TreemapTest {

	public static void main(String[] args) {
		TreeMap<Integer, String> tmap = new TreeMap<Integer, String>();
		tmap.put(1, "월요일");
		tmap.put(2, "화요일");
		tmap.put(3, "수요일");
		tmap.put(4, "목요일");
		tmap.put(5, "금요일");
		tmap.put(6, "토요일");
		tmap.put(7, "일요일");
		
		Set<Integer> kset = tmap.keySet();
		
		Iterator<Integer> iter = kset.iterator();
		while(iter.hasNext()) {
			Integer key = iter.next();
			String str = tmap.get(key);
			System.out.println(key + "  " + str);
		}
	}
}
 

① 21행: keySet()에서 key값들을 분류하기 위해 iterator 사용

② 21행: Iterator<E>: 자바의 컬렉션에 저장되어 있는 요소들을 읽어옴

③ 21행: kset이 Integer(1,2,3,4..) 이므로 Iterator<Integer>

④ 22행: while(iter.hasNext()): 다음 요소에 읽어올 요소가 있는지 확인(true동안 반복)

⑤ 23행: iter.next(): 다음 요소를 가져와 key에 저장 (key값 저장)

⑦ 24행: tmap.get(key): key값에 해당하는 value를 get(value값 저장)

 

[결과화면]

 


 

 

ex) ID와 PW 찾기

package com.collection;

import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;

public class TreemapTest {

	public static void main(String[] args) {
		TreeMap<String, String> tmap = new TreeMap<String, String>();
		tmap.put("hong", "1234");
		tmap.put("kim", "4567");
		tmap.put("park", "qwer");
		tmap.put("lee", "asdf");
		tmap.put("choi", "4321");
		
		Set<String> kset = tmap.keySet();
		Iterator<String> iter = kset.iterator();
		while(iter.hasNext()) {
			String id = iter.next();
			String pw = tmap.get(id);
		}
		System.out.println("** 종료를 원할 시 -1를 입력하세요 **");
		while(true) {
			Scanner sc = new Scanner(System.in);
			System.out.print("아이디를 입력하세요: ");
			String input = sc.next();
			String output;
			boolean contain = kset.contains(input);
			if(input.equals("-1"))
				break;
			if(contain) {
				output = tmap.get(input);
				System.out.println("비밀번호는 " + output + "입니다.");
			}
			else
				System.out.println("해당하는 데이터가 없습니다.");
		}
	}
}
 

[결과화면]

 


 

'STUDY > Java' 카테고리의 다른 글

[JAVA] Stream 스트림  (0) 2021.11.05
[JAVA] 람다식, Enum  (0) 2021.11.05
[JAVA] Generic 제네릭  (0) 2021.11.05
[JAVA] Thread, 스레드  (0) 2021.11.05
[JAVA] 예외처리  (0) 2021.11.05