o list
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
public class Test01_List {
public static void main(String[] args) {
// Java Collection Framework
//List, Set, Map ->객체를 묶는 방식을 결정하는 인터페이스(자료모으기방법)
//자료를 모아서 정리할 수 있는 클래스 및 인터페이스
/*
List : 순서(Index)가 있다. 인덱스는 0부터 시작, 1씩 증가
Vector, ArrayList ~~
Set : 순서가 없다
HashSet ~~
Map : 순서가 없다 Key와 Value로 구성
HachMap, Properties ~~
interface List{}
class Vector implements List{} ->db연동할때X, 메모리 많이 잡아먹음
class ArryList implements List{}
interface Set{}
class HashSet implements Set{}
interface Map{}
class HachMap implements Map{}
class Properties implements Map{}
//다형성->부모에 자식 들어가서 객체생성
List list = new Vector()
List list = new ArrayList()
Set set = new HashSet()
Map map = new HachMap()
*/
////////////////////////////////
//배열: 자료를 모아 놓을 수 있음
int[] num = new int[100];
//1) List 계열
//제네릭<E>(생략가능): Element 요소
//매개변수를 object로 갖는다->이하 예시의 값들은 object의 하위이므로 다형성에 의해 가능
Vector vec = new Vector();
vec.add(3);
vec.add(2.4);
vec.add('R');
vec.add("korea");
vec.add(new Integer(5));
vec.add(new Double(6.7));
//Integer inte = new Integer(5) old version
//Integer inte = 5 new version
System.out.println(vec.size());//6 요소의 개수
//vec.get(i) ->i번째 요소 가져오기
for(int i = 0; i <vec.size(); i++) {
System.out.println(vec.get(i));
}//for end
//0번째 요소 제거하기
vec.remove(0);
System.out.println(vec.size());//5
//vec요소 전부 제거
vec.removeAllElements();
System.out.println(vec.size());//0
if(vec.isEmpty()) {
System.out.println("empty");
}else {
System.out.println("not empty");
}//if end
/////////////////////////////////////////
//다형성
List list = new ArrayList();
list.add(5);
list.add(5.7);
list.add('M');
list.add("seoul");
//+클래스도 리스트업 할 수 있음
System.out.println("-----------");
System.out.println(list.size());//4
//문) remove() 이용해 list요소를 전부 삭제하시오
/*리스트 처음부터 지우면 앞의 자료가 지워지면서 인덱스가 흐트러져 전부 지워지지 않음
for(int i = 0 ; i < list.size() ; i++) {
list.remove(i);
}
System.out.println(list.size());//2
*/
//따라서 뒤의 자료부터 지워야
for(int i = list.size()-1 ; i >= 0 ; i--) {
list.remove(i);
}
System.out.println(list.size());//0
}//main() end
}//class end
============================
o setmap
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;
public class Test02_SetMap {
public static void main(String[] args) {
// 2. Set계열 : 순서가 없다(인덱스 없음)
Set set = new HashSet();
set.add(3);
set.add(2.4);
set.add('r');
set.add("busan");
set.add(new Integer(7));
System.out.println(set.size());//5
//cursor : 가리킬 요소가 있으면 true, 없으면 false 값 변환
//util패키지 내의 Iterator
//cursor를 이용해 요소 접근
Iterator iter = set.iterator();//커서생성
while(iter.hasNext()) {//다음 cursor가 있으면 아래 실행
//cursor가 가리키는 요소 가져오기
Object obj = iter.next();//다음 자료로 넘어가기
System.out.println(obj);
}//while end
////////////////////////////////////////////////
//3. Map계열 : 순서가 없다
// - key : 이름표
// - value : 값
//JSON, 파이선(딕셔너리), NoSQL 등에서 많이 사용
HashMap map = new HashMap();
map.put("one", 3);
map.put("two", 2.4);
map.put("three", 'r');
map.put("four", "손흥민");
System.out.println(map.size());
System.out.println(map.get("four"));//손흥민
map.put("four", "박지성");
System.out.println(map.get("four"));//박지성
////////////////////////
//Properties 클래스
Properties db = new Properties();
db.put("url", "http://localhost:1521");
db.put("username", "itwill");
db.put("password", "12341234");
System.out.println(db.get("url"));
System.out.println(db.get("username"));
System.out.println(db.get("password"));
////////////////////////////////////////
//문제) = 문자를 기준으로 문자열을 분리해서
// = 앞의 문자열은 key, = 뒤의 문자열은 value로 구분해서 hm에 저장하고
// hm의 key값들 중에서 "read.do"를 호출하면
// value값으로 net.bbs.Read 출력하시오
HashSet command = new HashSet();
command.add("list.do=net.bbs.list");
command.add("read.do=net.bbs.read");
command.add("write.do=net.bbs.write");
System.out.println(command.size());//3
HashMap hm = new HashMap();
//모범답안
//1) 커서생성
Iterator cursor = command.iterator();
//2) 커서 있을때까지 반복
while(cursor.hasNext()) {
//3) 커서가 가리키는 요소 가져와 문자열로 형변환
Object obj = cursor.next();
String line = (String)obj;//다형성 이용한 강제형변환
//System.out.println(line);
//4) "="위치 기준으로 문자열 분리
String[] word = line.split("=");
String key = word[0];// "=" 앞 문자열
String value = word[1];//"=" 뒤 문자열
System.out.println("key : " + key);
System.out.println("value : " + value);
//5) hm에 저장하기
hm.put(key, value);
}//while end
System.out.println("------------");
//결과값
System.out.println(hm.get("read.do"));//net.bbs.read
}//main end
}//class end
================================
o generic
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Vector;
class Mountain{
String name;//산이름
int height;//산높이
public Mountain() {}
public Mountain(String name, int height) {
this.name = name;
this.height = height;
}//end
} //class end
public class Test03_generic {
public static void main(String[] args) {
//제네릭 Generic
/*
- 요소를 수집하는 경우에 특정 자료형으로 제한할 수 있다
- <E> Element
- <K, V> Key, Value
- <T> 사용자 정의형
- <?> 사용자 정의형
- <클래스>
*/
//int형만 num배열에 대입 가능
int[] num = new int[3];
//Vector<int>는 에러, 기본자료형은 올 수 없음
Vector<String> vec = new Vector<>(); //뒤의 꺾쇠에는 생략가능
vec.add("개나리");
vec.add("진달래");
vec.add(new String("무궁화"));
//vec.add(3); 에러, 자료형 제약조건에 맞지않음 이하동일
//vec.add(2.4); 에러
//vec.add(new Character('r')); 에러
for(int i = 0 ; i < vec.size(); i++) {
String str = vec.get(i);
System.out.println(str);
}//for end
/////////////////////////////
ArrayList<Integer> list = new ArrayList<>();
list.add(3);
list.add(new Integer(5));
//list.add(2.4); 에러
//list.add("korea"); 에러
//////////////////////////////
HashSet<Double> set = new HashSet<>();
set.add(1.2);
set.add(new Double(3.5));
//set.add(7); 에러
//set.add("dfdf"); 에러
//////////////////////////////////
HashMap<String, Character> map = new HashMap<>();
map.put("one", 'r');
map.put("two", new Character('r'));
//map.put("three", ""); 에러
//map.put("four", 3); 에러
//map.put(3, 'f'); 에러
System.out.println(map.get("one"));//r
////////////////////////////////////
//사용자정의클래스도 제네릭 가능
Mountain m1 = new Mountain("한라산", 1950);
Mountain m2 = new Mountain("관악산", 1500);
Mountain m3 = new Mountain("북한산", 1000);
ArrayList<Mountain> item = new ArrayList<>();
item.add(m1);
item.add(m2);
item.add(m3);
//item.add(""); 에러
for(int i = 0 ; i <item.size(); i++ ) {
Mountain m = item.get(i);//m에 arraylist item의 자료 가져와 넣기
System.out.println(m.name);//m의 자료의 name 출력
System.out.println(m.height);//m의 자료의 height 출력
}
}//main() end
}//class end
=================================
o thread 사용하지 않는 경우
class MyThread1{
private int num;
private String name;
public MyThread1() {}
public MyThread1(int num, String name) {
this.num = num;
this.name = name;
}//end
public void start() {
run();
}//start() end
public void run() {
for(int a = 0 ; a < num ; a++) {
System.out.println(name + ":"+ a);
}//for end
}//run() end
}//class end
public class Test05_thread {
public static void main(String[] args) {
//Thread 클래스
//하나의 프로그램이나 하나의 메소드가 cpu자원을 전부 점유하는 것을 막을 수 있다.
//1) 쓰레드를 사용하지 않는 경우
//*이 1000개 출력 후, @ 1000개 출력 후, # 1000개 출력
MyThread1 t1 = new MyThread1(1000, "*");
MyThread1 t2 = new MyThread1(1000, "@");
MyThread1 t3 = new MyThread1(1000, "#");
t1.start();
t2.start();
t3.start();
}//main() end
}//class end
========================
o thread 사용하는 경우 1
class MyThread2 extends Thread{
//클래스가 클래스를 상속받는 경우, 단일상속만 가능
//Thread클래스를 상속받았기 때문에 쓰레드 관리자의 대상이 됨
private int num;
private String name;
public MyThread2() {}
public MyThread2(int num, String name) {
this.num = num;
this.name = name;
}//end
//start()함수는 run()함수를 호출하는 기능만, 오버라이딩하지 않는다
@Override
public void run() {//비즈니스 로직 구현
for(int a = 0 ; a < num ; a++) {
System.out.println(name + ":"+ a);
}//for end
}//run() end
}//class end
public class Test06_thread {
public static void main(String[] args) {
// 2)쓰레드를 사용한 경우
//JVM이 쓰레드 관리자에 등록하고 start()메소드가 run()을 호출한다
//예) 채팅, 실시간 예매 등에 활용
MyThread2 t1 = new MyThread2(1000, "*");
MyThread2 t2 = new MyThread2(1000, "@");
MyThread2 t3 = new MyThread2(1000, "#");
t1.start();
t2.start();
t3.start();
}
}
======================
o thread 사용하는 경우 2
class MyThread3 implements Runnable {
private int num;
private String name;
public MyThread3() {}
public MyThread3(int num, String name) {
this.num = num;
this.name = name;
}//end
@Override
public void run() {//비즈니스 로직 구현
for(int a = 0 ; a < num ; a++) {
System.out.println(name + ":"+ a);
}//for end
}//run() end
}//class end
public class Test07_thread {
public static void main(String[] args) {
//3) Runnable인터페이스 이용해 쓰레드 구현
/*
Interface Runnable{}
class Thread implements Runnable{}
*/
Thread t1 = new Thread(new MyThread3(1000, "*"));
Thread t2 = new Thread(new MyThread3(1000, "**"));
Thread t3 = new Thread(new MyThread3(1000, "***"));
t1.start();
t2.start();
t3.start();
}//main() end
}//class end