2022. 7. 25. 21:45ㆍ3층 1구역 - 개발의 장/JAVA
1. Interator??
- (계산·컴퓨터 처리 절차를) 반복하다
- 출처 - 네이버 검색(https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=iterate)
반복문의 성향을 띈다.
어떤 인덱스가 있으면 그 인덱스의 값을 돌면서 출력할 개체가 있다면
그 값을 출력한다.
그런데 반복문이라면 for나 while등도 사용이 가능할텐데 왜
interator를 따로 사용하는 것일까?
인덱스(배열)이 정해진 곳은 처음과 끝이 정해져 있기 때문에
for문 같은 반복문을 써도 괜찮다.
단, HashSet 같은 경우 인덱스가 존재하기는 하나 그 경계가 모호하여
for문을 쓰는 것이 애매하는 경우가 있을 수 있다.
그때 Iterator를 쓰는 것이 아닐까....? 라고 생각한다.
둘의 성능은 얼마나 차이나는지는 모르겠으나
stackoverflow.com/questions/22267919/iterator-vs-for
14년도에 쓰여진 이글을 훑어보면 다른 개발자분들도 이걸 알고 쓰시는 분은 적은 듯 하다.
그냥 코드의 유지보수성?, 성능이나 가독성 등을 고려하여 둘 중 하나를 선택하는 듯.(
의견을 적당적당 읽어서 사실 잘 모름..;;)
2.예제
package hashSets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
public class Ex05 {
public static void main(String[] args) {
HashSet<String> hs = new HashSet();
hs.add("1.대부");
hs.add("2.반지의 제왕");
hs.add("3.겨울왕국");
hs.add("4.다크 나이트");
hs.add("5.해리포터");
hs.add("6.공공의 적");
for (String data : hs) {
System.out.println(data); // 항상 for문 가능
}
System.out.println();
Iterator<String> it = hs.iterator(); // iterator를 사용하여
while (it.hasNext()) { // hasNext를 사용하여 출력가능
String data2 = it.next();
System.out.println(data2);
}
ArrayList<String> list = new ArrayList<>(hs);
// list.sort(null); //순서가 있다면 list.sort를 써 오름차순을 이용하여 출력가능
Collections.sort(list); // 오름차순
Collections.reverse(list); // 내림차순
System.out.println(list);
}
}
결과
1.대부
5.해리포터
6.공공의 적
2.반지의 제왕
4.다크 나이트
3.겨울왕국 <<항상 for문을 이용하여 출력가능
1.대부
5.해리포터
6.공공의 적
2.반지의 제왕
4.다크 나이트
3.겨울왕국 << Iterator를 이용한 출력
[6.공공의 적, 5.해리포터, 4.다크 나이트, 3.겨울왕국, 2.반지의 제왕, 1.대부]
ArrayList를 사용하여 sort를 이용하면 HashSet을 오름차순으로 나열 가능함.
ArrayList를 사용하여 reverse를 이용하면 HashSet을 내림차순으로 나열 가능함
2-1. Iterator를 이용한 remove
package hashSets;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
public class Ex06 {
public static void main(String[] args) {
HashSet<String> hs = new HashSet();
hs.add("1.대부");
hs.add("2.반지의 제왕");
hs.add("3.겨울왕국");
hs.add("4.다크 나이트");
hs.add("5.해리포터");
hs.add("6.공공의 적");
System.out.println(hs);
Scanner input = new Scanner(System.in);
System.out.print("삭제 할 책 : ");
String name = input.nextLine();
//항상 for문보다 사용할 수 있는것이 많다.
Iterator<String> it = hs.iterator(); //Iterator를 사용하여 remove도 가능하다.
while(it.hasNext()) { //hasNext는 데이터를 가져올 값이 있으면 true를 반환.
if(name.equals(it.next())) {//next는 매개변수 혹은 Iterator 되는 타입으로 변경
//Iterator에 값이 String이니까 String으로 반환.
System.out.println("삭제완료");
it.remove();
}
}
System.out.println(hs);
}
}
'3층 1구역 - 개발의 장 > JAVA' 카테고리의 다른 글
JAVA - HashMap(2022-07-25) (0) | 2022.07.25 |
---|---|
JAVA - HashSet을 이용한 로또 번호 생성하는 프로그램(2022-07-25) (0) | 2022.07.25 |
JAVA - HashSet과 isEmpty와 contains (2022-07-25) (0) | 2022.07.25 |
JAVA - HeshSet과 bool과 remove (2022-07-25) (0) | 2022.07.25 |
JAVA - HashSet과 제네릭의 관계 (2022-07-25) (0) | 2022.07.25 |