gnu-lee-oop-kor-lec11-1-chap15

Similar documents
쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - Lect07.pptx

PowerPoint Presentation

07 자바의 다양한 클래스.key

PowerPoint Presentation

PowerPoint Presentation

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

제11장 프로세스와 쓰레드

PowerPoint Presentation

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

PowerPoint 프레젠테이션

슬라이드 1

선형대수학 Linear Algebra

PowerPoint Presentation

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

항상쌍 ( 키, 값 ) 으로만데이터를저장하는클래스 의최고조상 : Map - Map을조상으로하는클래스, HashTable, HashMap, LinkedHashMap, TreeMap 등은데이터를저장할때반드시 키 와 값 의쌍으로저장한다. - Map에저장되는 키 는중복되면안되

목차 INDEX JSON? - JSON 개요 - JSONObject - JSONArray 서울시공공데이터 API 살펴보기 - 요청인자살펴보기 - Result Code - 출력값 HttpClient - HttpHelper 클래스작성 - JSONParser 클래스작성 공공

Microsoft PowerPoint - Java7.pptx

교육자료

PowerPoint Presentation

PowerPoint Presentation

JAVA PROGRAMMING 실습 08.다형성

JAVA PROGRAMMING 실습 09. 예외처리

ilist.add(new Integer(1))과 같이 사용하지 않고 ilist.add(1)과 같이 사용한 것은 자바 5.0에 추가된 기본 자료형과 해당 객체 자료 형과의 오토박싱/언박싱 기능을 사용한 것으로 오토박싱이란 자바 컴파일러가 객체를 요구하는 곳에 기본 자료형

Java

PowerPoint Presentation

슬라이드 1

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint Presentation

PowerPoint Presentation

chap 5: Trees

90 Java의정석定石 3판 - 연습문제풀이 Chapter 컬렉션프레임웍 Collections Framework

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

PowerPoint 프레젠테이션

03_queue

Design Issues

쉽게 풀어쓴 C 프로그래밍

untitled

gnu-lee-oop-kor-lec06-3-chap7

쉽게 풀어쓴 C 프로그래밊

PowerPoint Presentation

rmi_박준용_final.PDF

Java ...

자바-11장N'1-502

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

PowerPoint 프레젠테이션

비긴쿡-자바 00앞부속

Chapter 4. LISTS

Microsoft Word - java18-1-final-answer.doc

슬라이드 1

Microsoft PowerPoint - 08-chap06-Queue.ppt

JAVA PROGRAMMING 실습 05. 객체의 활용

쉽게 풀어쓴 C 프로그래밍

1

Spring Boot/JDBC JdbcTemplate/CRUD 예제

2002년 2학기 자료구조

java.lang 패키지 java.util 패키지 java.io 패키지 콜렉션 2

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

PowerPoint 프레젠테이션

5장.key

(Microsoft PowerPoint - java1-lecture9.ppt [\310\243\310\257 \270\360\265\345])

자바 프로그래밍

Spring Data JPA Many To Many 양방향 관계 예제

Microsoft PowerPoint - CSharp-2-기초문법

JAVA PROGRAMMING 실습 02. 표준 입출력

PowerPoint 프레젠테이션

4장.문장

11 템플릿적용 - Java Program Performance Tuning (김명호기술이사)

Chap 6: Graphs

12-file.key

05-class.key

Microsoft PowerPoint - 04-UDP Programming.ppt

슬라이드 1

Microsoft PowerPoint - 08-Queue.ppt

06장.리스트

02 C h a p t e r Java

Microsoft Word - java19-1-midterm-answer.doc

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

PowerPoint Presentation

Microsoft PowerPoint - Lect04.pptx

JAVA PROGRAMMING 실습 02. 표준 입출력

슬라이드 1

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

PowerPoint 프레젠테이션

스레드의우선순위 우선순위설정메소드 : void setpriority(int newpriority) newpriority 에설정할수있는등급 : 1( 가장낮은우선순위 ) 부터 10( 가장높은우선순위 ) 가장높은우선순위 : MAX_PRIORITY, 보통우선순위 : NORM_

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

쉽게


Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

Network Programming

Microsoft PowerPoint - 2강

Microsoft PowerPoint - java1-lecture8.ppt [호환 모드]

Microsoft PowerPoint - java1-lecture8.ppt [호환 모드]

