수업

+28 라이브러리(ArrayList), Stack, Queue, HashSet, TreeSet, HashMap, Collections, 어노테이션

hs_developer 2022. 6. 13. 17:10

ArrayList, Vector, LinkedList 사용

ㅡㅡㅡㅡ ArrayList ㅡㅡㅡㅡ
김가가
김나나
김다다
ㅡㅡㅡㅡ Vector ㅡㅡㅡㅡ
김가가1
김나나1
김다다1
ㅡㅡㅡㅡ LinkedList ㅡㅡㅡㅡ
김가가2
김나나2
김다다2
public static void main(String[] args) {
		
		ArrayList list1 = new ArrayList();
		list1.add("김가가");
		list1.add("김나나");
		list1.add("김다다");
		System.out.println("ㅡㅡㅡㅡ ArrayList ㅡㅡㅡㅡ");
		for(Object obj:list1)
		{
			System.out.println(obj);
		}
		
		Vector list2 = new Vector();
		System.out.println("ㅡㅡㅡㅡ Vector ㅡㅡㅡㅡ");
		list2.add("김가가1");
		list2.add("김나나1");
		list2.add("김다다1");

		for(Object obj:list2)
		{
			System.out.println(obj);
		}
		
		LinkedList list3 = new LinkedList();
		System.out.println("ㅡㅡㅡㅡ LinkedList ㅡㅡㅡㅡ");
		list3.add("김가가2");
		list3.add("김나나2");
		list3.add("김다다2");

		for(Object obj:list3)
		{
			System.out.println(obj);
		}
		
		
	}

 

 

HashSet(중복 제거) 사용

김가가
김나나
김다다
김가가
김나나
김다다
public static void main(String[] args) {
		
		ArrayList list1 = new ArrayList();
		
		list1.add("김가가");
		list1.add("김나나");
		list1.add("김다다");
		list1.add("김가가");
		list1.add("김나나");
		list1.add("김다다");
		
		// 중복O
		ArrayList list2 = new ArrayList();
		list2.addAll(list1);
		
		for(Object obj:list2)
		{
			System.out.println(obj);
		}
		
		// 중복X
		HashSet set = new HashSet();
		set.addAll(list1);
		for(Object obj:set)
		{
			System.out.println(obj);
		}
		
	}

 

 

Stack, Queue 사용

ㅡㅡㅡㅡ Stack 이용하기 ㅡㅡㅡㅡ
김다다
김나나
김가가
ㅡㅡㅡㅡ Queue 이용하기 ㅡㅡㅡㅡ
김가가
김나나
김다다
		
public static void main(String[] args) {

    System.out.println("ㅡㅡㅡㅡ Stack 이용하기 ㅡㅡㅡㅡ");

    Stack st = new Stack();

    // 값 추가
    st.push("김가가");
    st.push("김나나");
    st.push("김다다");

    // 값 출력
    while(!st.isEmpty()) // Empty가 아닐 때까지 돌아 감
    {
    	System.out.println(st.pop()); // pop : 반대로 출력
    }

    System.out.println("ㅡㅡㅡㅡ Queue 이용하기 ㅡㅡㅡㅡ");
    Queue qu = new LinkedList();

    // 값 추가
    qu.offer("김가가");
    qu.offer("김나나");
    qu.offer("김다다");

    // 값 출력
    while(!qu.isEmpty())
    {
    	System.out.println(qu.poll());
    }

}

 

 

Iterator 사용

1
2
3
4
5
	public static void main(String[] args) {
		
		ArrayList list = new ArrayList();
		
		list.add("1");
		list.add("2");
		list.add("3");
		list.add("4");
		list.add("5");
		
		Iterator ir = list.iterator();
		
		while(ir.hasNext())
		{
			System.out.println(ir.next());
		}
	
	}

 

 

IteratorList 사용

1
2
3
4
5

5
4
3
2
1
import java.util.*;
public class M5 {

