[Java] Collection, Generic,File,Input,Output,Thread (1)
![[Java] Collection, Generic,File,Input,Output,Thread (1)](https://cdn.hashnode.com/res/hashnode/image/upload/v1706103362121/f7df43a3-92de-460e-a193-2439ed742385.png)
자료구조 + 알고리즘, 문제해결방법
선형 구조
배열
리스트
스택
큐
데크
비선형 구조
트리
그래프
Java Collection Framework (1)
객체들을 효율적으로 추가, 삭제,검색할 수 있도록 제공되는 컬렉션 라이브러리
객체를 수집하여 저장하여 두었다가 요청이 있을시 저장소에서 추출하여 제공하는것을 목적
배열(array)의 단점을 개선한 클래스로 객체만 저장할 수 있다.
java.util.*import java.util.Iterator;import java.util.HashMap;import java.util.HashSet;importjava.util.Map;import java.util.Set;import java.util.Vector;
List : 순서가 있다. 중복허용.
List,Vector,ArrayList,Interator,Stack
Vector vec = new Vector(); // 자료형(타입)을 정하지 않음.
System.out.println(vec.size()); // 요소의 개수 : 현재 0개
vec.add(3);
vec.add(3.14);
vec.add("Happy");
vec.add('K');
vec.add(3); // 중복 허용
System.out.println(vec.size()); // 현재 5개
vec.add(new Integer(5)); // 정수 값을 갖는 Integer 객체를 추가
vec.add(new Double(3.5)); // 실수 값을 갖는 Double 객체를 추가
System.out.println(vec.size()); // 현재 7개
System.out.println("----");
for(int i = 0; i < vec.size(); i++) {
System.out.println(vec.get(i)); // vec의 각 요소 하나씩 출력, 0 부터 인덱스 시작
}
System.out.println("----");
vec.remove(3); // 인덱스가 3인 위치에 있는 요소를 제거
for(int i = 0; i < vec.size(); i++) {
System.out.println(vec.get(i));
}
System.out.println("----");
System.out.println(vec.get(3));
vec.removeAllElements(); // Vector에 있는 모든 요소를 제거
System.out.println(vec.size()); // 그래서 크기 0
System.out.println("----");
if(vec.isEmpty()) { // 비어있는가?
System.out.println("비어있다.");
} else {
System.out.println("비어있지 않다.");
}
Set : 순서가 없다. 중복허용 안함.
Set,HashSet
Set set = new HashSet();
set.add(3);
set.add(3.14);
set.add("Happy");
set.add('K');
set.add(new Integer(5));
set.add(new Double(3.5));
set.add(new String("Java"));
System.out.println(set.size()); // 7
set.add(3); // 불가능 -> 중복을 허용하지 않는다.
System.out.println(set.size()); // 7
HashSet hs = new HashSet();
hs.add(3);
hs.add(3.14);
hs.add("soul");
hs.add('R');
hs.add(new Integer(5));
Iterator
- 컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스
| boolean hasNext() | 읽어 올 요소가 남아있는지, true / false |
| Object next() | 다음 요소 읽어오기, hasNext()로 확인 후 next() 호출하면 더 안전 |
| void remove() | next()로 읽어 온 요소 삭제, next() 호출 다음에 호출해야 함. |
java.util.Iterator iter = hs.iterator();
System.out.println("----");
while(iter.hasNext() == true) {
Object obj = iter.next();
System.out.println(obj.toString());
}
Map : 순서가 없다.
Key, Value 쌍으로 이루어져 있음.
Key 중복 불가능
Value 중복 가능
Map,HashMap,HashTable
Map map = new HashMap();
// "key" 중복불가능
// value 중복가능
map.put("one", 3);
map.put("two", 3.14);
map.put("three", "Happy");
map.put("four", new Integer(5));
map.put("five", 3);
map.put("five", 5); // "key" 중복불가능, 최종적으로는 이 value를 가진다.
System.out.println(map.size()); // 5
System.out.println(map.get("two")); // value 값을 가져온다. 3.14
System.out.println(map.get("five")); // 그래서 "five" key에서는 5라는 value를 가진다.
- 배열의 크기는 변경이 불가능하나 ArrayList, Vector는 동적인 크기 변경이 가능하다.
Java Collection Framework (2)
import java.util.ArrayList;
import java.util.ArrayList;
class Jumsu {
String name = "";
int kor = 0;
int eng = 0;
int tot = 0;
int avg = 0;
public Jumsu() { }
public Jumsu(String name, int kor, int eng) {
// super();
this.name = name;
this.kor = kor;
this.eng = eng;
this.tot = kor + eng;
this.avg = (kor + eng) / 2;
}
} // class end
public class ArrayListEx1 {
public static void main(String[] args) {
Jumsu j1 = new Jumsu("홍길동", 100, 100);
Jumsu j2 = new Jumsu("김철수", 40, 40);
Jumsu j3 = new Jumsu("이영희", 70, 70);
ArrayList alst = new ArrayList();
alst.add(j1);
alst.add(j3);
alst.add(j2);
alst.remove(j2);
Jumsu t = null;
for(int i = 0; i < alst.size(); i++) {
//System.out.println(alst.get(i));
t = (Jumsu)alst.get(i);
//System.out.println(((Jumsu)alst.get(i)).name);
System.out.print(t.name + "\\t");
System.out.print(t.kor+ "\\t");
System.out.print(t.eng+ "\\t");
System.out.print(t.tot+ "\\t");
System.out.println(t.avg);
}
}
}
- 입력받은 값을 ArrayList에 담아 출력하기
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
// Scanner class로 부터 console에서 이름을 입력 받아
// ArrayList에 저장하고 출력
public class ArrayListEx2 {
public static void main(String[] args) {
List<String> a = new ArrayList<String>();
Scanner input = new Scanner(System.in);
for(int i = 0; i < 3; i++) {
System.out.print("이름을 입력하세요 >> ");
String name = input.next();
a.add(name);
}
for(int i = 0; i < a.size(); i++) {
String name = a.get(i);
System.out.println("전통 for문 name : " + name);
}
for(String name : a) {
System.out.println("향상 for문 name : " + name);
}
// 결과적으로 List에서도, Set에서도 사용가능
Iterator<String> it = a.iterator();
while(it.hasNext()) { // 다음 요소 존재하는지 판별(true, false)
String name = it.next(); // 다음 요소값을 반환(Iterator->String)
System.out.println("Iterator name : " + name);
}
}
}
Java Collection Framework (3)
- 빙고판 만들기
import java.util.*;
public class BingoTest {
public static void main(String[] args) {
Set set = new HashSet();
int[][] board = new int[5][5]; // 2차원 배열
for(int i=0; set.size() < 25; i++) {
// 1에서 50 사이의 랜덤 수, int로 형변환
set.add((int)(Math.random()*50)+1+"");
}
Iterator it = set.iterator();
for(int i=0; i < board.length; i++) {
for(int j=0; j < board[i].length; j++) {
// 가져온 문자열을 정수로 변환
board[i][j] = Integer.parseInt((String)it.next());
// 1의 자리 숫자면 공백을 두칸 아니면 한칸으로 빙고판 모양 만들기
System.out.print((board[i][j] < 10 ? " " : " ") + board[i][j]);
}
System.out.println(); // 한 행이 끝나면
}
} // main end
}
Generics 제네릭
자료형(data type) 을 일반화(generalize)하는 것
E element (원소) —> 클래스만 가능
객체를 저장하는 기술인 Collection Framework의 단점을 개선한 기능.
Vector vec=new Vector();
vec.add(123);
vec.add("sky");
int[3] a={1,2,3}
데이터 자료형인 String, Integer같은 형태를 처음에 정해 놓지 않고
임의의 타입으로 명시해 준 후에 나중에 직접적으로 해당구문을 사용할때
지정하는 형태
Class ArrayList<E>에서 'E'가 있는 곳에는 ArrayList를 선언하고
생성할 때 사용할 실제 참조자료형이 들어간다.
E는 Element(원소)를 말하며,
new ArrayList<String>() 이면 'E'는 'String' 클래스를 가르키며,
< > 안의 String은 유형 매개 변수(type parameter)이다.
따라서 boolean add(Object o) 메소드는 boolean add(String o) 가 된다.
'E'는 ArrayList의 인스턴스를 만들때 < > 안에 넣는 타입을 말함.
'E'는 컬렉션에 저장하고 컬렉션에서 리턴할 원소의 타입을 가르킴.
import java.util.ArrayList;
import java.util.Iterator;
class Mountain {
String name;// 산이름
int height; // 산높이
public Mountain() {}
public Mountain(String name, int height) {
super();
this.name = name;
this.height = height;
}
}
public class GenericEx1 {
public static void main(String[] args) {
// 교재 : ch13, 670page
ArrayList<String> list = new ArrayList<>();
list.add("soul");
list.add("Jeju");
//list.add(3);
//list.add(3.14);
//list.add(new Integer(5));
Mountain one = new Mountain("한라산", 1950);
Mountain two = new Mountain("설악산", 1230);
Mountain three = new Mountain("북한산", 1500);
ArrayList<Mountain> mlist = new ArrayList<>();
mlist.add(one);
mlist.add(two);
mlist.add(three);
// 1)
for(int i = 0; i<mlist.size(); i++) {
Object obj = mlist.get(i);
Mountain dto = (Mountain)obj;
System.out.println(dto.name + " : " + dto.height);
}
// 2)
Iterator<Mountain> iter = mlist.iterator();
while(iter.hasNext()) {
Mountain dto = iter.next();
System.out.println(dto.name + " : " + dto.height);
}
} // main end
} // class en
Thumbnail :Image by Freepik
![[혼공컴운] 6주차_책 한 권을 끝내다니(Ch 14~ 15)](https://cdn.hashnode.com/res/hashnode/image/upload/v1755441066842/4d3a042e-e395-4e14-84c2-725aeabc56ed.png)
![[혼공컴운] 5주차_끝이 보인다(Ch 12 ~ 13)](https://cdn.hashnode.com/res/hashnode/image/upload/v1754833767926/85ea771d-0416-409a-82d9-bcc62b92cf17.png)
![[혼공컴운] 4주차_운영체제 시작(Ch 09 ~ 11)](https://cdn.hashnode.com/res/hashnode/image/upload/v1753626546414/943e9f66-8c81-4bac-83b6-5797bd83293c.png)
![[혼공컴운] 3주차_컴퓨터 구조 끝(Ch 06 ~ 08)](https://cdn.hashnode.com/res/hashnode/image/upload/v1753020566648/c2832934-e4d5-45c1-87c8-a1d5f27b2169.png)