Collection
    1. Collection공통 메서드
 List Interface    
    1. ArrayList
        1. add
        2. get
        3. set
        4. remove
        5. clear
        6. size
        7. contain
        8. isEmpty
    2. Vector
    3. LinkedList
 Set Interface 
 Map Interface       

 

 

Collection


 Collection
- 자료구조, 알고리즘을 인터페이스 또는 클래스로 구현하여 제공하는 자바 API 객체의 모음, 그룹

1) 모든 자료구조의 부모 인터페이스로서 객체(Object)의 모임을 나타낸다
2) 객체 단위의 연산을 제공한다
3) java.util패키지에 인터페이스, 인터페이스로 구현된 클래스, 알고리즘이 있다
4) 프레임 워크란 구체적이고 체계화된 API(프로그램 접근 방식)을 제공한다는 의미이다
5) 고정 크기의 배열이 가지고 있는 단점을 극복하고 가변 개수의 객체들을 쉽게 삽입, 삭제, 검색할 수 있는 가변 크기의 컨테이너
▶ 컬렉션 - 인터페이스 (Collection Interface)
 - Collection은 크게 4가지 인터페이스로 나뉘어있다

인터페이스 및 클래스    설명
인터페이스
interface
컬렉션에서 공통으로 제공해야 하는 연산들을 추상적으로 정의하고,
구체적인 구현은 구현 클래스에 맡긴다.
구현 클래스
implementation class
컬렉션을 실제로는 어떤 자료구조를 적용해 구현하느냐에 따라 컬렉션의 종류가 달라진다
알고리즘
algorithm
컬렉션마다 유용하게 사용할 수 있는 메서드를 의미한다
프레임 워크란?  
Collection Framwork Collection Interface
Collection Class
사용방법을 미리 정해놓은 라이브러리를 말한다
  • java.util 패키지에 포함
  • 모두 제네릭 기능을 지원
  • 인터페이스를 통해서 정형화된 방법으로 다양한 컬렉션 클래스 이용
  • 기본형 데이터를 처리하는 기능은 없다
더보기

✔ 자료구조란?

데이터 관리 기술이다 (프로그램이란 테이터를 표현하고 데이터를 처리하는 것이다

프로그램 구성 = 코드 + 데이터

✔ 알고리즘이란?

자료구조가 데이터의 표현과 저장에 대한 방법이라면

알고리즘은 표현되거나 저장된 데이터를 대상으로 '문제를 해결하는 방법이다'

 

Collection 공통 메서드
메서드 기능 설명
add( )
객체추가 해당 매개변수에 전달된 요소 추가 (선택적 기능)
clear() 객체 비우기 해당 매개변수의 모든 요소 비우기 (선택적 기능)
remove (Object o) 객체 삭제 해당 매개변수에서 전달된 객체(Object)를 제거함 (선택적 기능)
int size () 요소수 반환 해당 값의 총 개수를 반환함
isEmpty ()
여부 판단 해당 값이 비어있는지 확인함 boolean으로 리턴
contains(Object o) 해당 값이 전달된 객체를 포함하고 있는지 확인함 boolean으로 리턴
equals(Object o) 해당 값이 전달된 객체가 같은지 확인함 boolean으로 리턴

 

 

List Interface


▶ List Interface
List는 순서를 가지는 원소들의 모임으로 중복된 원소(element)를 가질 수 있다
1. 순서가 있는 데이터들의 모임이다
2. 중복된 원소를 가질 수 있다
3. 배열과 동일하게 위치(index)를 사용하여 원소에 접근할 수 있다.
4. 자바에서 List는 인터페이스 List에 의하여 정의된다.
인터페이스 List는 ArrayList,LinkedList,Vector 등의 클래스에 의하여 구현된다
5. List 컬렉션으로 구현된 클래스는 객체 자체를 저장하고 있는 것이 아니라 객체의 참조값을 쓰게 된다

 

 ArrayList

ArrayList 클래스

동일한 특성의 데이터들을 묶는다
반복문(loop)내에 변수를 이용하여 하나의 묶음 데이터들을 모두 접할 수 있다
선형구조 배열을 이용해 자료를 관리한다. 선형구조는 데이터를 구조화하는 기본 표현 방식으로
순자 구조방식(ArrayList)와 연결 주고 방식(LinkesList)이 있다.
항목간의 논리적인 순서와 메모리에 저장되는 물리적인 순서가 같은 주고를 순차 구조라 하며
이는 배열의 원리가 동일하다
ArrayList를 배열의 기반으로 하며 내부적으로 배열을 이용해서 인스턴스의 참조값을 저장한다


1) indexOf()를 사용하면 특정한 데이터가 저장된 위치를 알 수 있다
다만 ArrayList는 동일한 데이터도 여러 번 저장될 수 있으므로 맨처음에 있는 데이터의 위치가 반환된다