	public static void main(String[] args) {
		
		ArrayList list = new ArrayList();
		list.add("1");
		list.add("2");
		list.add("3");
		list.add("4");
		list.add("5");
		
		ListIterator it = list.listIterator();
		
		// 정방향 출력
		while(it.hasNext())
		{
			System.out.println(it.next());
		}
		
		System.out.println();

		// 반대로 출력
		while(it.hasPrevious())
		{
			System.out.println(it.previous());
		}
	}
}

 

 

Iterator 단점 -> 2번 출력 안 됨

public static void main(String[] args) {
		
		ArrayList list = new ArrayList();
		list.add("1");
		list.add("2");
		list.add("3");
		list.add("4");
		list.add("5");
		
		Iterator it = list.iterator();
		
		// 1번
		while(it.hasNext())
		{
			System.out.println(it.next());
		}
		

		// 2번, 재 출력 안 됨
		while(it.hasNext())
		{
			System.out.println(it.next());
		}
		
		/////////////////////////
		
		// 1번
		for(Object obj:list)
		{
			System.out.println(obj);
		}
		
		// 2번, 재 출력 안 됨
		for(Object obj:list)
		{
			System.out.println(obj);
		}
	}

 

 

ArrayList 변경, sort (p624)

hong
kim
lee
park
shim
import java.util.*;
public class M7 {

	public static void main(String[] args) {
		
		String[] names = {"kim", "shim", "hong", "lee", "park"};
		Arrays.sort(names); // 자동 정렬
		
		List list = Arrays.asList(names); // asList -> List
		Iterator it = list.iterator();
		
		while(it.hasNext())
		{
			System.out.println(it.next());
		}
		
	}
}

 

 

HashSet

 

1.

ㅡㅡㅡㅡ ArrayList ㅡㅡㅡㅡ
red
red
red
red
red
ㅡㅡㅡㅡ HashSet ㅡㅡㅡㅡ
red
import java.util.*;
public class M8 {

	public static void main(String[] args) {

		System.out.println("ㅡㅡㅡㅡ ArrayList ㅡㅡㅡㅡ"); // 중복O
		ArrayList list = new ArrayList();
		list.add("red");
		list.add("red");
		list.add("red");
		list.add("red");
		list.add("red");
		
		for(Object obj:list)
		{
			System.out.println(obj);
		}
		
		System.out.println("ㅡㅡㅡㅡ HashSet ㅡㅡㅡㅡ"); // 중복X
		HashSet set = new HashSet();
		set.add("red");
		set.add("red");
		set.add("red");
		set.add("red");
		set.add("red");

		for(Object obj:set)
		{
			System.out.println(obj);
		}
	}
}

 

 

2. 중복 제거

2 7 8 9 7 6 4 5 6 8 
ㅡㅡㅡㅡ 중복 제거 후 데이터 ㅡㅡㅡㅡ
2 4 5 6 7 8 9 
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
[2, 4, 5, 6, 7, 8, 9]
import java.util.*;
public class M9 {

	public static void main(String[] args) {
		
		// ArrayList -> 복사
		ArrayList list = new ArrayList();
		
		for(int i=1; i<=10; i++)
		{
			int k = (int)(Math.random()*9)+1;
			list.add(String.valueOf(k));
		}
		
		Iterator it = list.iterator();
		
		while(it.hasNext())
		{
			System.out.print(it.next() + " ");
		}
		
		
		// ArrayList에서 복사 -> ArrayList에 있는 데이터의 중복 제거
		HashSet set = new HashSet();
		set.addAll(list); // list 모든 값 set에 저장(중복 제거)
		
		it = set.iterator();
		
		System.out.println("ㅡㅡㅡㅡ 중복 제거 후 데이터 ㅡㅡㅡㅡ");
		while(it.hasNext())
		{
			System.out.print(it.next() + " ");
		}
		
		
		// ArrayList로 변경 -> 브라우저로 전송
		ArrayList list2 = new ArrayList();
		list2.add(set);
		System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡ");
		it = list2.iterator();
		
		while(it.hasNext())
		{
			System.out.println(it.next() + " ");
		}
		
	}
}

 

 

