본문 바로가기

Foundation/- Java

Collection Framework(ArrayList, HashSet, HashMap)

Collection Framework  란?

- 여러 데이터들을 편하게 처리하기 위한 방법을 제공해주는 클래스들의 모임

- Collection : 데이터 그룹

- Framework : 프로그래밍 방식

- Collection Framework의 핵심적인 Interface는 List, Set, Map가 있다.

 

▶ List - 순서가 있고 중복이 가능한 데이터의 집합

    List인터페이스를 상속받고 있는 대표적인  Class(ArrayList, Vector, LinkedList)

 

(1) ArrayList Class

- 배열과 비슷한 기능을 하지만 다루기 쉽고 유동적이다. (배열의 단점을 보완) 

ArrayList<String> a1 = new ArrayList<String>();  ---> a1 객체를 생성

 

a1.add("data")  ---> 데이터가 추가 순서대로 들어간다.

 

a1.remove(index)  ---> 해당 index에 위치하는 데이타를 지운다.

  지워진 인덱스를 기준으로 한칸씩 앞으로 당겨서 채워진다.

 

a1.set(index, data)   ---> 해당 index위치에 데이터를 바꾼다.

 

a1.add(index, data)  ---> 해당 index위치에 데이터를 삽입한다.

     그 위치의 데이터부터는 뒤로 한칸씩 밀려난다

 

a1.size()        -----> a1 객체의 크기를 가져온다.

 

a1.get(index)         ---> 해당 index의 데이터를 가져온다.

 

이외에도 ArrayList 관련메서드는 다음과 같이 아주 많다. 필요할때 꺼내쓰면 된다.

Vector은 잘 안쓰이고 LinkedList는 ArrayList랑 거의 비슷하다.

ArrayList와 LinkedList의 차이는 ArrayList는 데이터를 중간에 넣고 뺄 때

데이터가 큰경우 앞으로밀리고 당겨지기 때문에 부담이 크지만

LinkedList는 데이터의 주소값을 가지고있어서 데이터를 넣고 뺄 때 부담이 적다.

반대로 데이터 전체를 출력할경우는 Array리스트는 순서대로 출력을 해서 부담이 적지만 LinkedList는 데이터주소를 찾고 접근해야 하기때문에 일일이 찾아가야해서 부담이 있다. 상황에 맞게 장점을 이용할 수 있는 클래스를 이용하면 된다.

 

 

# ArrayList나 Vector 같이 배열을 이용한 자료구조는 데이터를 읽어오고 저장하는 데는 효율이 좋지만, 용량을 변경해야할 경우엔 새로운 배열을 생성한 후 기존의 배열로부터 새로 생성된 배열로 데이터를 복사해야하기  때문에 효율이 상당히 떨어진다. 따라서 처음에 인스턴스를 생성할 때, 저장할 데이터의 개수를 잘 고려하여 충분한 용량의 인스턴스를 생성하는 것이 좋다.

 

 

 

▶ Set

- 집합

- 자료의 순서가 없고, 중복이 되지 않는다.

- 자료가 정렬되지 않으며, 중복된 요소가 발생되지 못하도록 관리한다.

- Set 구조를 사용하기 위해서 서브 클래스 중 하나의 객체를 생성한다.

 

 

 

HashSet<String> h1=new HashSet<String>(); --- > 객체 생성

 

h1.add("one");
h1.add("two");
h1.add("three");
h1.add("four");
h1.add("one");                ---> h1.add(데이터)  데이터를 추가한다.

 

h1.size()                        ---> h1객체의 크기를 가져온다. 데이터의 크기가 5지만

 one이 2개로 하나는 무시되어 4가된것을 확인 할 수 있다.

 

System.out.println(h1.contains("one"));  ---> h1.contains(데이터) 해당 데이터가

 포함 되어있는지 boolean으로 반환한다.

 

Iterator i1 = h1.iterator();    ---> HashSet의 객체 h1은 순서가 없으므로 Iterator클래스의 도움을받아 위 예제와 같이 출력을 할 수 있다. Iterator 메서드 hasNext는 반환값이 boolean으로 다음값이 있나없나를 확인해주고 next는 하나하나씩 값을 반환해준다.

 

 

 

▶Map
- key, value 한쌍으로 데이터를 저장
( 사전 -단어(key)를 이용해서 뜻(데이터)을 검색)
- key 값을 이용해서 데이터를 찾으며, 순서가 없다. 
- key값은 중복이 안된다. value값을 중복이 된다. 
- Map인터페이스를 상속받고 있는 클래스는 대표적으로 hashMap이 있다. 

  

 

 

 

위는 로그인을 할 때 HashMap을통해 키와 밸류값이 맞는지 확인하는 예제이다.

 

 

 

 


 

 

 

'Foundation > - Java' 카테고리의 다른 글

유용한 클래스(StringBuffer, Random)(2)  (0) 2017.08.25
유용한 클래스(String class)(1)  (0) 2017.08.22
유용한 클래스(Object class)  (0) 2017.08.21
예외처리  (1) 2017.08.17
추상클래스, 인터페이스, 내부클래스  (0) 2017.08.15