달력

11

« 2019/11 »

  •  
  •  
  •  
  •  
  •  
  • 1
  • 2
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

   

   

큐(Queue)

  • 대기열
  • Queue의 구조는 도로에 뚫려져 일정구간의 일방통행인 터널형태와 동일한 원리입니다.
  • 요소(Element)가 들어가는 입구와 요소(Element)가 나오는 출구가 따로 준비 되어 있어 가장 먼저 들어간 요소(Element)가 가장 먼저 나오는 선입선출, first-in-first-out(FIFO)방식의 자료구조입니다.   


   

   



Queue 활용 사례

  • OS CPU의 연산 처리시 작업 대기
  • 프린터가 출력하는 문서 대기시
  • 동영상 스트리밍 서비스에서 컨텐츠 버퍼링시

   


큐(Queue) 도식도

http://codedragon.tistory.com/4688

Posted by codedragon codedragon

댓글을 달아 주세요


 

 

LinkedList<E>에서 컬렉션 클래스를 HashSet<E> 변경

IteratorEx01.java에서 LinkedList<E> HashSet<E>변경시 반복자를 사용하기 때문에

컬렉션 선언만 바뀌고 나머지 부분은 모두 동일하게 사용할 있습니다.

LinkedList<String> list = new LinkedList<String>();

list.add("First");

list.add("Second");

list.add("Third");

list.add("Fourth"); 

list.add("Fifth");

현재 LinkedList<E>

HashSet<String> set = new HashSet<String>();

set.add("First");

set.add("Second");

set.add("Third");

set.add("Fourth");

set.add("Fifth");

LinkedList<E>에서 컬렉션 클래스를 HashSet<E> 변경

 

 

 

ArrayList 저장된 요소 출력하기

ArrayList대신 List인터페이스를 구현한 다른 컬렉션 클래스에 대해서도 동일한 코드를 사용할 있습니다.

첫줄의 ArrayList() 생성자 대인 List인터페이스를 구현한 다른 컬렉션 클래스의 객체를 생성하도록 변경하면 나머지 부분은 모두 동일하게 사용할 있습니다.

Iterator 이용해서 컬렉션의 요소를 읽어오는 방법은 표준화되어 있기 때문에 아래와 같이 코드의 재사용성을 높일 있습니다.

// 다른 컬렉션으로 변경할 때는 new ArrayList()부분만 변경하면 됩니다.

List list = new ArrayList();

 

Iterator iterator = list.iterator();

 

while(iterator.hasNext()){

System.out.println(iterator.next());

}

List 없고 ArrayList에만 있는 메소드를 사용하는 것이 아니라면 List타입의 참조변수를 생성하도록 선언하는 것이 좋습니다.

성능상의 이유이거나 테스트할 목적으로 List인터페이스를 구현한 다른 클래스로 바꿔야 한다면(LinkedList 바꿔야 한다면) 선언문 하나만 변경하면 나머지 부분은 모두 동일하게 변경없이 사용할 있습니다.

List list = new LinkedList();

 

, 참조변수의 타입이 List이므로 List 정의되지 않은 메소드는 사용하지 않을 것이기 때문입니다.

 

ArrayList list = new LinkedList();

만약 참조변수의 타입을 ArrayList 경우 참조변수 선언 이후의 코드를 검토하여 List 정의되지 않은 메소드를 호출했는지 확인해야 합니다.

 




Posted by codedragon codedragon

댓글을 달아 주세요

 

 

자료 형태에 따른 자료 구조 분류

유형

설명

선형 구조(Linear)

자료들 사이의 선후 관계가 일대일인 구조입니다.

 

ex) 연결 자료 구조, 순차 자료 구조, 스택, ,

비선형 구조(Non-Linear)

자료들 사이의 선후 관계가 계층 또는 그물 형태를 가지는 구조입니다.

 

ex) 트리, 그래프

단순 구조(Simple)

프로그래밍 언어에서 제공하는 기본 데이터 타입입니다.

 

ex) int, float, double, char

파일 구조(File)

보조 기억 장치에 데이터값이 실제로 기록되는 자료 구조입니다.

 

ex) 순차 파일, 색인 파일

 

 


Posted by codedragon codedragon

댓글을 달아 주세요


 

 

 

Collections

배열과 관련된 메소드를 Arrays클래스가 제공하는 처럼, 컬렉션과 관련된 메소드를 제공하는 클래스입니다.

 

 

Collection vs Collections

Collection

Collections

인터페이스

클래스

 

 

 

컬렉션 동기화

멀티쓰레드(multi-thread)프로그래밍에서는 하나의 객체를 여러 쓰레드가 동시에 접근할 있어 데이터의 일관성(consistency)) 유지하기 위해서는 공유되는 자원(객체) 대해 동기화(synchronization) 해야 합니다.

 

 

이전버전(JDK 1.2이전)

