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 |