프로그래밍 공부

2025.02.03 java 공부

3452 2025. 2. 3. 17:37

컬렉션 프레임워크

 

데이터를 효율적으로 다루기 위한 클래스들의 집합이다.

 

 

배열과의 차이점

 

배열 : 같은 타입의 데이터만 저장가능

 

컬렉션 : 다른 타입의 객체도 저장가능

 

 

클래스의 종류

 

1. 전역변수 저장 클래스

 

데이터의 저장을 주목적으로 두는 클래스로, 데이터의 상태를 표현하는 전역변수를 가지고, 게터와 세터를 통해서 데이터를 다룬다.

 

또한 게터와 세터 외에 기능은 거의 없다.

 

 

2. 기능 제공 클래스

 

데이터의 저장보다는 기능에 중점을 둔 클래스로, 주로 메서드만 가지고 변수를 가지지 않으나 static 변수는 가질수도 있다.

 

 

컬렉션

 

컬렉션의 프레임워크는 Set, List, Queue, Map이 있으며, 컬렉션 프레임워크들은 같은 조작방법을 가진다.

 

메서드 기능
boolean add(E e) 파라미터로 지정된 요소를 컬렉션에 추가
boolean contains(Object obj) 객체 obj가 컬렉션에 존재하는지 여부
boolean isEmpty() 컬렉션이 비어있는지 아닌지 여부
Iterator iterator() 해당 컬렉션 요소의 iterator 객체를 반환
boolean remove(object obj) 객체 obj를 제거
int size() 요소의 개수를 반환

 

 

iterator() 메서드는 해당 컬렉션의 iterator를 반환하며, iterator 객체 내부의 클래스를 사용하면 상당히 효율적인 작업이 가능하다.

 

Iterator 객체의 메서드 설명
hasNext() 다음 요소가 있는지 없는지 판단
next() 다음 요소를 반환

 

 

 

Set

 

Set은 컬렉션 중 하나로, 중복된 데이터를 갖지 않고, 저장 순서를 유지하지 않는 특징이 있다.

 

하지만 중복이 불가능 하다는 이유로 잘 사용되지 않는 컬렉션이다.

 

 

TreeSet

 

Set의 단점을 보완한 컬렉션으로, 기존과 동일하게 중복은 허용되지 않지만 정렬기능이 추가되었다.

 

정렬방식은 기존 데이터와 비교하여 작으면 왼쪽, 크면 오른쪽으로 두어 나무의 가지와 같은 형태로 이루어진다.

 

 

데이터를 넣을 때는 

 

참조변수.add(데이터); 의 형태로 넣고,

ts.add("apple");

 

데이터를 출력할때는 while과 함께 사용하여

 

while(it.hasNext()) { // iterator의 참조변수를 생성하고 iterator의 클래스 hasNext()사용

System.out.println(" " + next()); // " "다음요소" "다음요소" "다음요소 의 형태로 출력되도록함

}

 

 

List

 

주로 사용되는 컬렉션으로, 중복이 가능하고 저장되는 요소들의 순서가 유지되는 특징이 있다.

 

List의 종류로는 ArrayList, LinkedList가 있다.

 

메서드 설명
void add(int index, E elem) index 위치에 요소 elem 추가
E get(int index) index 위치에 있는 요소를 반환
int indexOf(Object o) 요소 o가 있는 위치를 반환
E ListIterator listiterator() Listiterator 객체를 반환
E remove(int index) index 위치에 있는 요소를 삭제하고 삭제한 요소를 반환
E set(int index, E elem) 지정한 index의 요소를 elem으로 변경

 

 

ArrayList

 

배열에서 발전된 형태의 List로, 요소를 추가하면 0번 인덱스부터 차례대로 요소가 저장되며, 메서드를 이용해 원하는 위치에 요소를 추가하거나 삭제, 또는 반환할수있다.

 

ArrayList<데이터타입> list = new ArrayList<데이터타입>();

 

