본문 바로가기
수업노트

23.3.22

by MIniLabo 2023. 3. 22.

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

'수업노트' 카테고리의 다른 글

23.3.27  (0) 2023.03.27
23.3.23  (0) 2023.03.27
23.3.21  (0) 2023.03.21
23.3.20  (0) 2023.03.20
23.3.17  (0) 2023.03.17