본문 바로가기
Java

11장 Collection FrameWork

by leko 2023. 7. 6.

 

배열

장점: 구조 간단, 데이터 읽는데 시간이 짧다

 

단점 : 크기변경 불가함 , 비순차적인 데이터의 추가 삭제에 시간이 오래 걸림

단) 순차적 추가, 삭제는 빠름

 

LinkedList: 배열의 단점 보완

불연속적으로 존재하는 데이터를 연결 link

 

class Node {

Node next; //다음 노드

Object obj; //데이터

}

데이터 추가 : 한번의 객체생성과 두번의 참조변경만으로 가능

단점: 데이터 접근성이 나쁨 (불연속적, 자기 다음밖에 몰라,)

더블리 링크드 리스트 : 이중 연결리스트 , 접근성 향상

 

컬렉션에 저장된 요소들을 읽어오는 방법을 표준화한 것

Iterator

boolean hasNext() //확인
Object next() //읽기

컬렉션에 iterator()를 호출해서 Iterator 구현한 객체를 얻어서 사용

public interface Collection{
public Iterator iterator();
}

ListIterator

Enumeration
boolean hasMoreElements()
Object nextElement()


Map에는 iterator()가 없다
keySet(), entrySet()는 키하고 밸류 values()를 호출해야 한다.
Map map = new HashMap();

Iterator it = map.entrySet().iterator();

Set eSet = map.entrySet();
Iterator it = eSet.iterator();



배열을 다루기 편리한 메서드 제공
1. 배열 출력 toString()
static String toString(boolean[] a)

2. 배열복사
int [] arr={1,2,3,4};
int [] arr2 = Arrays.copyOf(arr,arr.length); //arr2 = [1,2,3,4]
int [] arr3 = Arrays.copyOf(arr, 3);
int [] arr4 = Arrays.copyOf(arr, 7);
int [] arr5 = Arrays.copyOfRange(arr, 2, 4);
int [] arr5 = Arrays.copyOfRange(arr, 0, 7);

int[]arr = new int[5];
Arrays.fill(arr,9);// arr =[9,9,9,9,9]
Arrays.setAll(arr, (i) -> (int)(Math.random()*5)+1);



배열의 정렬과 검색   
이진탐색은 정렬된 배열에서만 가능 
int [] arr = { 3,2,0,1,4};

Arrays.sort(arr); //정렬 후
System.out.println(Arrays.toString(arr)); // [0,1,2,3,4]
int idx = Arrays.binarySearch(arr, 2); // 2가 존재하는 인덱스 구하기 idx = 2 


순차 검색 : 앞에서부터 순서대로 찾기
이진 검색 : 

Arrays : 배열을 다루기 위한 매서드 제공
int [][] arr = {{11,12}, {21,22}};
int [][] arr2 = {{11,12}, {21,22}};

다차원 배열의 출력
Arrays.deepToString(arr); // [[11,12],[21,22]]

다차원 배열의 비교
Arrays.deepEquals(arr, arr2); // true

배열을 list로 변환
List list = Arrays.asList(1,2,3,4,5);
List list = Arrays.asList(new Integer[]{1,2,3,4,5});
List list = new ArrayList(Arrays.asList(1,2,3,4,5));



Comparator 와 Comparable
오른쪽이 크면 음수 오른쪽이 작으면 양수 같으면 0
객체정렬에 필요한 메서드(정렬기준 제공)를 정의한 인터페이스

Comparable 기본 정렬기준을 구현하는데 사용
int compareTo(Object o) // 주어진 객체를 자신this과 비교


Comparator 다른 기준으로 정렬하고자 할때 사용
int compare(Object o1, Object o2);
boolean equals(Object obj); //equals를 오버라이딩하라는 뜻



Integer는 Comparable를 구현함(기본 정렬 기준을 제공함)













List 순서있고 중복있다

HashSet 순서없고 중복없다
Set 인터페이스를 구현한 대표적인 컬렉션 클래스
순서유지 원하면 LinkedHashSet클래스 사용하기

boolean add(Object o)는 저장할 객체의 equals()와 hashCode()호출

TreeSet
범위 검색과 정렬에 유리한 컬렉션 클래스
HashSet보다 데이터 추가, 삭제에 시간이 더 걸림
이진트리
이진탐색트리 binary search tree : 부모보다 작은 값은 왼쪽 , 큰 값은 오른쪽에 저장한다
data 저장 과정 boolean add (Object o)

해싱: 해시함수로 해시테이블에 데이터를 저장 검색

HashMap()
HashMap(int initialCapacity)

 

 

11장 


Ex) Objects 객체  Arrays 배열 Collections 컬렉션

Collections : 컬렉션을 위한 메서드static 제공
1. 컬렉션 채우기 fill() 복사 copy() 정렬 sort() 검색 binarySearch()

2. 컬렉션 동기화  SynchronizedXXX()
List syncList = Collections.synchronizedList(new ArrayList(~~));

3. 변경불가 컬렉션 만들기 unmodifiableXXX()
static Coolection unmodifiableCollection(Collection c)

4. singleton collection 만들기 singletonXXX() 객체 1개만 저장
static Set singleton(Object o)

5. 한종류의 객체만 저장하는 컬렉션 만들기 checkedXXX()

'Java' 카테고리의 다른 글

입출력 스트림과 파일 입출력  (0) 2023.07.13
12장 Collection FrameWork Generics  (0) 2023.07.10
object oriented programming 개념 정리  (0) 2023.07.08
9장 Java.lang package & util classes  (0) 2023.07.04
5장 Array  (0) 2023.06.28