[Day24] Java 24 [9/13]

 

μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬ (JCF)

<1> μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬

  γ„±. μ»¬λ ‰μ…˜( collection )

    데이터 집합 

  γ„΄. ν”„λ ˆμž„μ›Œν¬ ( framework ) 

    ν‹€( κ·œλ²” ) / λ³΅μž‘ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ λΌˆλŒ€ μ—­ν•  ꡬ쑰 / ν‘œμ€€ν™”λœ ν”„λ‘œκ·Έλž˜λ° λ°©μ‹μ˜ 의미

 

-> 데이터 κ΅°(집합)을 μ €μž₯(λ‹€λ£¨λŠ”)ν•˜λŠ” ν΄λž˜μŠ€λ“€μ„ ν‘œμ€€ν™”ν•œ 섀계

-> ν‘œμ€€ν™” 체계( λΌˆλŒ€, ν‹€, 섀계 )

 

<2>   λ°°μ—΄ - 데이터 집합 + 개발자 직접 κ΅¬ν˜„

 

<3>   μ»¬λ ˆμ…˜ ν”„λ ˆμž„μ›Œν¬ ꡬ성 - 핡심 μΈν„°νŽ˜μ΄μŠ€ ( 3가지 ) 이해

Collection μΈν„°νŽ˜μ΄μŠ€                                  Map μΈν„°νŽ˜μ΄μŠ€

p580 [ν‘œ 11-2] 15 μΆ”μƒλ©”μ„œλ“œ                    ν‚€(key)+κ°’(value)  쌍 -> 데이터 집합

데이터 집합 - 데 μΆ”(add, addAll)                μ—”νŠΈλ¦¬ (Entry = key + value)

                     λ° 제( clear,remove)             μˆœμ„œ X, ν‚€ 쀑볡 X, κ°’ 쀑볡 O

                       

List μΈν„°νŽ˜μ΄μŠ€                Set μΈν„°νŽ˜μ΄μŠ€                 

            λΆ€λͺ¨ - 15 μΆ”μƒλ©”μ„œλ“œ

μˆœμ„œ O                              μˆœμ„œ X

쀑볡 O                               쀑볡 X 

         

<4>

List κ΅¬ν˜„ν•œ 클래슀 : [ArrayList] Ex08_02.java, LinkedList, Stack, Vector λ“±λ“±

Set        "             : HashSet, TreeSet λ“±λ“±

Map      "             : HashMap, TreeMap, Hashtable, Properties λ“±λ“±   

 


ArrayList μ»¬λ ‰μ…˜ 클래슀

1) κ°€μž₯ 많이 μ‚¬μš©λ˜λŠ” μ»¬λ ‰μ…˜ ν΄λž˜μŠ€μ΄λ‹€. 

2) Collection 인터 ->  List 인페λ₯Ό κ΅¬ν˜„ν•œ 클래슀

νŠΉμ§• :  μˆœμ„œ O, 쀑볡 ν—ˆμš© O

 

μ •μˆ˜ λ°μ΄ν„°μ˜ 집합 - λ°°μ—΄ μ‚¬μš©

λ°°μ—΄ 문제점(단점)                                                          ArrayList

1) 100 ->  μžλ™μœΌλ‘œ 배열크기 증가 X                       ==>  크기 μžλ™ 증가

2) 데이터 μ²˜λ¦¬ν•˜λŠ” μž‘μ—…(  μΆ”κ°€, μˆ˜μ • , μ‚½μž…, μ‚­μ œ )  λ“±λ“±

 

// <E> μ œλ„€λ¦­ X
// ArrayList list = new ArrayList(   );  // 10 초기 μš©λŸ‰
ArrayList list = new ArrayList( 10 );  // 10 초기 μš©λŸ‰
			
// Object e :  λͺ¨λ“  νƒ€μž… λ§€κ°œλ³€μˆ˜ μ‚¬μš© κ°€λŠ₯
// e  == [e]lement == μš”μ†Œ

