컬렉션 Collection

Jonny·2022년 2월 22일
0

컬렉션 Collection

목록 보기
12/12

1. 컬렉션 Collection

  • 자료구조 과목에서 배우는 많은 자료구조들을 컬렉션으로 만들어 제공
  • 제네릭이라는 기법으로 구현
  • 가변크기의 컨테이너로 만들어짐

1) 컬렉션을 위한 자바 인터페이스와 클래스

        Collection<E>			                 Map<K, V>
	    /     |          \                           |
    set<E>      List<E>   Queuq<E>		             |	        인터페이스
------------------------------------------------------------------------
      /	      | 	       \      \                  |	           클래스
HashSet<E> ArrayList<E> Vector<E> LinkedList<E>    HashMap<K, V>
	          |
	        Stack<E>

[Collection 상속, 단일 클래스 객체]

  • Vector, ArrayList : 가변크기의 배열
  • LinkedList : 노드들이 링크로 연결되는 리스트
  • Stack : 스택
  • HashSet : 집합, 중복되는 요소들을 제거해준다.

[Map 상속]

  • HashMap : 키와 값의 쌍으로 이루어진 값을 지정하는 컬렉션

2) 제네릭(generic)기법

  • 컬렉션은 제네릭기법으로 만들어짐
  • 컬렉션 클래스 이름에 , , 등이 포함 -> 타임매개변수 (generic type)
  • Vector -> 정수만 저장하는 벡터
  • Vector -> 문자열만 저장하는 벡터
  • 특정타입만 다루지 않고, 여러 종류의 타입으로 변신할 수 있도록 를 사용
    단, int, char, double 등 기본타입으로 제네릭 사용불가 -> Wrapper 클래스로 지정

ex) 제네릭타입을 가진 클래스

	class Stack<E> {
		...
		void push(E element) {...}
		E pop() {...}
		...
	}
  
  	Stack<String> s = new Stack<String>();
		void push(String element) {...}
		String pop() {...}

	E : element 요소
	T : type
	V : value
	K : key
  

2. ArrayList

  • java.util.ArrayList
  • 가변크기의 배열을 구현, Vector와 거의 동일.
  • 스레드간에 동기화 지원 X, 다수의 스레드가 동시에 ArrayList 요소 삽입/삭제시
    데이터 훼손 우려되지만, 멀티 스레드 동기화 시간 소모없어 vector보다 속도빠름
  • 중간에 빈공간이 생기면 요소 위치 자동 이동시킴
  • 초기 사이즈 10이나 부족하면 자동으로 늘어남

    1) 주요 메서드

	boolean  add(E elem) 			  			: 맨 뒤에 데이터 elem 추가
	void 	 add(int idx, E elem) 		      	: idx 위치에 elem 추가
	boolean  addAll(Collection<? extends E> c) 	: 컬렉션 c의 모든 요소를 맨 뒤에 추가
	E 	 get(int idx) 			  				: idx위치의 요소 리턴
	E 	 set(int idx, E elem)				    : idx위치의 요소를 elem으로 수정 (이전값은 리턴해줌)
	void 	 clear() 			  				: 모든 요소 삭제
	E 	 remove(int idx) 		   				: idx위치 요소 삭제
	boolean  remove(Obeject o) 		   			: o와 동일한 요소 삭제
	int 	 size() 			  				: 저장된 요소의 개수 리턴
	boolean  contains(Object o)		   			: o를 포함하고 있으면 true 리턴
	int 	 indexOf(object o)		 		    : o가 저장된 인덱스번호 리턴, 없으면 -1
	boolean	 isEmpty() 			  				: 저장된 요소가 없으면 true
	Object[] toArray() 			 				: 모든 요소를 포함한 배열 리턴

2) 객체 생성

	ArrayList<타입매개변수> 변수명 = new ArrayList<타입매개변수>();

3. Vector : java.util.Vector

  • 가변적 배열 구조, 동기화 지원

1) 객체생성

Vector<타입매개변수> 변수명 = new Vector<타입매개변수>();

2) 주요 메서드

	boolean		add(E elem)				 : 맨뒤에 추가 
	void 		add(int idx, E elem) 	 : idx 위치에 elem 추가 
	E		get(int idx) 
	E		elementAt(int idx) 
	void		clear()
	E		remove(int idx)
	boolean		remove(Object o)
	E		set(int idx, E elem) 
	int		size()  					 : 저장된 요소의 개수 리턴 
	int		capacity() 					 : 저장공간 크기 리턴 
	Object[] 	toArray()  				 : 배열로 만들어 리턴 
	int		indexOf(Object o) 			 : o의 인덱스번호 리턴 
	boolean 	isEmpty()				 : 저장된 요소가 하나도 없으면 true

4. 제네릭 없이 사용

  • 제네릭없이 사용시 Object로 처리


5. Interator : java.util.Iterator(반복자)

  • 요소가 순서대로 저장된 컬렉션에서 요소를 순차적으로 검색할 때 사용하면 편함

1) 주요 메서드

	boolean	hasNext() 	: 다음에 방문할 요소가 있으면 true
	E 	next()	 		: 다음요소 리턴
	void 	remove()	: 마지막으로 리턴된 요소제거

6. HashMap<K, V> : java.util.HashMap

  • 키(key)와 값(value)의 쌍으로 구성되는 요소들을 다룬다
  • K = key로 사용할 데이터 타입
  • V = 값으로 사용할 데이터 타입
  • 데이터 저장시, key와 값을 받아 key를 이용하여 해시함수를 실행,
    해시함수가 리턴하는 위치에 키와 값을 저장하는 형태,
    반대로 데이터를 불러올 때 키를 이용하여 꺼내오는데,
    키를 이용하여 동일한 해시함수를 실행하여 값이 저장된 위치를 알아내어 값을 리턴한다.
    -> index없다 => key로 꺼냄 (사용자 정의 인덱스 값)
    -> index 중복x => key값이 중복되면 안된다.

1) 객체 생성

	HashMap<key제네릭타입, value제네릭타입> 변수명 = new HashMap<key제네릭, value제네릭>();

2) 주요 메서드

	V	put(K key, V value) 			: key value 쌍으로 요소하나 추가
	V	get(K key) 						: key를 주고 값을 꺼내기
	V 	remove(K key)					: key에 해당하는 key, value 세트 삭제
	int	size()							: 제공된 요소의 개수
	void clear()						: 전체 삭제
	Set<K> keySet() 					:   key들만 모아서 Set 타입으로 리턴
	boolean isEmpty 					: 저장된게 없으면 true
	boolean containsKey(Object key) 	: key를 포함하면 true
	boolean containsValue(Object value) : value를 포함하면 true

7. Set -> HashSet

  • 순서가 없고, 중복 요소가 없는 컬렉션. 동일한 값 저장 불가

8. Properties

  • HashMap의 구버젼(?)
  • K, V 형태로 데이터 저장, K, V 모두 String으로만 처리됨.
  • 주로 어플리케이션의 환경 설정과 관련된 정보를 .properties 확장자의 파일에 저장해놓고
    해당 파일을 자바 코드로 불러올때 사용하는 자바 클래스
profile
Jonny의 Java 공부

0개의 댓글