TreeSet 사용 -> 검색에 용이

 

1.

12 20 22 35 37 54 57 74 78 89 
ㅡㅡㅡㅡ 60점 이하 ㅡㅡㅡㅡ
[12, 20, 22, 35, 37, 54, 57]
ㅡㅡㅡㅡ 60점 이상 ㅡㅡㅡㅡ
[74, 78, 89]
import java.util.*;
public class M10 {

	public static void main(String[] args) {
		
		TreeSet set = new TreeSet();
		
		for(int i=0; i<10; i++)
		{
			int score = (int)(Math.random()*101);
			set.add(score);
		}
		
		Iterator it = set.iterator();
		
		while(it.hasNext())
		{
			System.out.print(it.next() + " ");
		}
		
		// 오라클 -> BETWEEN-AND
		System.out.println();
		System.out.println("ㅡㅡㅡㅡ 60점 이하 ㅡㅡㅡㅡ");
		System.out.println(set.headSet(60));
		
		System.out.println("ㅡㅡㅡㅡ 60점 이상 ㅡㅡㅡㅡ");
		System.out.println(set.tailSet(60));
	}
}

 

 

2. 범위 지정해서 출력

ㅡㅡㅡㅡ 데이터 출력 ㅡㅡㅡㅡ
aKK 
aaa 
abb 
abc 
adf 
bDc 
bbb 
bke 
boi 
ccc 
cfd 
cff 
ddd 
dfd 
dff 

ㅡㅡㅡㅡ 범위 지정해서 출력 ㅡㅡㅡㅡ
[bDc, bbb, bke, boi, ccc, cfd, cff]
import java.util.TreeSet;
public class M11 {

	public static void main(String[] args) {
		
		String[] data = 
			{"aaa","abc","adf","abb","aKK","bbb","bDc","bke",
					"boi","ccc","cff","cfd","ddd","dfd","dff"};
		
		TreeSet set = new TreeSet();
		
		for(String s:data)
		{
			set.add(s);
		}
		
		System.out.println("ㅡㅡㅡㅡ 데이터 출력 ㅡㅡㅡㅡ");
		
		for(Object obj:set)
		{
			System.out.println(obj + " ");
		}
		System.out.println();
		
		
		System.out.println("ㅡㅡㅡㅡ 범위 지정해서 출력 ㅡㅡㅡㅡ");
		System.out.println(set.subSet("b", "d"));
	}
}

 

 

HashMap 사용

 

1.

ㅡㅡㅡㅡ 데이터 출력 ㅡㅡㅡㅡ
ID: admin
PW: 1234
Name: 김나나
import java.util.*;
public class M12 {

	public static void main(String[] args) {
		
		HashMap map = new HashMap();
		map.put("id", "admin");
		map.put("pwd", "1234");
		map.put("name", "김나나");
		
		// key = 중복 허용X, value = 중복 허용O
		System.out.println("ㅡㅡㅡㅡ 데이터 출력 ㅡㅡㅡㅡ");
		System.out.println("ID: " + map.get("id"));
		System.out.println("PW: " + map.get("pwd"));
		System.out.println("Name: " + map.get("name"));
	}
}

 

 

2. DB 연결 -> MyBatis

ㅡㅡㅡㅡ 실행 ㅡㅡㅡㅡ
맛집 목록 보기: SELECT * FROM food
맛집 상세 보기: SELECT * FROM food WHERE no=1
import java.util.*;
public class M13 {

	public static void main(String[] args) {
		
		HashMap map = new HashMap();
		
		map.put("foodListData", "SELECT * FROM food");
		map.put("foodDetailData", "SELECT * FROM food WHERE no=1");
		
		System.out.println("ㅡㅡㅡㅡ 실행 -> MyBatic -> DB 연결 ㅡㅡㅡㅡ");
		System.out.println("맛집 목록 보기: " + map.get("foodListData"));
		System.out.println("맛집 상세 보기: " + map.get("foodDetailData"));
	}
}

 

 