// 1) list.add()
list.add( 10 );  // int -> μ˜€ν† λ°•μ‹±  Integer -> Object  λ§€κ°œλ³€μˆ˜ λ‹€ν˜•μ„±
	
// 10개 λ„˜κ²Œ μ €μž₯κ°€λŠ₯
for (int i = 0; i < 10  ; i++) {
    list.add(   Rnd.getRand(1, 100) );	
}
// list.add(index , element );
list.add( 2, 100);  // μ‚½μž…

// 2) list.size()
System.out.println(  list.size() );  // 크기		

// 3) list.get()
System.out.println(  list.get(3) );

// foreach λ¬Έ == ν™•μž₯ forλ¬Έ          νŽΈλ¦¬ν•˜λ„€.
/*
for (Object   n :  list) {
	System.out.printf( "[%d]",   n  );
}
*/
		
// 4) list.clear(); = λͺ¨λ“  μš”μ†Œ μ‚­μ œ
// 5-1) list.remove( index );
// 5-2) list.remove( μš”μ†Œ );

// 6. list.clone()
ArrayList  list1 = new ArrayList();
list1.add( new Integer(4) );
list1.add( 5 );
list1.add(2);
list1.add(3);
list1.add(1);	
ArrayList li = (ArrayList) list1.clone();

String λ°°μ—΄ -> ArrayList 

String [] names = { "κΉ€κ°€μœ¨", "이재민", "ν—ˆμ •μ—°", "μž„ν¬μ§„", "정민지"}  ;
		
List  l = Arrays.asList( names );  // T...a κ°€λ³€ 인자       ( 문제 )
ArrayList  list = new ArrayList(l);

μ •λ ¬

list1.sort( new Comparator() {
	@Override
	public int compare(Object o1, Object o2) {
		int a = (int) o1;
		int b = (int) o2;
		return b - a;  // a-b
	}
} );

java.util.Iterator(반볡자) μΈν„°νŽ˜μ΄μŠ€ & Enumerator(μ—΄κ±°μž)

// λͺ¨λ“  μš”μ†Œ(element)λ₯Ό 좜λ ₯. - 반볡자(iterator) μ‚¬μš©
// java.util.Iterator μΈν„°νŽ˜μ΄μŠ€
Iterator  ir = list.iterator();  // iterator() λ©”μ„œλ“œ 		
// boolean hasNext() 
while (ir.hasNext()) {
	// next()
	String name = (String) ir.next();
	System.out.println( name );
}
// μ—΄κ±°μž
Enumeration  en = list.elements();
while (en.hasMoreElements()) {
	int n = (int) en.nextElement();
	System.out.println( n );
}

// 반볡자
Iterator  ir = list.iterator();
	while (ir.hasNext()) {
	int n = (int) ir.next();
	System.out.println( n );
}

 

String μ •λ ¬

list.sort( new Comparator() {  //  읡λͺ…(무λͺ…) 클래슀 
	@Override
	public int compare(Object o1, Object o2) {
	    String s1=	(String)o1;
	    String s2=	(String)o2;
	    // String λ©”μ„œλ“œ μ„€λͺ…
		// return s1.compareTo(s2);   // 0    μ–‘μˆ˜   음수
	    return s2.compareTo(s1);
	}
} );

// λžŒλ‹€ν‘œν˜„μ‹   -> λžŒλ‹€μ—°μ‚°μž
list.sort(   (o1,o2) -> ((String)o1).compareTo(((String)o2))  );  
		 
// Collections.sort(list);  // μ˜€λ¦„μ°¨μˆœ μ •λ ¬
// Collections.sort(list , Collections.reverseOrder() ); // λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬

ArrayList & Vector - List μΈν„°νŽ˜μ΄μŠ€κ΅¬ν˜„

- 100% λ™μΌν•œ μ»¬λ ‰μ…˜ 클래슀

- 차이점)  λ©€ν‹° μŠ€λ ˆλ“œ μ•ˆμ „μ„± ( Vector 동기화 처리 O )