Microsoft PowerPoint - java1-lecture8.ppt [호환 모드]

신림프로그래머_클린코드.key

Transcription:

어서와 Java 는처음이지! 제 15 장컬렉션

컬렉션 (collection) 은자바에서자료구조를구현한클래스 자료구조로는리스트 (list), 스택 (stack), 큐 (queue), 집합 (set), 해쉬테이블 (hash table) 등이있다.

자바는컬렉션인터페이스와컬렉션클래스로나누어서제공한다. 자바에서는컬렉션인터페이스를구현한클래스도함께제공하므로이것을간단하게사용할수도있고아니면각자필요에맞추어인터페이스를자신의클래스로구현할수도있다.

집합 (Set) 은원소의중복을허용하지않는다.

HashSet HashSet 은해쉬테이블에원소를저장하기때문에성능면에서가장우수하다. 하지만원소들의순서가일정하지않은단점이있다. TreeSet 레드 - 블랙트리 (red-black tree) 에원소를저장한다. 따라서값에따라서순서가결정되며하지만 HashSet 보다는느리다. LinkedHashSet 해쉬테이블과연결리스트를결합한것으로원소들의순서는삽입되었던순서와같다.

import java.util.*; public class SetTest { x public static void main(string args[]) { HashSet<String> set = new HashSet<String>(); set.add("milk"); set.add("bread"); set.add("butter"); set.add("cheese"); set.add("ham"); set.add("ham"); System.out.println(set); [Bread, Milk, Butter, Ham, Cheese]

import java.util.*; public class FindDupplication { public static void main(string[] args) { Set<String> s = new HashSet<String>(); String[] sample = { " 단어 ", " 중복 ", " 구절 ", " 중복 " ; for (String a : sample) if (!s.add(a)) System.out.println(" 중복된단어 " + a); System.out.println(s.size() + " 중복되지않은단어 : " + s); 중복된단어중복 3 중복되지않은단어 : [ 중복, 구절, 단어 ]

s1.containsall(s2) 만약 s2 가 s1 의부분집합이면참이다. s1.addall(s2) s1 을 s1 과 s2 의합집합으로만든다. s1.retainall(s2) s1 을 s1 과 s2 의교집합으로만든다. s1.removeall(s2) s1 을 s1 과 s2 의차집합으로만든다.

public class SetTest1 { public static void main(string[] args) { 합집합 [D, A, B, C] 교집합 [A] Set<String> s1 = new HashSet<String>(); Set<String> s2 = new HashSet<String>(); s1.add("a"); s1.add("b"); s1.add("c"); s2.add("a"); s2.add("d"); Set<String> union = new HashSet<String>(s1); union.addall(s2); Set<String> intersection = new HashSet<String>(s1); intersection.retainall(s2); System.out.println(" 합집합 " + union); System.out.println(" 교집합 " + intersection);

리스트 (List) 는순서를가지는요소들의모임으로중복된요소를가질수있다.

ArrayList 를배열 (Array) 의향상된버전또는가변크기의배열이라고생각하면된다. ArrayList 의생성 ArrayList<String> list = new ArrayList<String>(); 원소추가 list.add( "MILK" ); list.add( "BREAD" ); list.add( "BUTTER" );

ArrayList<String> list = new ArrayList<String>(); list.add( "MILK" ); list.add( "BREAD" ); list.add( "BUTTER" ); list.add( 1, "APPLE" ); // 인덱스 1 에 "APPLE" 을삽입 list.set( 2, "GRAPE" ); // 인덱스 2 의원소를 "GRAPE" 로대체 list.remove( 3 ); // 인덱스 3 의원소를삭제한다.

빈번하게삽입과삭제가일어나는경우에사용

import java.util.*; public class LinkedListTest { public static void main(string args[]) { LinkedList<String> list = new LinkedList<String>(); list.add("milk"); list.add("bread"); list.add("butter"); list.add(1, "APPLE"); list.set(2, "GRAPE"); // 인덱스 1에 APPLE" 을삽입 // 인덱스 2의원소를 GRAPE" 로대체 list.remove(3); // 인덱스 3 의원소를삭제한다. for (int i = 0; i < list.size(); i++) System.out.println(list.get(i));

ArrayList<String> list = new ArrayList<String>(); list.add(" 하나 ); list.add(" 둘 ); list.add(" 셋 ); list.add(" 넷 ); String s; Iterator e = list.iterator(); while(e.hasnext()) { s = (String)e.next(); // 반복자는 Object 타입을반환! System.out.println(s); MILK APPLE GRAPE

List<String> list = Arrays.asList(new String[size]); 일반적인배열을리스트로변환한다.

큐는후단 (tail) 에서원소를추가하고전단 (head) 에서원소를삭제한다.

import java.util.*; public class QueueTest { public static void main(string[] args) throws InterruptedException { int time = 10; Queue<Integer> queue = new LinkedList<Integer>(); for (int i = time; i >= 0; i--) queue.add(i); while (!queue.isempty()) { System.out.print(queue.remove()+" "); Thread.sleep(1000); // 현재의스레드를 1 초간재운다. 10 9 8 7 6 5 4 3 2 1 0

우선순위큐는원소들이무작위로삽입되었더라도정렬된상태로원소들을추출한다. 즉 remove() 를호출할때마다가장작은원소가추출된다. 우선순위큐는히프 (heap) 라고하는자료구조를내부적으로사용한다.

import java.util.*; public class PriorityQueueTest { public static void main(string[] args) { PriorityQueue<Integer> pq = new PriorityQueue<Integer>(); pq.add(30); pq.add(80); pq.add(20); for (Integer o : pq) System.out.println(o); System.out.println(" 원소삭제 "); while (!pq.isempty()) System.out.println(pq.remove()); 20 80 30 원소삭제 20 30 80

Map 은많은데이터중에서원하는데이터를빠르게찾을수있는자료구조이다. 맵은사전과같은자료구조이다.

import java.util.*; class Student { int number; String name; public Student(int number, String name) { this.number = number; this.name = name; public String tostring() { return name;

public class MapTest { public static void main(string[] args) { Map<String, Student> st = new HashMap<String, Student>(); st.put("20090001", new Student(20090001, " 구준표 ")); st.put("20090002", new Student(20090002, " 금잔디 ")); st.put("20090003", new Student(20090003, " 윤지후 ")); // 모든항목을출력한다. System.out.println(st); // 하나의항목을삭제한다. st.remove("20090002"); // 하나의항목을대치한다. st.put("20090003", new Student(20090003, " 소이정 ")); // 값을참조한다. System.out.println(st.get("20090003")); // 모든항목을방문한다. for (Map.Entry<String, Student> s : st.entryset()) { String key = s.getkey(); Student value = s.getvalue(); System.out.println("key=" + key + ", value=" + value);

{20090001= 구준표, 20090002= 금잔디, 20090003= 윤지후 소이정 key=20090001, value= 구준표 key=20090003, value= 소이정

Collections 클래스는여러유용한알고리즘을구현한메소드들을제공한다. 정렬 (Sorting) 섞기 (Shuffling) 탐색 (Searching)

정렬은데이터를어떤기준에의하여순서대로나열하는것이다.

import java.util.*; public class Sort { public static void main(string[] args) { String[] sample = { "i", "walk", "the", "line" ; List<String> list = Arrays.asList(sample); Collections.sort(list); System.out.println(list); // 배열을리스트로변경 [i, line, the, walk]

탐색이란리스트안에서원하는원소를찾는것이다.

import java.util.*; public class Search { public static void main(string[] args) { int key = 50; List<Integer> list = new ArrayList<Integer>(); for (int i = 0; i < 100; i++) list.add(i); int index = Collections.binarySearch(list,key); System.out.println(" 탐색의반환값 =" + index); 탐색의반환값 =50

여기서는 Map 을사용하여서영어사전을구현하여보자. 사용자가단어를입력하면단어의설명을보여준다. 영어단어를입력하시오 :map 단어의의미는지도영어단어를입력하시오 :school 단어의의미는학교영어단어를입력하시오 :quit

import java.util.*; public class EnglishDic { public static void main(string[] args) { Map<String, String> st = new HashMap<String, String>(); st.put("map", " 지도 "); st.put("java", " 자바 "); st.put("school", " 학교 "); Scanner sc = new Scanner(System.in); do { System.out.print(" 영어단어를입력하시오 :"); String key = sc.next(); if( key.equals("quit") ) break; System.out.println(" 단어의의미는 " + st.get(key)); while(true);