③ Iterator, ListIterator, Enumeration
: 모두 컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스이다.
- Iterator : 컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스
- ListIterator : Iterator에 양방향 조회기능추가 (List를 구현한 경우만 사용 가능)
- Enumeration : Iteraotr의 구버전
- Iterator의 정의
public interface Collection {
...
public Iterator iterator();
...
}
public interface Iterator {
boolean hasNext(); // 1. 읽어올 요소가 남아있는지 확인
Object next(); // 2. 다음 요소를 읽기
void remove();
}
→ Collection인터페이스에는 'Iterator를 구현한 클래스의 인스턴스'를 반환하는 iterator()를 정의하고 있다.
- Iterator 예제
import java.util.*;
class JavaJungsuk_CollectionFramework_Iterator {
public static void main(String[] args) {
ArrayList list=new ArrayList(); //다른 컬렉션으로 변경할 때는 이 부분만 고치면 된다.
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
Iterator it=list.iterator();
while(it.hasNext()) { //boolean hasNext()로 읽어올 요소가 있는지 확인.
Object obj=it.next(); //Object next()로 다음 요소를 읽어옴
System.out.println(obj);
}
}
}
결과
1
2
3
4
5
→ 컬렉션 클래스에 대해 iterator()를 호출하여 Iterator를 얻은 다음 반복문, 주로 while문을 사용해서 컬렉션 클래스의 요소들을 읽어올 수 있다.
import java.util.*;
class JavaJungsuk_CollectionFramework_Iterator {
public static void main(String[] args) {
ArrayList list=new ArrayList(); //다른 컬렉션으로 변경할 때는 이 부분만 고치면 된다.
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
Iterator it=list.iterator();
while(it.hasNext()) { //boolean hasNext()로 읽어올 요소가 있는지 확인.
Object obj=it.next(); //Object next()로 다음 요소를 읽어옴
System.out.println(obj);
}
it=list.iterator(); //iterator는 일회용이라 다 쓰고나면 다시 얻어와야 함.
while(it.hasNext()) {
Object obj=it.next();
System.out.println(obj);
}
}
}
결과
1
2
3
4
5
1
2
3
4
5
→ iterator는 1회용이라 다 쓰고나면 다시 얻어와야 한다.
④ Map과 Iterator
: Map에는 iterator()가 없기 때문에 keySet(), entrySet(), values()를 사용하여 호출해야 한다.
Map map=new HashMap();
...
Iterator it=map.entrySet().iterator();
//Iterator it=map.keySet().iterator();
//Iterator it=map.values().iterator();
⑤ Arrays의 메서드
: Arrays에 정의된 메서드는 모두 static메서드이다.
- Arrays의 메서드(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)
→ Arrays에 정의된 toString()은 배열을 출력한다.
<배열의 복사 - 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]
int[] arr6=Arrays.copyOfRange(arr, 0, 7); //arr6=[0,1,2,3,4,0,0]
→ copyOf()는 배열 전체를, copyOfRange()는 배열의 일부를 복사해 새로운 배열을 만들어 반환한다. 늘 그렇듯이 지정된 범위의 끝은 포함되지 않는다.
- Arrays의 메서드(2)_채우기, 정렬, 검색
<배열 채우기 - 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,1,2,1] 람다식
→ fill()은 배열의 모든 요소를 지정된 값으로 채운다.
setAll()은 배열을 채우는데 사용할 함수형 인터페이스를 매개변수로 받는다.
<배열의 정렬과 검색 - sort(), binarySearch()>
int[] arr={3,2,0,1,4};
int idx=Arrays.binarySearch(arr, 2); //idx=-5 잘못된 결과
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); //[0,1,2,3,4]
int idx=Arrays.binarySearch(arr, 2); //idx=2 올바른 결과
→ sort()는 배열을 정렬할 때, binarySearch()는 배열에 저장된 요소를 검색할 때 사용한다.
binarySearch()는 배열에서 지정된 값이 지정된 위치(index)를 찾아서 반환하는데 반드시 정렬된 상태여야 한다.
- Arrays의 메서드(3)_비교와 출력
<문자열의 비교와 출력 - equals(), toString()>
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.pritnln(Arrays.deepToString(arr2D)); //[[11, 12], [21, 22]]
→ toString()으로 배열의 모든 요소를 문자열로 출력할 수 있다.
다차원 배열에는 deepToString()을 사용해야 한다.
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
→ equals()는 일차원 배열에만 사용 가능하고 두 배열에 저장된 모든 요소를 비교해서 같으면 true, 다르면 false를 반환한다.
다차원 배열 비교에는 deepEquals()를 사용해야한다.
- Arrays의 메서드(4)_변환
<배열을 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 예외 발생
→ asList()는 배열을 List에 담아서 반환한다.
→ 주의할 점은 asList()가 반환한 List의 크기를 변경할 수 없기 때문에 추가 또는 삭제가 불가능하다. 저장된 내용은 변경 가능하다.
List list=new ArrayList(Arrays.asList(1,2,3,4,5));
→ 크기를 변경할 수 있는 List가 필요하다면 위와 같이 하면 된다.
'프로그래밍 > Java' 카테고리의 다른 글
Java_컬렉션프레임웍(5)_TreeSet (0) | 2023.01.04 |
---|---|
Java_컬렉션 프레임웍(4)_Comparator와 Comparable, HashSet (0) | 2023.01.01 |
Java_컬렉션 프레임웍(2)_List인터페이스_ArrayList, LinkedList, Stack과 Queue (0) | 2022.12.25 |
Java_컬렉션 프레임웍(1) (0) | 2022.12.21 |
Java_날짜와 시간&형식화 (0) | 2022.12.18 |