Vector  list = new Vector(10);		
System.out.println( list.capacity() +" / " + list.size() );  // 초기 μš©λŸ‰ : 10
		
list.add(1);
list.add(2);
list.add(3);

System.out.println( list.capacity() +" / " + list.size() );  // 초기 μš©λŸ‰ : 10, 3
		
// list.add(1, 500);  // insert μ‚½μž…
// list.set(1, 500);  // μˆ˜μ •
// list.setElementAt(500, 1); // μˆ˜μ •
		
System.out.println(  list );
		
// μš©λŸ‰μ„ ν™•μž₯ν•˜λŠ” λ©”μ„œλ“œ
// list.ensureCapacity( 16 );
	 
list.setSize(5);

// list.firstElement() == list.get(0) == list.elementAt(0)
// list.lastElement()  == list.get( list.size() - 1 )
		
//list.removeElement(list);
//list.removeElementAt(0)
		
// list.subList(0, 0);

 

LinkedList

μˆœμ„œ μœ μ§€ O, 쀑볡 ν—ˆμš©  O, λΉ„μˆœμ°¨μ μœΌλ‘œ μ‚½μž…/μ‚­μ œ  - μ„±λŠ₯ 우수

단방ν–₯             λ§ν¬λ“œλ¦¬μŠ€νŠΈ

μ–‘λ°©ν–₯(더블)           "

ν™˜ν˜•                        "

더블 ν™˜ν˜•                "

 

κ°œλ…

Node n1 = new Node();
n1.value = 10; 
Node n2 = new Node();
n2.value = 20; 		
Node n3 = new Node();
n3.value = 30; 
Node n4 = new Node();
n4.value = 40;
		
n1.next = n2;
		
Node n100 = new Node();
n100.value = 100;

n2.next = n3;
		
n3.next = n4;
n4.next = null;
		
Node n5 = new Node();
n5.value = 50;
		
n4.next = n5;
n5.next = null;
		
n2.next = null;
Node node = n1;
		
while(  node != null ) {		
	System.out.println( node.value );
	node = node.next;
}

class Node{
	Node next;  // λ‹€μŒ μš”μ†Œ(λ…Έλ“œ)의 μ£Όμ†Œκ°’μ„ μ €μž₯ν•  μ°Έμ‘° λ³€μˆ˜
	Node prev;  // 이전 μš”μ†Œ(λ…Έλ“œ)의 μ£Όμ†Œκ°’μ„ μ €μž₯ν•  μ°Έμ‘° λ³€μˆ˜
	int value;     // μ €μž₯ν•  κ°’
}
// ArrayList, Vector () + 10 μš©λŸ‰
LinkedList   list = new LinkedList();
list.add(10);
list.add(20);
list.add(30);		
list.addFirst(40);
					
//System.out.println( list.get(2) ); 
list.getFirst();
list.getLast(); // λ…Έλ“œ(node)
		
// list.remove();
// 문제)   μš”μ†Œ(λ…Έλ“œ)의 값이 20보닀 큰 λ…Έλ“œλŠ” λͺ¨λ‘ μ œκ±°ν•˜μž. 
// 둜직	
// [ 10, 30]
//    0    1    
// μ‚­μ œλ₯Ό ν•˜λ”λΌλ„   λ‹€μŒ λ…Έλ“œ(μš”μ†Œ)의 μΈλ±μŠ€κ°€ 변경이 λ˜μ§€ μ•Šλ„λ‘ ν•˜κΈ° μœ„ν•΄ 뒀에 μš”μ†ŒλΆ€ν„° μ²΄ν¬ν•˜κ³  μ‚­μ œν•˜μž..
for (int i = list.size()-1; i >=0; i--) {
	if(   (int)list.get(i) >  20  )  list.remove(i);
}

