본문 바로가기

프로그래밍 언어/Java

Week12) Java Programming Lab : Generic Collections

Java-Lecture12.pdf
1.04MB


1. The collections framework

1.1 collection 

  • java.util 패키지
  • collection = 자료구조 객체 
  • 자바 collection은 collections 프레임워크에 속한 것 
    • 이미 생성되어 있는 자료 구조 사용 가능
    • 자료구조 조작을 위한 메소드 인터페이스 사용 가능 
     

 

2. Wrapper Classes

  • primitive 데이터타입들은 그에 해당하는 wrapper 클래스를 가지고 있음 
  • 원시 데이터에 대한 객체 버전을 제공하는 wrapper 클래스 

2.1 Autoboxing and Auto-Unboxing

public class Boxing{
	public static void main(String[] args){
    	// boxing (원시 데이터 -> wrapper class) 
    	float f = 125.3f;
        Float fObject = new Float(); // or 그냥 f 대입
        
        int i = 23;
        Integer iObject = new Integer(); // or 그냥 i 대입 
        
        // unboxing
        int j = iObject;
        
    }
}

3. Lists

  • sequence 
  • Collection 상속
  • 중복 요소를 가질 수 있음 
  • 메소드 
    • 인덱스로 요소 조작 
    • 요소 범위 조작
    • 요소 검색
    • ListIterator를 이용해서 요소에 접근 
  • List 구현체 
    • ArrayList
    • LinkedList
    • Vector 
  • Cont.
    • ArrayList와 Vector 클래스는 List의 사이즈를 조절할 수 있는 배열 구현체 -> 요소 삽입 비효율적 
      • Vector는 디폴트로 동기화되고  ArrayList는 되지 않음 
      • vector -> 멀티스레딩 지원 
      • ArrayList가 better, 더 빠름 
    • LinkedList -> 요소 삽입 삭제 효율적 

3.1 ArrayList and Iterator

  • add : 삽입
  • size : 요소 개수 반환
  • get : 특정 인덱스에 있는 요소 반환 
  • 다이나믹, 사이즈 지정 X 
  • Iterator 
    • 리스트를 traverse할 수 있는 포인터 
import java.util.*;


public class TestBoxing {
	public static void main(String[] args) {
		Vector  dataStructure = new Vector<String> ();
		
		
		dataStructure.add("Hello");
		String array[] = {"world!", "Java", "Interesting"};
			for (String s : array) {
				dataStructure.add(s);
			}
			
			// print all elements of the vector
		for(int i = 0;i<dataStructure.size();i++) {
			
			System.out.println(dataStructure.get(i));
		}
		
		// print all elements of the vector using iterator
		
		ListIterator e = dataStructure.listIterator(); // pointer
		System.out.println("-------------------");
		while(e.hasNext()) { // update / write
			String currentValue = (String) e.next(); 
			e.set(currentValue+"++");
		}
		//e = dataStructure.listIterator(); // reset the pointer
		while(e.hasPrevious()) { // read
			System.out.println(e.previous());
		}
		
	}
}

3.2 LinkedList

4. Collections framework Algorithms

Collections. * 
  • sort : 정렬
  • reverse : 요소 순서 반대로
  • shuffle : 순서 랜덤으로 섞기
  • copy : 특정 배열을 빈 배열에 복사
  • fill : 배열을 두번째 파라미터 값으로 전부 채우기
  • binary search 
  • frequency
  • disjoint 
  • min
  • max
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Arrays;
import java.util.Collections;
public class AlgorithmsTest {


 
	   public static void main( String[] args )
	   {
	      String[] suits = { "Hearts", "Diamonds", "Clubs", "Spades" };
	      
	      // Create and display a list containing the suits array elements
	      List< String > list = Arrays.asList( suits ); // create List
	      System.out.printf( "Unsorted array elements: %s\n", list );

	      Collections.sort( list ); // sort ArrayList
	      
	      System.out.println("Hollo thore\n".replace('o', 'e')); //returns 
 
	      
	      Collections.shuffle(list);
	      System.out.printf( "Shuffle array elements: %s\n", list );
	      
	      String[] suitsCopy = new String [4];
	      List< String > listCopy = Arrays.asList(suitsCopy);
	      Collections.copy(listCopy, list);
	      System.out.printf( "List Copy elements: %s\n", listCopy );
	      
	      List< String > listFill = Arrays.asList(suitsCopy);
	      Collections.fill(listFill, "R");
	      System.out.printf( "List Fill elements: %s\n", listFill );
	      
	      int index = Collections.binarySearch(list, "Spades");
	      System.out.printf( "Element Spades exists in the List at index: %d\n", index );
	      
	      int frequancy = Collections.frequency(listFill, "R");
	      System.out.printf( "the repetition of R in the listFill is: %d\n", frequancy );
	      
	      
	      boolean disjoint = Collections.disjoint(list, listFill);
	      System.out.printf( "The disjoint of list and listFill is %b\n", disjoint );
	      
	   } // end main
	} // end class  

	
 

5. Stack

  • java.util 
  • vector 클래스 상속 

// Fig. 20.14: StackTest.java
// Stack class of package java.util.
import java.util.Stack;
import java.util.EmptyStackException;

public class StackTest 
{
   public static void main( String[] args )
   {
      Stack< Number > stack = new Stack< Number >(); // create a Stack

      // use push method
      stack.push( 12L ); // push long value 12L
      System.out.println( "Pushed 12L" );
      printStack( stack );
      stack.push( 34567 ); // push int value 34567
      System.out.println( "Pushed 34567" );
      printStack( stack );
      stack.push( 1.0F ); // push float value 1.0F
      System.out.println( "Pushed 1.0F" );
      printStack( stack );
      stack.push( 1234.5678 ); // push double value 1234.5678
      System.out.println( "Pushed 1234.5678 " );
      printStack( stack );

      // remove items from stack
      try 
      {
         Number removedObject = null;

         // pop elements from stack
         while ( true ) 
         {
            removedObject = stack.pop(); // use pop method
            System.out.printf( "Popped %s\n", removedObject );
            printStack( stack );
         } // end while
      } // end try
      catch ( EmptyStackException emptyStackException ) 
      {
         System.out.println("Finished");
      } // end catch
   } // end main

   // display Stack contents
   private static void printStack( Stack< Number > stack )
   {
      if ( stack.isEmpty() )
         System.out.println( "stack is empty\n" ); // the stack is empty
      else // stack is not empty
         System.out.printf( "stack contains: %s (top)\n", stack );      
   } // end method printStack   
} // end class StackTest

6. PriorityQueue

  • Queue 인터페이스 상속 
  • offer
  • poll
  • peek
  • clear
  • size

 

7. Set

  • 중복 X
  • 자동 정렬 
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

public class TestSet {
	public static void main(String[] args) {
		Set<Integer> setDataStructure = new HashSet<Integer>();
		setDataStructure.add(12);
		setDataStructure.add(8);
		setDataStructure.add(12);
		setDataStructure.add(9);
		setDataStructure.add(1);
		for (Integer i : setDataStructure) {
			System.out.println(i);
			
		}
	
	}
}

 

References


  • 성균관대학교 소프트웨어학과 타메르 교수님 <자바 프로그래밍 실습>