SSISO Community

시소당

자바 Collection

여태  개발하면서  무지  많이  써오던  컬랙션들.  성능이나  별다른  고민없이  걍  대충  써왔던  것  같다.  "켄트  벡의  구현  패턴"이란  책을  보다  보니  자세한  설명이  있어서  그  동안  알고  있던것과  더불어  정리해  두는  게  조을  것  같다.

  

1.  인터페이스

The  core  collection  interfaces.

Queue는  거의  사용하지  않고  책에  없으니까  생략  ^^

  

    -  배열

          가장  단순하지만  가장  유연하지  못한  컬렉션.

          크기가  고정되어  있고  원소  접근  방법이  용이하면  빠르다.

          단순한  연산의  경우  배열은  다른  컬렉션에  비해  시간,  공간  모든  면에서  효율적이다.

          일반적으로  배열  접근(element[i])은  ArrayList를  사용했을  때(elements.get(i))에  비해  10배  이상

          빠르다고  한다.

          대부분의  경우  유연성  문제  때문에  배열보다는  다른  컬렉션을  사용하고,  프로그램의  일부에서  성능이

          중요한  경우  배열을  사용하는  것도  고려하는  것이  좋을  듯

  

    -  Iterable

          기본적인  컬렉션  인터페이스로  순차  열람(iteration)을  지원한다.

          어떤  변수를  Iterable로  선언하는  것은  그  변수가  여러  개의  값을  갖고  있음을  뜻할  뿐이다.

          실제로  Iterable  인터페이스를  살펴  보면  자바  컬렉션의  모든  인터페이스,  구현  클래스들이  implement

          하고  있는  것을  확인할  수  있고  Iterable에  정의된  메소드는  Iterator<T>  iterator()  뿐이다.

          Iterator를  이용하면  Iterator  인터페이스에서  지원하는  세가지  메소드

          (hasNext(),  next(),  remove())를  사용할  수  있다.

          자바  5에서는  암묵적으로  iterator()  메소드를  호출하여

          for  (Element  element  :  elements)  {

                  ......

          }

          의  형식으로  간편하게  루프를  구성할  수  있게  한다.

          실제  프로그램에서는  Iterable  인터페이스를  직접  사용할  일은  없으니  이런게  있다고  정도만  알아두면

          될것이다.

  

    -  Collection

          Iterable을  상속하며,  원소의  추가,  삭제,  검색,  크기  지원  등의  메소드를  추가로  지원한다.

        

    -  List

          원소의  순서가  정의되어  있으며,  컬렉션상의  위치를  통해  원소에  접근할  수  있다.

          따라서  List를  사용하면  컬렉션  상에서의  인덱스를  통해  어떤  원소를  접근  할  수  있다.

        원소간의  순서가  중요한  경우,  예를  들어  도착  순서대로  메세지를  처리하는  큐의  경우에는  리스트를

        사용해야  한다.

  

    -  Set

          중복된  원소가  없는  컬렉션

          중복원소(상호간  equals()의  결과가  참인  원소)를  허용하니  않는  컬렉션

          원소  사이의  순서가  없으므로,  이전  순차  열람할  때의  원소  순서가  다음  순차  열람할  때  보장되지

          않는다.

        

    -  SortedSet

          중복된  원소가  없으며  원소간의  순서가  정해진  컬렉션

          컬렉션에  추가된  순서나  명시적인  인덱스  번호에  따라  순서가  정해지는  List와  달리

          SortedSet은  Comparator에  의해  순서를  정한다.  명시적인  순서를  제공하지  않는  경우에는

          "자연  순서(natural  order)"가  사용된다.  예를  들어  문자열은  알파벳  순으로  정렬

        

          아래는  Comparator의  사용예

          public  Collection<String>  getAlphabeticalAuthors()  {

                  Comparator<Author>  sorter  =  new  Comparator<Author>()  {

                          public  int  compare(Author  o1,  Author  o2)  {

                                  if  (o1.getLastName().equals(o2.getLastName()))  {

                                          return  o1.getFirstName().compareTo(o2.getFirstName());

                                  return  o1.getLastName().compareTo(o2.getLastName());

                          }

                  };

                  SortedSet<Author>  results  =  new  TreeSet<Author>(sorter);

                  for  (Book  each:  getBooks())  {

                          results.add(each.getAuthor());

                  }

                  return  results;

          }

  

    -  Map

          키에  의해  원소를  저장하고  접근하는  컬렉션

          Map은  List처럼  키를  사용해서  원소를  저장하지만,  List가  정수만을  키로  사용할  수  있는  반면

          Map은  임의의  객체를  키로사용할  수  있다.

          또  Map는  다른  컬렉션  인터페이스와는  형태가  상이하여  다른  컬렉션  인터페이스를  상속하지  않고,

          내부적으로  키에  대한  컬렉션과  데이터에  대한  컬렉션의  2개  컬렉션을  유지한다.

출처  자바  Collection|작성자  바람의혼
http://blog.naver.com/windziel?Redirect=Log&logNo=60048694876

1055 view

4.0 stars