int index=list.indexOf("Servlet/JSP");

2) 검색을 반대 방향으로 하려면 lastIndexOf()를 사용한다

int index=list.lastIndexOf("Servlet/JSP");

⦁ 배열: 배열명.lengh
⦁ 문자열: 문자열참조변수 또는 "문자".length()
⦁ 리스트 구현 클래스: 리스트명.size()

⦁ 원소 접근 (모든 요소에 접근은 반복문을 이용하여 처리) 
  for(String str : list) { System.out.println(str); }
  String str = list.get(0)


ArrayList - Iterator (반복자)                                                                                        
반복자를 사용하기 위해서는 먼저
① ArrayList의 iterator()메서드를 호출해서 반복자 객체를 얻는다
② 그 다음 반복자 객체인 hasNext()와 next()메서드를 이용하여 컬렉션의 각 원소에 접근한다

String s;
Iterator<String> e=list.iterator();
while (e.hasNext()) {   //현재 커서(화살표) 다음에 데이터가 존재하는지 판단
   s=e.next();   //커서 다음의 데이터를 반환하고 다음 데이터로 이동
   System.out.println(s);
}

iterator()메서드가 호출될 때 생성되는 인스턴스를 반복자라한다
Collection Instance에 저장되어 있는 데이터들을 순차적으로 참조하는데 사용하기 때문이다


ArrayList
선언
ArrayList<String> list= new ArrayList<String>();
기능 메서드 설명
값 추가 add ("text")
add (n,"text")
① 매개변수에 값 넣기
② n번째 자리에 "(문자)"를 삽입
 읽기 get ("text") 해당 매개변수의 위치에 존재하는 요소 반환
 수정 set (n,"text") 해당 리스트의 특정 위치에 존재하는 요소를 제거함. (선택적 기능)
 삭제 remove (n)
remove ("text")
해당 매개변수의 특정 위치에 존재하는 요소를 전달받은 객체로 대처함 (선택적 기능)
값 전부 삭제 clear() 해당 매개변수의 모든 요소 비우기
요소검사 int indexOf (Object o)  
int lastIndexOf (Object o)  
  Iterator<String> e=list.iterator();  

 add

값을 추가할 수 있다

파멸의 바퀴는 가시 스택(stack) 하나당 25수치의 타격을 입힌다 그럼 다음과 같이 코드를 작성할 수 있다.

wheel.add("1stack 25");
wheel.add("2stack 50");
wheel.add("3stack 75");

System.out.println(wheel);

//답: [1stack 25, 2stack 50, 3stack 75]

ArrayList 객체인 wheel에 add 라는 메소드를 이용하여 가시의 타격 수치를 저장했다.

만약 n째 위치에 "(String)"를 삽입하고 싶다면 아래와 같이 삽입할 위치를 써주면 된다

wheel.add(0, "Trap");    // 첫번째 위치에 Trap 삽입.

//답: [Trap, 1stack 25, 2stack 50, 3stack 75]

 

 get

지정한 값을 추출할 수 있다.

바퀴의 2번째 피해수치를 출력하고 싶다면 다음과 같이 한다.

System.out.print(wheel.get(1));

//답: [2stack 50]

 

 set

지정한 값을 변경한다.

바퀴의 3번째 피해수치를 "Flash"로 싶다면 다음과 같이 한다.

wheel.get(2);
System.out.print(wheel);

답: [1stack 25, 2stack 50, Flash]

 

 remove

지정한 값을 삭제한다

remove 메소드에는 2가지 방식이 있다. (이름은 같지만 입력 매개변수가 다르다)

  1. remove(객체)
  2. remove(인덱스)