list.removeIf(  new Predicate() {
	@Override
	public boolean test(Object t) {
		int n = (int) t;  // λ‹€μš΄μΊμŠ€νŒ… + μ–Έλ°•μ‹± ( Object -> Integer -> int )
		return   n > 20 ;
	}  // 읡λͺ…ν΄λž˜μŠ€
	
}  );

//list.removeIf(  t ->  (int)t > 20 );
//System.out.println(  list );
		
Iterator  ir	= list.descendingIterator();
while (ir.hasNext()) {
	int n = (int) ir.next();
	System.out.println( n );
} // while

// list.clear();
// System.out.println(list.isEmpty());

* κ²°λ‘ 1)  μˆœμ°¨μ μœΌλ‘œ μΆ”κ°€/μ‚­μ œ                     ArrayList  >  LinkedList μ„±λŠ₯ 우수
* κ²°λ‘ 2) λΉ„μˆœμ°¨μ μœΌλ‘œ μΆ”κ°€/μ‚­μ œ                  ArrayList  < LinkedList μ„±λŠ₯ 우수

 

Stack & Queue

// stack κ΅¬μ‘°( LIFO )   push()          peek()               pop()
// queue κ΅¬μ‘°( FIFO)   offer()         peek()                poll()
//                               isEmpty() / empty()
//                                size(), remove(), element(), search() λ“±λ“± λ©”μ„œλ“œ

 

μŠ€νƒ ꡬ쑰 : LIFO( Last In  First Out )

Stack => Vector => List

add()
push()
pop()
peek()
Stack s  = new Stack();
s.push("λ°•μ˜ˆλ¦°");
s.push("μ‘°λ―Όκ²½");
s.push("λ…Έμš©μ€€");
						
// μš”μ†Œλ₯Ό μ œκ±°ν•˜μ§€ μ•Šκ³  λ§ˆμ§€λ§‰ μš”μ†Œ 읽기
System.out.println( s.peek() );  
		
// μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³   λ§ˆμ§€λ§‰ μš”μ†Œ 읽기
System.out.println( s.pop() );  
System.out.println( s.pop() );  
System.out.println(  s.size() );

while(  s.size() != 0) {
	System.out.println( s.pop() );  
}

while( ! s.empty() ) {
	System.out.println( s.pop() );  
}

int index = s.search("μ‘°λ―Όκ²½");
System.out.println(index );

 

큐 ꡬ쑰 : FIFO( First In First Out )

Queue q = new LinkedList();
q.offer("μž„μ’…μœ€");
q.offer("ν™©μˆ˜λΉˆ");
q.offer("κΉ€κ°€μœ¨");
		
System.out.println( q );
		
// System.out.println(  q.poll() );
// System.out.println(  q.peek() );
		
while (  !q.isEmpty()) {
	System.out.println( q.poll() );	
}

μŠ€νƒν™œμš© : κ΄„ν˜Έμ²΄ν¬

Stack  s = new Stack();
String expression ;
System.out.print("> ν‘œν˜„μ‹ μž…λ ₯ ? ");
expression = new Scanner(System.in).nextLine();
		
for (int i = 0; i < expression.length(); i++) {		
	char one = expression.charAt(i);	
	if(   one == '(' ) {
		s.push(one);  // '('   -> "("
	}else if(one == ')' ) {
		s.pop();
	}
}// for
	
System.out.println(  s.size() );
		
if (  s.empty() ) {
	System.out.println("κ΄„ν˜Έκ°€ μΌμΉ˜ν•œλ‹€.");
} else {
	System.out.println("κ΄„ν˜Έκ°€ μΌμΉ˜ν•˜μ§€ μ•ŠλŠ”λ‹€.");
}
  • 넀이버 λΈ”λŸ¬κ·Έ κ³΅μœ ν•˜κΈ°
  • 넀이버 λ°΄λ“œμ— κ³΅μœ ν•˜κΈ°
  • 페이슀뢁 κ³΅μœ ν•˜κΈ°
  • μΉ΄μΉ΄μ˜€μŠ€ν† λ¦¬ κ³΅μœ ν•˜κΈ°