3. Map -> 클래스 관리

ㅡㅡㅡㅡ A클래스 요청 ㅡㅡㅡㅡ
A:display() Call...
ㅡㅡㅡㅡ B클래스 요청 ㅡㅡㅡㅡ
B:display() Call...
ㅡㅡㅡㅡ C클래스 요청 ㅡㅡㅡㅡ
C:display() Call...
import java.util.*;
class A
{
	public void display()
	{
		System.out.println("A:display() Call...");
	}
}

class B
{
	public void display()
	{
		System.out.println("B:display() Call...");
	}
}

class C
{
	public void display()
	{
		System.out.println("C:display() Call...");
	}
}

// 클래스 관리 -> A, B, C -> 스프링 
class Container
{
	private HashMap map = new HashMap();
	
	public Container()
	{
		map.put("a", new A());
		map.put("b", new B());
		map.put("c", new C()); // 팩토리 패턴
	}
	
	// 클래스 찾기
	public Object getBean(String key)
	{
		return map.get(key);
	}
}



public class M14 {

	public static void main(String[] args) {
		
		Container c = new Container();
		
		System.out.println("ㅡㅡㅡㅡ A클래스 요청 ㅡㅡㅡㅡ");
		A a = (A)c.getBean("a");
		a.display();
		
		System.out.println("ㅡㅡㅡㅡ B클래스 요청 ㅡㅡㅡㅡ");
		B b = (B)c.getBean("b");
		b.display();
		
		System.out.println("ㅡㅡㅡㅡ C클래스 요청 ㅡㅡㅡㅡ");
		C c1 = (C)c.getBean("c");
		c1.display();
	}
}

 

 

 

Properties

 

1. 파일 읽기

db.properties
0.00MB

driver: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@localhost:1521:XE
username: hr
password: happy
maxActive: 10;
maxIdle: 10
maxWait: -1
import java.util.*;
import java.io.*; // java.net, java.sql 예외처리
public class M16 {

	public static void main(String[] args) {
		
		try
		{
			Properties pr = new Properties();
			pr.load(new FileInputStream("c:\\javaDev\\db.properties"));
			System.out.println("driver: " + pr.getProperty("driver"));
			System.out.println("url: " + pr.getProperty("url"));
			System.out.println("username: " + pr.getProperty("username"));
			System.out.println("password: " + pr.getProperty("password"));
			System.out.println("maxActive: " + pr.getProperty("maxActive"));
			System.out.println("maxIdle: " + pr.getProperty("maxIdle"));
			System.out.println("maxWait: " + pr.getProperty("maxWait"));
			
		} catch(Exception ex) {}
	}
}

 

 

 

컬렉션

[1, 2, 3, 4, 5]
[4, 5, 1, 2, 3]
[1, 5, 4, 2, 3]
[1, 2, 3, 4, 5]
5
1
import java.util.*;
import static java.util.Collections.*;

public class M17 {

	public static void main(String[] args) {
		
		List list = new ArrayList();
		
		addAll(list, 1,2,3,4,5);
		System.out.println(list); // [1, 2, 3, 4, 5]
		
		rotate(list, 2);
		System.out.println(list); // [4, 5, 1, 2, 3]
		
		swap(list, 0, 2);
		System.out.println(list); // [1, 5, 4, 2, 3]
		
		sort(list);
		System.out.println(list); // [1, 2, 3, 4, 5]
		
		System.out.println(max(list)); // 5
		System.out.println(min(list)); // 1
	
	}

}

 

 

 

제네릭

Java
Oracle
HTML
Java
Oracle
HTML
100
200
300
hong
shim
import java.util.ArrayList;