// 위치 지정 삭제
wheel.remove(2);
// 인덱스 지정 삭제
wheel.remove("3stack 75");

System.out.print(wheel);

//답: [1stack 25, 2stack 50]

 

 clear

값을 전부 삭제한다

wheel.clear();

System.out.print(wheel);

//답: [ ]

 

 size

size 메소드는 ArrayList의 갯수를 리턴한다.

System.out.print(wheel.size());

//답: 3

 

 contains

리스트 안에 해당 항목이 있는지를 판별하여 그 결과를 boolean으로 리턴한다.

System.out.println(wheel.contains("142"));

 

 isEmpty

리스트 안에 해당 항목이 비어있는지 확인해 그 결과를 boolean으로 리턴한다.

System.out.println(wheel.contains("142"));

 

 

 Vector

Vector 클래스
Vector는 ArrayList와 동일한 클래스이다. 다만 차이점이 있는데

⦁ Vector
동기화 처리를 지원한다
동시 사용을 안전하게 처리할 수 있도록 설계된 클래스
⦁ ArrayList
동기화 처리를 지원하지 않음
동시에 사용을 허용하지 않는 클래스
속도가 더 빠르다

⦁ Vector 단점
벡터는 항상 동기화되는 장점이자 단점을 가지고 있다. 스레드가 1개일때도 동기화를 하기 때문에 ArrayList보다 성능이 떨어진다.
Vector 선언 Vector<Integer> v = new Vector<Integer>();
Vector<Student> student = new Vector<Student>();
기능 메서드
설명
 읽기 list.firstElement() / list.lastElement() 첫 값, 마지막 값을 반환
용량 읽기 list.capacity() Vector의 용량을 구한다
Enumeration 인터페이스
Enumeration 인터페이스는 반복자Iterator와 마찬가지로 컬렉션 뷰 역할을 한다.
 컬렉션의 모든 데이터를 순차적으로 쉽게 접근하여 사용할 수 있도록 해준다

그러나 동기화 처리에서 차이점이 있다

기능 메서드 설명
  boolean hasMoreElements() 현재 커서 다음에 요소가 있는지 여부 판단
  E nextElement() 커서 요소를 반환하고 커서를 다음 요소로 이동
  default Iterator aslterator() Enumeration의 커서 다음 요소들을 Itorator로 생성

 

 LinkedList

LinkedList 클래스
ArrayList 클래스는 논리적인 순서와 물리적인 순서가 같은 순차 구조라 항목의 위치를 찾아 접근하기 쉽다는 장점이 있다.
하지만 삽입이나 삭제 후에 연속적인 물리 주소를 유지하기 위해 항목을 이동해야 하는 작업으로 시간이 소모된다.
삽입/삭제 연산이 많으면 항목이 이동이 많아져서 많은 부하가 생긴다는 단점과 검색속도가 빠르다는 장점이 있다.

ArrayList에서 연산 지연에 대한 문제와 저장 영역에 대한 문제를 개선한 자료구조 방식이 LinkedList(연결 구조 방식)이다

LinkedList는 ArrayList와 달리 순서대로 데이터를 저장하지 않고 메모리의 저장할 수 있는 공간이 있다면 위치에 상관없이 저장한다.
즉 ArrayList의 데이터는 연속적으로 저장되지만
LinkedList의 데이터는 연속적으로 저장되지 않고 임의의 위치에 저장된다

메모리 효율면에서는 연속적인 공간이 필요없는 LinkedList가 더 유리하고 
데이터 검색면에서는 차례대로 접근 할 수 있는 ArrayList가 유리하다


LinkedList 방식에서는 순차 구조 방식처럼 항목의 논리적인 순서와 물리적인 순서가 일치하지 않아도 된다.
단 물리적으로 연속적이지 않은 항목을 논리적 순서대로 연결해야 하므로 하나의 항목은 다음 항목에 대한 주소값을 가지고 있어야 한다. 이러한 단위 구조를 노드(node)라 한다
LinkedList
선언
LinkedList<String> list= new LinkedList<String>();
기능 메서드 설명
  boolean hasMoreElements() 현재 커서 다음에 요소가 있는지 여부 판단
  E nextElement() 커서 요소를 반환하고 커서를 다음 요소로 이동
  default Iterator aslterator() Enumeration의 커서 다음 요소들을 Itorator로 생성

 