Vector Hashtable 같은 JDK 1.2이전의 클래스들은 자체적으로 동기화 처리를 합니다. 멀티쓰레드 프로그래밍이 아닌 경우에는 동기화가 불필요하여 성능을 떨어뜨리는 요인이 됩니다.

새로 추가된 ArrayList, HashMap 같은 컬렉션클래스들은 동기화를 자체적으로 제공하지 않고 필요한 경우에 java.util.Collections클래스의 동기화 메소드를 사용하여 동기화 처리를 하도록 변경되었습니다.

 

 

컬렉션 동기화 메소드

·       static Collection synchronizedCollection(Collection c)

·       static List synchronizedList(List list)

·       static Set synchronizedSet(Set s)

·       static Map synchronizedMap(Map m)

·       static SortedSet synchronizedSortedSet(SortedSet s)

·       static SortedMap synchronizedSortedMap(SortedMap m)

 

 

동기화 메소드 사용

List syncList = Collections.synchronizedList(new ArrayList());

 

 

 

변경 불가 컬렉션 생성하기

컬렉션에 저장된 데이터를 보호하기 위해서 컬렉션을 읽기전용으로 만들 있습니다.

주로 멀티쓰레드 환경에서 여러 쓰레드가 하나의 컬렉션을 공유할 경우 데이터가 손상될 있는데 이를 방지하기 위해서 사용합니다.

 

·       static Collection unmodifiableCollection(Collection c)

·       static List unmodifiableList(List list)

·       static Set unmodifiableSet(Set s)

·       static Map unmodifiableMap(Map m)

·       static NavigableSet unmodifiableNavigableSet(NavigableSet s)

·       static SortedSet unmodifiableSortedSet(SortedSet s)

·       static NavigableMap unmodifiableNavigableMap(NavigableMap m)

·       static SortedMap unmodifiabledSortedMap(SortedMap m)

 

 

 

싱글톤(singleton) 컬렉션 생성

인스턴스를 new연산자가 아닌 메소드를 통해서만 생성할 있어 인스턴스의 개수를 제한할 있는 싱글톤 기능을 통해 컬렉션을 생성합니다.

매개변수로 저장할 요소를 지정하면 해당 요소를 저장하는 컬렉션을 반환하며 반환된 컬렉션은 변경할 없습니다.

·       static List singletonList(Object o)

·       static Set singleton(Object o) //함수명이 singletonSet아님

·       static Map singletonMap(Object key, Object value)

 

 

 

종류의 객체만 저장하는 컬렉션 만들기

컬렉션에는 모든 종류의 객체를 저장할 있다는 장점이 있기도 하지만 이것이 단점이 되기도 합니다.

제네릭(generics)으로 컬렉션에 저장할 요소의 타입을 제한할 수도 있지만 호환성을 위해 제공합니다. 제네릭을 사용하기 위해서는 JDK 1.5부터 가능하며 이전으로 작성된 코드를 사용할 필요하게 됩니다.

대부분의 경우 종류의 객체만 저장하며 컬렉션에 지정된 종류의 객체만 저장하고자 경우에는 아래의 메소드를 사용하면 됩니다.

 

·       static Collection checkedCollection(Collection c, Class type)

·       static List checkedList(List list, Class type)

·       static Set checkedSet(Set s, Class type)

·       static Map checkedMap(Map m, Class keyType, Class valueType)