class Sawon
{
	private int sabun;
	private String name;
	public int getSabun() {
		return sabun;
	}
	public void setSabun(int sabun) {
		this.sabun = sabun;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

public class M20 {

	public static void main(String[] args) {
		
		ArrayList list = new ArrayList();
		list.add("Java");
		list.add("Oracle");
		list.add("HTML");
		
		for(int i=0; i<list.size(); i++)
		{
			String subject = (String)list.get(i);
			System.out.println(subject);
		}
		
		ArrayList<String> list2 = new ArrayList<String>();
		list2.add("Java");
		list2.add("Oracle");
		list2.add("HTML");
		
		for(int i=0; i<list.size(); i++)
		{
			String name = list2.get(i);
			System.out.println(name);
		}
		
		ArrayList<Integer> list3 = new ArrayList<Integer>();
		list3.add(100);
		list3.add(200);
		list3.add(300);
		
		for(int i=0; i<list3.size(); i++)
		{
			int a = list3.get(i); // 언박싱
			System.out.println(a);
		}
		
		ArrayList<Sawon> list4 = new ArrayList<Sawon>();
		
		Sawon s1 = new Sawon();
		s1.setSabun(1);
		s1.setName("hong");
		
		list4.add(s1);
		
		s1 = new Sawon();
		s1.setSabun(2);
		s1.setName("shim");
		
		list4.add(s1);
		
		for(Sawon s:list4)
		{
			System.out.println(s.getName());
		}
	}
}

 

 

 

메서드 호출

 

1. Map 적용 전

 

import java.util.*;

interface I
{
	public void display();
}
class A implements I
{
	public void display()
	{
		System.out.println("A:display() Call...");
	}
}

class B implements I
{
	public void display()
	{
		System.out.println("B:display() Call...");
	}
}

class C implements I
{
	public void display()
	{
		System.out.println("C:display() Call...");
	}
}
public class M2 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("입력(a, b, c): ");
		String cmd = sc.next();
		
		I i = null;
		
		if(cmd.equals("a"))
		{
			i = new A();
		}
		else if(cmd.equals("b"))
		{
			i = new B();
		}
		else if(cmd.equals("c"))
		{
			i = new C();
		}
		
		i.display();
	}
}

 

 

2. Map 적용 후

import java.util.*;
interface II
{
	public void display();
}

class AA implements II
{

	@Override
	public void display() {

		System.out.println("AA:display() Call");
		
	}
	
}
class BB implements II
{

	@Override
	public void display() {

		System.out.println("BB:display() Call");
	}
	
}
class CC implements II
{

	@Override
	public void display() {

		System.out.println("CC:display() Call");
	}
	
}

public class M {

	public static void main(String[] args) {
		
		Map<String, II> map = new HashMap<String, II>();
		
		map.put("a", new AA());
		map.put("b", new BB());
		map.put("c", new CC());
		
		Scanner sc = new Scanner(System.in);
		System.out.println("입력(a, b, c): ");
		String cmd = sc.next();
		
		II i = map.get(cmd);
		i.display();
	}
}
입력(a, b, c): 
c
CC:display() Call

 

 

 

3. if문 사용X -> 값 더해져도 값 추가 필요X

기능 입력: (write, list, detail, update, delete): 
delete
삭제하기 기능 구현..
import java.lang.reflect.Method;
import java.util.*;
class Board
{
	public void write()
	{
		System.out.println("글쓰기 기능 구현..");
	}
	public void list()
	{
		System.out.println("목록 출력 기능 구현..");		
	}
	public void detail()
	{
		System.out.println("상세보기 기능 구현..");
	}
	public void update()
	{
		System.out.println("수정하기 기능 구현..");
	}
	public void delete()
	{
		System.out.println("삭제하기 기능 구현..");
	}
}