위와 같은 형태로 작성되며, 데이터타입에 데이터타입을 기입하면 해당 데이터타입의 요소만 저장이 가능하며

 

따로 기입하지 않으면 자동으로 <Object>가 기입되어 모든 종류의 요소를 저장할수 있게된다.

 

ArrayList number = new ArrayList(); // ArrayList 생성

 

number.add(1);

number.add(2);

number.add(3); // number에 숫자 저장

 

System.out.println(number); // 출력 : {1, 2, 3} 컬렉션은 print로 출력시 전체 출력가능

 

number.remove(1); // 1번 인덱스 제거

 

System.out.println(number); // 출력 : {1, 3} 1번 인덱스가 제거되어 2가 제거되고 앞으로 당겨짐

 

number.add(1, "A"); // 1번 인덱스 위치에 A 추가

 

System.out.println(number); // 출력 :{1, A, 3} 인덱스 1번 자리에 A 추가, 나머지는 뒤로 밀림

 

 

Queue, Stack

 

컬렉션 중 하나로 큐는 먼저 들어온 데이터를 먼저 내보내는 형태이고, stack은 마지막에 들어온 데이터가 먼저 나가는 자료구조이다.

 

Queue 메서드

메서드 설명
boolean add(E e) Queue에 요소 e를 추가
E element() Queue의 제일 상단 요소 반환
E remove() Queue의 최상단 요소를 반환 후 제거
boolean offer(E e) Queue에 요소 e를 추가
E peek() Queue의 제일 상단 요소 반환
E poll() Queue의 최상단 요소를 반환 후 제거

* E는 참조변수

 

 

위와 아래의 메서드는 역할이 같지만, Queue에 아무런 자료가 없을때 위의 메서드를 사용하면 예외가 발생하고, 아래의 메서드는 예외가 발생하는 대신 null 값을 반환한다.

 

Stack 메서드

메서드 설명
E element() 요소를 반환
E peek() 요소를 반환
E pop() 요소 하나를 제거하면서 반환
E push(E item) 새로운 요소 추가
int search(Object o) 요소 o가 있는지 검색해서 위치를 반환

 

마지막에 들어온 요소가 먼저 출력되야 할때 Stack을 사용한다.

 

 

Map

 

컬렉션 중 하나로 키와 값을 쌍으로 저장하는 구조이다. List와 함께 가장 많이 쓰인다.

 

Map는 키를 통해서 값을 참조할 수 있으며, HashMap은 내부적으로 해싱검색을 사용하여 대용량 데이터관리에 좋은 성능을 보인다.

 

메서드 설명
boolean containsKey(Object key) 해당 키가 있는지 여부 반환
boolean containsValue(Object value) 해당 값이 있는지 여부 반환
V get(Object key) 해당 key와 쌍인 값을 반환
boolean isEmpty() 맵 객체에 요소가 없는지 판단
Set<key> keySet() 키들을 Set 형태로 반환
V put(K key, V value) 키와 값을 요소로 추가
V remove(Object key) 이 키를 가진 요소를 제거
int size() 전체요소의 개수를 반환

 

Scanner sc = new Scanner(System.in);

HashMap hm = new HashMap();

 

hm.put("apple", "사과");

hm.put("paper", "종이");

hm.put("flower", "꽃");

String voka;

 

System.out.println("단어를 입력하세요")

voka = sc.nextLine();

 

if(hm.containsKey(voka)) {

System.out.println("해당하는 뜻은 " + hm.get(voka));

}

 

위와같이 키를 이용해 값을 구해와서 출력할수 있다.

'프로그래밍 공부' 카테고리의 다른 글

2025.02.05 java 공부  (0) 2025.02.05
2025.02.04 java 공부  (0) 2025.02.04
2025.01.24 java 공부  (0) 2025.01.24
2025.01.23 java 공부  (0) 2025.01.23
2025.01.22 java 공부  (0) 2025.01.22