Day 51

ChangWoo·2023년 5월 26일
0

자바의 정석

목록 보기
49/71

ch 11-22~24 Iterator, Enumeration, Map과 Iterator

Iterator, ListIterator, Enumeration

  • 컬렉션에 저장된 데이터를 접근하는데 사용되는 인터페이스
  • hasNext()는 읽어 올 요소가 남아있는지 확인 후 있다면, next()를 불러온다. / 없다면 false
  • Enumeratrion은 Iteratro의 구버젼
  • ListIerator는 Iterator의 접근성을 향상시킨 것 (단방향 -> 양방향)
  • ListIterator는 previous(이전요소)가 있다.
  • 컬렉션(List,Set,Map)에 저장된 요소들을 읽어오는 방법을 표준화한 것
  • 각각의 컬렉션마다 구조가 다르기 때문에 읽어오는 방법이 다르다. 그 방법을 표준화 한 것이 Iterator다.
  • Iterator는 hasNext()로 요소를 확인 후 next()로 읽어온다.
  • 컬렉션에 iterator()를 호출해서 Iterator를 구현한 객체를 얻어서 사용.
List list = new ArrayList(); // 다른 컬렉션으로 변경할 때는 이 부분만 고치면 된다.
Iterator it = list.iterator(); // Iterator 객체를 반환
while(it.hasNext()) { // boolean hasNext() 읽어올 요소가 있는지 확인
	System.out.println(it.next()); // Object next() 다음 요소를 읽어옴
}
public interface Collection {
 ...
 public Iterator iteratro(); // Iterator는 Collection 인터페이스에 정의되어 있으므로 Collection의 자손인 List와 Set을 모두 가지고 있다.
 ...
}

Map과 Iterator

  • Map에는 iterator()가 없다. keySet(), entrySet(), values()를 호출해야 한다.
public interface Collection {
	...
    public Iterator iterator();
    ...
}
Map map = new HashMap();
	...
Iterator it  = map.entrySet().iterator(); = (Set eSet = map.entrySet(); ) + (Iterator it = eSet.iterator(); ) // entry는 key,value

ch 11-25~29 Arrays

Arrays(1/4) - 배열을 다루기 편리한 메서드(static) 제공

  • 1.배열의 출력 - toString()
static String toString(boolean[] a)
static String toString(byte[] a)
static String toString(char[] a)
static String toString(short[] a)
static String toString(int[] a)
static String toString(long[] a)
static String toString(float[] a)
static String toString(double[] a)
static String toString(Object[] a)
  • 2.배열의 복사 - copyOf(), copyOfRange()
int[] arr = {0,1,2,3,4};
int[] arr2 = Arrays.copyOf(arr, arr.length);	// arr2=[0,1,2,3,4]
int[] arr3 = Arrays.copyOf(arr, 3);				// arr3=[0,1,2]
int[] arr4 = Arrays.copyOf(arr, 7);				// arr4=[0,1,2,3,4,0,0]
int[] arr5 = Arrays.copyOfRange(arr, 2, 4);		// arr5=[2,3] -> 4는 불포함
int[] arr6 = Arrays.copyOfRange(arr, 0, 7);		// arr6=[0,1,2,3,4,0,0] 
  • copyOf(), copyOfRange() : 새로운 배열을 생성해서 반환한다.

Arrays(2/4) - 배열을 다루기 편리한 메서드(static) 제공

  • 3.배열 채우기 - fill(), setAll()
int[] arr = new int[5];
Arrays.fill(arr, 9); 	// arr=[9,9,9,9,9]
Arrays.setAll(arr, (i) -> (int)(Math.random()*5)+1);  // arr=[1,5,2,1,1]
  • (int)(Math.random()*5)+1) = 람다식(난수(랜덤값)로 채우는데, +1을 해서 1<=x<6이 된다.)
  • 4.배열의 정렬과 검색 - sort(), binarySearch()
int[] arr = {3, 2, 0, 1, 4};
int idx = Arrays.binarySearch(arr, 2);	// idx=-5 -> 잘못된 결과 (정렬이 되어 있지 않아 잘못된 결과가 나옴.)
Arrays.sort(arr_; // 배열 arr을 정렬한다.
System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4]
int idx = Arrays.binarySearch(arr, 2);  // idx=2 -> 올바른 결과
  • binarySearch()를 사용하기 위해서는 먼저 정렬을 해줘야 한다.
  • binarySearch()는 이진탐색으로 정렬된 배열에만 가능하다.

순차 검색과 이진 검색

  • 순차 검색 : 값을 앞에서부터 순서대로 찾는 것.
  • 정렬이 되어 있지 않는 상태로 이진 검색에 비해 검색 시간이 많이 소요된다.
  • 이진 검색 : 하나의 값을 기준으로 그 기준보다 작은 값인지 큰 값인지 구분하여 비교해서 기준 값을 찾는 것.
  • 정렬되어 있는 상태로 순차 검색에 비해 검색 시간이 적게 소요된다.

Arrays(3/4) - 배열을 다루기 편리한 메서드(static) 제공

  • 5.다차원 배열의 출력 - deepToString()
int[] arr = {0,1,2,3,4};
int[][] arr2D = {{11,12}, {21,22}};
System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4]
System.out.println(Arrays.deepTostring(arr2D)); // [[11, 12], [21, 22]]
  • 1차원 배열은 toString()을 사용하면 된다.
  • 2차원 배열 혹은 다차원 배열은 deepToString()을 사용해야 한다.
  • 6.다차원 배열의 비교 - deepEquals()
String[][] str2D   = new String[][]{{"aaa","bbb"},{"AAA","BBB}};
String[][] str2D2  = new String[][]{{"aaa","bbb"},{"AAA","BBB}};
System.out.println(Arrays.equals(str2D, str2D2));	   // false
System.out.println(Arrays.deepEquals(str2D, str2D2)); // true

Arrays(4/4) - 배열을 다루기 편리한 메서드(static) 제공

  • 7.배열을 List로 변환 - asList(Object... a)
List list = Arrays.asList(new Integer[]{1,2,3,4,5}); // list =[1, 2, 3, 4, 5]
List list = Arrays.asList(1,2,3,4,5);				// list =[1, 2, 3, 4, 5]
list.add(6); // UnsupportedOperationException 예외 발생
List list = new ArraysList(Arrays.asList(1,2,3,4,5));
  • (Object... a) : 가변 매개변수로 개수가 정해져 있지 않다.
  • List는 읽기 전용이므로 add를 하면 예외가 발생한다.
  • new ArrayList를 추가해서 새로운 ArrayList를 만들면 변경 가능해진다.
  • 8.람다와 스트림 관련 - parallelXXX(), spliterator(), stream()
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글