public class M3 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("기능 입력: (write, list, detail, update, delete): ");
		String cmd = sc.next();
	
		Board board = new Board();
		/*if(cmd.equals("write"))
		{
			board.write();
		}
		else if(cmd.equals("list"))
		{
			board.list();
		}
		else if(cmd.equals("detail"))
		{
			board.detail();
		}
		else if(cmd.equals("update"))
		{
			board.update();
		}
		else if(cmd.equals("delete"))
		{
			board.delete();
		}*/
		
		try
		{
			Class className = Class.forName("com.sist.ann.Board");
			Object obj = className.getDeclaredConstructor().newInstance();
			Method[] methods = className.getDeclaredMethods();
			
			for(Method m :methods)
			{
				if(cmd.equals(m.getName()))
				{
					m.invoke(obj, null); // 메서드 이름 없어도 호출 가능
				}
			}
			
		}catch(Exception ex) {}
	}
}

 

 

4. 어노테이션으로 메서드 호출

기능 입력: (write, list, detail, update, delete): 
r
답변하기 기능 구현..
import java.lang.reflect.Method;
import java.util.*;
class Board
{
	@RequestMapping("w")
	public void write()
	{
		System.out.println("글쓰기 기능 구현..");
	}
	@RequestMapping("l")
	public void list()
	{
		System.out.println("목록 출력 기능 구현..");		
	}
	@RequestMapping("d")
	public void detail()
	{
		System.out.println("상세보기 기능 구현..");
	}
	@RequestMapping("u")
	public void update()
	{
		System.out.println("수정하기 기능 구현..");
	}
	@RequestMapping("d")
	public void delete()
	{
		System.out.println("삭제하기 기능 구현..");
	}
	@RequestMapping("r")
	public void reply()
	{
		System.out.println("답변하기 기능 구현..");
	}
}

public class M3 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("기능 입력: (write, list, detail, update, delete): ");
		String cmd = sc.next();
	
		//Board board = new Board();
		/*if(cmd.equals("write"))
		{
			board.write();
		}
		else if(cmd.equals("list"))
		{
			board.list();
		}
		else if(cmd.equals("detail"))
		{
			board.detail();
		}
		else if(cmd.equals("update"))
		{
			board.update();
		}
		else if(cmd.equals("delete"))
		{
			board.delete();
		}*/
		
		try
		{
			Class className = Class.forName("com.sist.ann.Board");
			Object obj = className.getDeclaredConstructor().newInstance();
			Method[] methods = className.getDeclaredMethods();
			
			for(Method m :methods)
			{
				RequestMapping rm = m.getAnnotation(RequestMapping.class);
				if(cmd.equals(rm.value()))
				{
					m.invoke(obj, null);
				}
			}
			
		}catch(Exception ex) {}
	}
}
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

@Retention(RUNTIME)
@Target(METHOD)
public @interface RequestMapping {

	String value();

}

 

 

 

인덱스 : 어떤 것을 찾을 지 구분

METHOD : 메서드 구분

@RequestMapping, @GetMapping, @PostMapping

 

TYPE : 클래스 구분

@Controller, @Repository, @Service, @Component, @Bean, @RestController

 

PARAMETER : 매개변수 구분

@Autowired, @Resource

 

CONSTRUCTOR : 생성자 구분

 

FIELD : 멤버 구분

 

@RequestMapping("w")

 

 

어노테이션 유지 기간

SOURCE: 소스파일에만 존재, 클래스 파일에 존재하지 않음 (한번만 사용)

CLASS : 클래스 파일에 존재, 실행시 사용 불가, 기본 값

RUNTIME: 클래스 파일에 존재, 실행시 사용 가능

 

 

어노테이션 서치 필요

 

Iterator : 데이터를 모아서 순차적으로 접근하게 하는 라이브러리

hasNext() : while() -> 데이터가 있는 개수 만큼 

next() : 실제 데이터 읽기

 

ArrayList, Map, HashMap(중복 제거 용) 정도만 씀, 위에 건 잘 안 나옴

위 이론보다 오라클 연결이 더 중요

 

브라우저 제어 : js

데이터 제어 : java

데이터 저장 : oracle

 

쓰레드 : 한 페이지에 여러 기능이 따로 구현 -> Ajax -> VueJS, ReactJS(최신 언어)

 

풀 스택 -> java(back) + js(front)