본문 바로가기
Java

[Advanced JAVA] API를 활용한 객체 활용 및 데이터 처리 기법

by 루에 2014. 12. 26.
반응형

Java Array

array에 대한 연산은 java.util.Arrays class사용

new Type[size]와 같이 생성하고, 생성한 직후에는 null값으로 채워진다


Array를 만드는 방법

String[] arr = new String[size];

String[] arr2 = {"a","b","c"};

String[] arr3 = new String[] {"a","b","c"};


Array List

List<Type> list = Arrayss.asList(arrayName);


인자에 ... 이 들어갈 경우, 인자 값이 1개일 수도 있고 다수일 수도 있다는 의미


public void setStrings(String... strings){

int length = strings.length;

for(int i = 0; i<length; i++){

System.out.println("i : " + i + ", value :" + strings[i]);

}

}

setStrings("a","b","c");    // 이 경우 setStrings()의 배열 길이가 3인 인자가 들어간다


String sort

String을 제외한 다른 것은 Sort() 제공, String의 경우 Comparator를 활용

arrays.sort(dataArray, new Comparator<String>() {

@Ovverride

public int compare(String str1, String str2) {

return str1.compareTo(Str2);

}

});


Java Collection Framework

  • 자바를 이용한 자료구조/알고리즘을 정의하고 동작시키는 클래스 라이브러리를 의미한다
  • 자바에서 객체를 저장하는 방법을 의미한다
  • 배열도 일종의 콜렉션이라고 할 수 있다


Data Structure / Algorithm

Stack

      • top이라고 한 끝에서 모든 삽입과 삭제가 일어나는 순서 리스트
      • 후입 선출 구조
      • 자바에서는 표준 API로 구현되어 제공된다


Queue

      • 한 쪽 끝에서 데이터가 삽입되고 반대쪽 끝에서 삭제가 일어나는 순서 리스트
      • 선입 선출 구조
      • 자바에서는 보통 ArrayList 또는 vector를 이용해서 사용한다


Linked List

      • 크기가 변하는(삽입,삭제) 순차 리스트를 요구할 때 각각의 노드들의 연결로 이루어져 있는 리스트의 구조가 필요
      • 연결리스트의 노드들은 메모리의 순차적 위치에 존재하지 않는다(포인터 또는 참조를 통함)
      • 이러한 연결은 다음 노드를 가리키기 위한 연결자를 가지고 연결되며 노드들의 위치는 실행 시마다 바뀔 수 있다
      • 구조 : 데이터부와 연결부로 구성
      • JCF에서는 LinkedList가 대표적 구현체


Hash 알고리즘

      • Key와 그에 대응되는 Value의 쌍으로 구현된다
      • 검색 속도가 제일 빠르다
      • 사전 형태의 뎅이터 구조를 의미한다
      • associative array라고도 한다
      • JCF에서는 Map 계열의 구현체가 이에 해당 된다
      • Java의 Heap Memory는 바로 이 구조

Collection Framework 구조
Collection interface
객체들의 모임을 저장하기 위한 공통적 행위들 선언
개별적인 요소들을 모아 놓은 것
List, Set, Queue가 대표적 하위 인터페이스

Map interface
Key, value의 쌍으로 구성되는 객체들을 모아 놓은 구조
연관 배열이라고도 한다

Iterator interface
보통 콜렉션, 맵의 실체 구현체의 데이터를 반복해서 찾아가는 역할 담당
Enumeration(1.1), Iterator, ListIterator
현재(14.12.)는 for문을 사용하는 편이다


java.util.Collection
      • 객체의 모임을 저장하기 위한 클래스의 최상위 자료형으로 List,set인터페이스로부터 유도
      • 컬렉션 내의 추가, 제거, 비교, 대체와 같은 동작을 모든 컬렉션이 포함
      • 컬렉션은 각각의 요소에 접근할 수 있도록 Iterator(반복자)라고 불리우는 인터페이스와 객체를 얻을 수 있는 메소드 제공
      • 컬렉션 인터페이스는 이외에도 컬렉션의 사이즈, 해쉬코드, 비었는지 여부 검사 등의 동작을 제공
      • 용량이 부족할 시 자동으로 사이즈 증가

메소드의 종류

객체를 더하기 위한 메소드 : add, addAll(콜렉션 전체 데이터 추가)

내용 조사 메소드 : contains, containsAll(전체가 같은지), isEmpty, size

제거하기 위한 메소드 : clear, remove, removeAll(전체 제거)

배열로 전환하기 위한 메소드 : toArray

반복자로 전환하기 위한 메소드 : iterator



Collection의 연산(Java.util.Collections)

Collection에 데이터 추가

addAll(Collection<? super T> c, T... a)

검색 및 정렬, 복사

binarySearch, indexOfSubList, lastIndexOfSublist, sort, copy, nCopies

연산

max, min, frequency(특정 값 빈도), reverse, rotate, shuffle(임의로 난수 발생시켜 섞음), singleton(동일한 데이터가 들어올 경우 하나만 받도록 set을 만든다), replaceAll, swap

Enumeration(하나하나 반복하기 위함)

enumeration, list(Enumeration<T> enumeration)



java.util.List

      • Sequence로 요소들을 유지 관리한다
      • Collection의 하위 인터페이스
      • Collection의 메소드를 포함해 추가 구현되어 있다
      • ArrayList, LinkedList가 대표적인 구현 클래스
      • Array로부터 List 생성

List<String> list = Arrays.asList("a","b","c");    // 이렇게 생성할 경우 내부적으로 크기가 3개로 고정된 것

