JAVA(초기 공부)

[JAVA] Collection Framework

자몽비앙코 2025. 3. 8. 15:36

https://blog.naver.com/oshares/223612843004

 

Cerule has granule : 네이버 블로그

세룰리안블루는 그래뉼래이션이 있어요.

blog.naver.com

 

수업시간에 배운 내용과 내가 좀 더 찾아본 내용을 취합하여 정리해둠

컬렉션 프레임워크는 표준화된 기본 '틀'같은 것

List, Set, Map 같은 것들이 있다.

Set은 수학에서 1단원에 배우는 집합같은 존재로 보면 되고,

List는 배열과 비슷한 것, index 번호가 붙은 순차적인 자료들

Map은 key와 value가 쌍으로 이어진 구조의 데이터와 관련된 업무를 수행해야할 때 사용한다.

Collection 인터페이스를 이용하면, 나중에 set, list로 바꿀 수 있으나,

처음부터 set을 쓰면 list는 못쓴다고한다. 이는 상속관계와 관련이 있다고만 정리해둠

1. HashSet

수학의 '집합'이 프로그램화 된 것!

생성: HashSet<Integer> name = new HashSet <Integer>(); * import필요

특징: 순서를 유지하지 않는 데이터의 집합으로, 데이터의 중복을 허용하지 않는다. (집합 생각할 것!) -> 유일한 값의 처리에 사용됨

순서를 유지하지 않으므로 index로 접근이 불가능하다.

list 보다는 처리속도가 빠르다는 장점이 있다.

사용방식

name={1,2,3}, B={3,4,5}, C={1,2} 일때

name.containsAll(B) ? false

name.addAll(B) = {1,2,3,4,5,} : 중복되는 값은 하나만 저장된다.

name.retainAll(B) = (교집합을 말함): {3}

name.removeAll(B) = {1,2} 차집합

*내가 어려웠던 기능 iterator

-gpt가 알려주는 iterator 사용이유

Iterator는 Java에서 컬렉션을 순회할 때 사용되는 인터페이스로, 다음과 같은 경우에 유용합니다:

  1. 컬렉션 요소 접근: Iterator를 사용하면 컬렉션의 요소를 하나씩 접근할 수 있습니다. 이때 인덱스를 사용하지 않기 때문에, 어떤 종류의 컬렉션(리스트, 세트 등)에서도 동일한 방식으로 접근할 수 있습니다.
  2. 순회 중 요소 삭제: Iterator를 사용하면 컬렉션을 순회하면서 안전하게 요소를 삭제할 수 있습니다. Iterator의 remove() 메소드를 사용하면 ConcurrentModificationException을 피할 수 있습니다.
  3. 다양한 컬렉션 지원: Iterator는 모든 Java 컬렉션 프레임워크 클래스에서 지원하므로, 통일된 방법으로 다양한 컬렉션을 다룰 수 있습니다.
  4. 간결한 코드: for-each 루프(Enhanced for loop)와 함께 사용할 수도 있어, 코드가 더 간결하고 가독성이 높아집니다.

-iterator는 컬렉션에 있는 값들을 배열 형식으로 만들어준다.

-처음 위치는 bof, 맨 마지막 위치는 eof로 저장된다.

Iterator <String> name = set.iterator();

name.next => 값을 꺼내올 수 있다.

while(name.hasNext()){

String key = name.next(); <-값을 key라는 변수에 저장

시스아웃 key

}

-> hasNext가 false가 될 때까지 값을 출력한다.

2. ArrayList

생성: ArrayList <String-자료형> 이름 = new ArrayList <String> (); & import 필요

여기서 자료형에는 대문자로 된 Wrapper Class만 들어갈 수 있어서,

int 형식을 쓸 경우에는 Integer를 써줘야함!

특징: 배열과 흡사하고, 크기가 가변적이다. 계속해서 증가가 가능하다.

순서가 있는 데이터의 집합이며 데이터의 중복을 허용한다.

사용방식 - 이름 뒤에 쩜을 찍으면 수많은 기능들과 구동방식을 볼 수 있다.

입력: name.add(100); => 순차적으로 0번째부터 저장된다.

개별적인 출력: name.get(n); => n번째 값이 출력된다.

(필요한 경우 꺼내와서 저장도 가능! int a = name.get(n); 이를 사용하여 연산도 가능)

for 함수 쓸 때 .length대신 name.size를 사용한다.

비교기능: name.contains(값)

등등

자주쓰는 것 아니면 찾아보면서 쓰면 된다고 하심.

일단 입력 출력정도는 꼭 외워두자!

3. HashMap

함수function을 프로그램화 한 것

생성: HashMap <String, String> name = new HashMap <string,. String> ();

key와 value를 쌍으로 가지므로 위와 같은 방식으로 key와 value의 자료형을 지정해주어야 한다.

특징:

순서는 유지되지 않는다.

키의 값은 중복이 허용되지 않지만, 값은 중복을 허용한다.

(키가 같으면 무엇을 구하는 건지를 알 수 가 없음)

기능:

name. put(문자, 문자) = epdlxj dlqfur

name.get (key) 로 value 출력

name.remove로 값 삭제

연산이 필요할때 iterator를 사용하는데, 맵 자체는 iterator 기능이 없는 듯 하다.

그래서 set으로 변환해서 사용하는 것 같은데, 이 부분은 아직 잘 모르겠다.

좀 더 연구가 필요함

-> 실제로 그렇다고 함

질문: java의 컬렉션 중 map 자체는 iterator 기능을 안가지고 있어? 그래서 set으로 변환해서 사용하는게 맞아?

ChatGPT said:

ChatGPT

맞습니다. Java의 Map 인터페이스는 직접적으로 Iterator를 제공하지 않습니다. 대신, Map의 키, 값, 또는 엔트리 집합에 대한 Set 뷰를 통해 Iterator를 사용할 수 있습니다.

방법

  1. keySet(): 맵의 모든 키를 포함하는 Set을 반환합니다. 이 Set에 대해 Iterator를 사용할 수 있습니다.

2. values(): 맵의 모든 값을 포함하는 Collection을 반환합니다. 이 Collection에 대해 Iterator를 사용할 수 있습니다.

3. entrySet(): 맵의 모든 키-값 쌍을 포함하는 Set<Map.Entry<K, V>>를 반환합니다. 이를 통해 키와 값 모두를 순회할 수 있습니다.

결론

Map 자체는 Iterator를 직접 지원하지 않지만, 위와 같은 방법으로 키, 값, 또는 키-값 쌍을 순회할 수 있습니다. Set이나 Collection으로 변환한 후 Iterator를 사용하는 것이 일반적인 패턴입니다.