·       static Queue checkedQueue(Queue queue, Class type

·       static NavigableSet checkedNavigableSet(NavigableSet s, Class type)

·       static SortedSet checkedSortedSet(SortedSet s, Class type)

·       static NavigableMap checkedNavigableMap(NavigableMap m, Class keyType, Class valueType)

·       static SortedMap checkedSortedMap(SortedMap m, Class keyType, Class valueType)

 

 

사용 방법

번째 매개변수에 저장할 객체의 클래스를 지정합니다.

List list = new ArrayList();

//String.class으로 String 저장가능하도록 설정

List checkedList = checkedList(list, String.class);

checkedList.add("codedragon"); //정상 추가

checkedList.add(new Integer(3)); //ClassCastException 발생

 

 


Posted by codedragon codedragon

댓글을 달아 주세요


 

 

ArrayList & Vector 사용시 고려사항

·       ArrayList Vector 배열을 이용한 자료구조로 데이터를 읽고 저장하는 데는 효율적이지만 크기를 변경해야할 경우 새로운 배열을 생성한 기존의 배열의 데이터를 복사하기 때문에 효율성이 떨어지게 됩니다.

·       처음 ArrayList Vector 인스턴스 생성시 저장할 데이터의 개수를 미리 고려하여 충분한 크기 인스턴스를 생성하는 것이 좋습니다.

 

·       ArrayList 클래스는 Vector클래스와 동일하며 성능을 개선한 클래스가 ArrayList 클래스입니다.

·       Vector 클래스는 ArrayList 클래스와 마찬가지로 List 인터페이스를 상속받습니다. 따라서 Vector 클래스에서 사용할 있는 메소드는 ArrayList 클래스에서 사용할 있는 메소드와 거의 같습니다. Vector 클래스보다는 ArrayList 클래스를 사용하는 것이 좋습니다.

 




'Development > Algorithm, DataStructure' 카테고리의 다른 글

자료 형태에 따른 자료 구조 분류  (0) 2019.06.22
Collections  (0) 2019.06.10
ArrayList & Vector 사용시 고려사항  (0) 2019.06.04
알고리즘(Algorithm)  (0) 2019.05.27
Data Structure Visualizations  (0) 2019.05.25
트리(tree)  (0) 2019.05.01
Posted by codedragon codedragon

댓글을 달아 주세요


알고리즘(Algorithm)

·       문제를 어떻게 효율적으로 풀어가느냐에 대한 방법입니다.

·       컴퓨터로 문제를 풀기 위한 단계적인 절차입니다.

·       추상적, 개략적으로 기술한 조리법/동작법에 해당됩니다.

·       알고리즘을 구체적으로 표현한 것이 프로그램입니다.

·       기본 동작을 언급하되 너무 추상적이거나 구체적이어서는 안됩니다.

 

구분

설명

넓은 의미

자료 구조와 함께 프로그램을 구성하는 요소를 의미

좁은 의미

어떤 문제에 대한 답을 찾는 해법을 의미

 

https://bit.ly/2WoDUg2

'Development > Algorithm, DataStructure' 카테고리의 다른 글

Collections  (0) 2019.06.10
ArrayList & Vector 사용시 고려사항  (0) 2019.06.04
알고리즘(Algorithm)  (0) 2019.05.27
Data Structure Visualizations  (0) 2019.05.25
트리(tree)  (0) 2019.05.01
트리(tree) 자료 구조의 활용  (0) 2019.04.26
Posted by codedragon codedragon

댓글을 달아 주세요


 

Data Structure Visualizations

데이터 구조별로 데이터가 어떤 알고리즘으로 처리되는지 에니메이션을 통해 보여주는 서비스입니다.

 

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html


 

'Development > Algorithm, DataStructure' 카테고리의 다른 글

ArrayList & Vector 사용시 고려사항  (0) 2019.06.04
알고리즘(Algorithm)  (0) 2019.05.27
Data Structure Visualizations  (0) 2019.05.25
트리(tree)  (0) 2019.05.01
트리(tree) 자료 구조의 활용  (0) 2019.04.26
데이터양(데이터용량) 변환  (0) 2019.04.21
Posted by codedragon codedragon

댓글을 달아 주세요


 

 

트리(tree)

·         수학, 특히 그래프 이론에서 회로가 없는 연결 무향 그래프

·         나무를 닮은 자료구조.

·         뿌리, 가지, 잎으로 이루어져 있다.

 

http://bit.ly/2GtxL8i

http://bit.ly/2KV3G6L

https://en.wikipedia.org/wiki/Tree_(data_structure)

 

 


 

 

 



'Development > Algorithm, DataStructure' 카테고리의 다른 글

알고리즘(Algorithm)  (0) 2019.05.27
Data Structure Visualizations  (0) 2019.05.25
트리(tree)  (0) 2019.05.01
트리(tree) 자료 구조의 활용  (0) 2019.04.26
데이터양(데이터용량) 변환  (0) 2019.04.21
Algorithm Visualizer  (0) 2019.04.15
Posted by codedragon codedragon

댓글을 달아 주세요



 

 

트리(tree) 자료 구조의 활용

트리 자료구조는 활용분야가 다양한 자료 구조 입니다.

·         운영체제의 파일 시스템

·         검색 엔진

·         DOM(Document Object Model)

·         데이터 베이스

·         컴파일러

 


'Development > Algorithm, DataStructure' 카테고리의 다른 글

Data Structure Visualizations  (0) 2019.05.25
트리(tree)  (0) 2019.05.01
트리(tree) 자료 구조의 활용  (0) 2019.04.26
데이터양(데이터용량) 변환  (0) 2019.04.21
Algorithm Visualizer  (0) 2019.04.15
알고스팟(ALGOSPOT)  (0) 2019.04.07
Posted by codedragon codedragon

댓글을 달아 주세요


 

 

데이터양(데이터용량) 변환

 

http://bit.ly/2D58lg6


 

 


'Development > Algorithm, DataStructure' 카테고리의 다른 글

트리(tree)  (0) 2019.05.01
트리(tree) 자료 구조의 활용  (0) 2019.04.26
데이터양(데이터용량) 변환  (0) 2019.04.21
Algorithm Visualizer  (0) 2019.04.15
알고스팟(ALGOSPOT)  (0) 2019.04.07
큐(Queue) 도식도  (0) 2019.03.24
Posted by codedragon codedragon

댓글을 달아 주세요