// 이므로 데이터를 추가할 경우 에러 발생


ArrayList

List의 크기 변경이 가능한 배열 구현

내부적인 동작은 Vector와 유사


LinkedList

ArrayList가 하듯이 인터페이스 구현

ArrayList보다 중간에 요소 삽입, 삭제가 유리하다

무작위로 엑세스 할 때는 불리하다

LinkedList는 queue, stack, deque로써 확장되는 메소드를 가지고 있다


Iterator

        • 임의의 컬렉션 클래스에서 구성원 객체를 차레로 검색하며 경우에 따라 제거할 수 있다
        • 현재 위치를 가리키는 포인터는 항상 현재 위치의 앞을 가리킨다(데이터가 없을 수 있기 때문에)
        • 반복자에 관련된 인터페이스의 특징

Enumeration : 단방향 방문

Iterator : 단방향 방문 및 제거

ListIterator : 양방향 방문 및 추가, 대치, 제거

        • 반복자 인터페이스의 메소드(Iterator interface)

public boolean hasNext()

public Object next() throws NoSuchElementException

public void remove() throws UnsupportedOperationException


Iterator를 이용한 탐색

public void printItems() {

ArrayList<Stirng> list = new ArrayList<String>();

list.add("a");

list.add("b");


Iterator<String> iter = list.Iterator();    // ArrayList를 iterator로 변환

while(iter.hasNext)) {

String text = iter.next();

System.out.println(text);

}

}


for를 이용한 탐색


List<String> list = new ArrayList<String>();

list.add("a");

list.add("b");

for(String item : list) {    // 세미콜론( : ) 뒤쪽 값은 Array 또는 collection이 올 수 있다

System.out.println("item : " + item);

}


java.util.Set

        • Collection의 하위 인터페이스
        • 구성원 객체로 중복된 객체를 허용하지 않는다
        • 중복된 객체 허용이 안되므로 null 안됨
        • 각 객체 값에 대해 하나의 인스턴스만 저장
        • HashSet(hashtable을 이용해 O(1)에 찾기가 가능한 알고리즘), TreeSet(정렬가능)이 대표적인 클래스

TreeSet

          • 해쉬셋과 유사
          • 정렬된 컬렉션
          • 항목을 원하는 순서로 컬렉션 내에 추가할 수 있으며, 컬렉션을 반복(Iterator)할 때 값들은 자동적으로 정렬된 순서로 제공된다
          • 정렬은 트리 데이터 구조에 의해 이루어진다
          • 항목이 트리에 추가될 때마다 적당히 정렬된 곳에 위치하므로 반복자는 항상 정렬된 순서로 항목들을 방문


Map

키/값 쌍을 저장하고 있으며 키를 가지고 있으면 이에 해당하는 값을 찾을 수 있도록 구성된다

동일한 키값을 허용하지 않으므로 동일한 키로 두 번 put()할 경우 나중 값으로 바뀐다

맵을 위한 목적의 클래스

HashMap

키들을 해쉬 함수를 사용하여 해쉬한다

TreeMap

탐색 트리 내에서 키들에 대한 전체적인 정렬을 comparable 또는 comparator 기능을 이용해 정렬한다(정렬된 키값을 가지고 있는 맵)


항목의 추가, 제거를 위한 메소드

public Object put(Object key, Object value)

public void putAll(Map m)

publiv Object get()

public Object remove(Object key)

public void clear()


키 값의 셋을 받고 싶을 경우

publiv Set keySet()

값을 받고 싶은 경우 값은 중복이 가능하므로 컬렉션으로 받을 수 있다

publiv Collection value()



Map 탐색

public void printHashMap() {

HashMap<String, String> map = new HashMap <String, String>();

map.put("key1", "value1");

Set<String> keys = map.keySet();

for(String key : keys) {

String value = map.get(key);

System.out.println("key : " + key + ", value : " + value);

{

}


MapArray

하나의 키에 여러 개의 값을 넣을 경우

public class MapArray {

Map<String, List<String>> map = new HashMap<String, List<String>>();

public void putString(String key, String value) {

List<String> list = map.get(key);

if(list == null) {

list = new ArrayList<String>();

map.put(key, list);

}

list.add(value);

}

}


SortedMap Interface

key값을 기준으로 key - value 쌍의 오름차순의 정렬을 유지한다

모든 키 값이 Comparator로 비교 가능해야 한다


HashMap Interface

해쉬 기법을 사용하여 구현되며 구성원의 개수에 상관없이 평균적으로 일정한 실행 속도 보장

key와 value 모두 null 값 허용


TreeMap Interface

SortedMap을 implement 하고 있기 때문에, key값을 기준으로 키-값 쌍의 오름차순으로 되어있다



입출력 및 고급 스트림 연결 기법

  • 스트림은 물의 흐름과 비슷하다는 것에서 유래되었다. TCP프로토콜에서 네트워크를 원하는 상대방 사이에 통신을 위한 데이터 교환하는 방식에서 유래되었다
  • TCP프로토콜은 네트워크에 가상 경로를 설정하고 그 경로에 데이터를 바이트(byte)로 흘려 보내는 방법의 스트림이다. 자바는 이 방식을 그대로 I/O에 적용하여 사용한다
  • 자바에서 사용되는 모든 I/O 클래스들은 스트림 방식으로 데이터를 읽고 쓴다
  • 스트림에서 가장 중요한 것은 데이터가 있는 소스와 데이터가 전달 되어지는 목적지이다


반응형

댓글