Map


기능 메서드 설명
Hash Map (key(문자), value(숫자))
값 추가
put(key, value) HashMap에 Key, Value을 삽입한다
putAll(map2) 하나의 Map을 또 다른 Map에 추가한다
 삭제 remove(Key)  
  size()  


 검색


containsKey(key) 매개변수로 전달받은 key값 존재 유무 판단
containsValue(value) 매개변수로 전달받은 값 (value) 존재 유뮤 판단
get(key) 매개변수로 전달받은 key에 해당하는 값을 반환
Set<map.entry<k,v>> entrySet() 키와 값의 한 쌍으로 구성된 객체(Map.Entry)를 Set에 담아서 리턴
Set<key> Set() 모든 키를 Set객체에 담아서 리턴
values() 저장된 모든 value를 큰 숫자부터 차례대로 출력
Map.Entry
 반환
map.getKey() Entry 키 반환
map.getValue() Entry 값(value) 반환
map.setValue(V value) 매개변수로 전달받은 값으로 Entry의 값(value) 설정

 

 add

값을 추가할 수 있다

파멸의 바퀴는 가시 스택(stack) 하나당 25수치의 타격을 입힌다 그럼 다음과 같이 코드를 작성할 수 있다.

wheel.add("1stack 25");
wheel.add("2stack 50");
wheel.add("3stack 75");

System.out.println(wheel);

답: [1stack 25, 2stack 50, 3stack 75]

ArrayList 객체인 wheel에 add 라는 메소드를 이용하여 가시의 타격 수치를 저장했다.

만약 n째 위치에 "(String)"를 삽입하고 싶다면 아래와 같이 삽입할 위치를 써주면 된다

wheel.add(0, "Trap");    // 첫번째 위치에 Trap 삽입.

답: [Trap, 1stack 25, 2stack 50, 3stack 75]

 

 get

지정한 값을 추출할 수 있다.

바퀴의 2번째 피해수치를 출력하고 싶다면 다음과 같이 한다.

System.out.print(wheel.get(1));

답: [2stack 50]

 

 set

지정한 값을 변경한다.

바퀴의 3번째 피해수치를 "Flash"로 싶다면 다음과 같이 한다.

wheel.get(2);
System.out.print(wheel);

답: [1stack 25, 2stack 50, Flash]

 

 remove

지정한 값을 삭제한다

remove 메소드에는 2가지 방식이 있다. (이름은 같지만 입력 매개변수가 다르다)

  1. remove(객체)
  2. remove(인덱스)
// 위치 지정 삭제
wheel.remove(2);
// 인덱스 지정 삭제
wheel.remove("3stack 75");

System.out.print(wheel);

답: [1stack 25, 2stack 50]

 

 clear

값을 전부 삭제한다

wheel.clear();

System.out.print(wheel);

답: [ ]

 

 size

size 메소드는 ArrayList의 갯수를 리턴한다.

System.out.print(wheel.size());

답: 3

 

 contains

리스트 안에 해당 항목이 있는지를 판별하여 그 결과를 boolean으로 리턴한다.

System.out.println(wheel.contains("142"));

 

 isEmpty

리스트 안에 해당 항목이 비어있는지 확인해 그 결과를 boolean으로 리턴한다.

System.out.println(wheel.contains("142"));

 

 

Queue


Interface 메서드 기능 설명
Queue
offer(E e)  /  (리턴타입) boolean   주어진 객체를 큐에 저장(삽입)
peek()  /  (리턴타입) E   객체 하나를 가져온다
객체를 큐에서 제거하지 않는다
poll()  /  (리턴타입) E   객체 하나를 가져온다
객체를 큐에서 제거한다

 

 

 

Set


Interface 해시코드    
Set
hashCode()
   
equals()    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Language > Java' 카테고리의 다른 글

입출력 (Stream)  (0) 2022.03.03
JAVA 기본 API  (0) 2022.02.28
제네릭 Generic  (0) 2022.02.23
예외 (Exception Event)  (0) 2022.02.22
내부 클래스 (중첩 클래스)  (0) 2022.02.21