java 2 java collections - maejo university · arrays...

60
Java 2 Java Collections By Assoc. Prof. Rangsit Sirirangsi

Upload: others

Post on 06-May-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Java 2

Java Collections

By Assoc. Prof. Rangsit Sirirangsi

Page 2: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Collections

Collection (บางครงถกเรยกวา container) ใชสาหรบจดกลมสมาชกในรป

ของขอมลใหอยในหนวยเดยวกน

Collection ประกอบดวยบรการตาง ๆ เชน การเพมหรอลบขอมล และการ

จดการกบสมาชกตาง ๆ ภายใน collection

Collection ในจาวาไดถกจดเตรยมไวในรปของอนเตอรเฟสและคลาสตาง ๆ

ภายในแพคเกจ java.util

การใช Collection ในทางปฏบตผใชเพยงแตเรยกใชเมธอดใหเหมาะสม

เทานนกพอ ไมจาเปนตองรถงการทางานภายใน

สวน Collection Framework เปนการรวบรวมสถาปตยกรรมทใชสาหรบ

การนาเสนอและเขาถงสมาชกภายใน Collections

Page 3: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Storing data

ขอมลสามารถจดเกบในรปของโครงสรางขอมลไดหลายชนด เชน

Array Lists

Sequential Lists

Hash tables

จดเกบโดยใช key ทสามารถคานวณไดจากขอมลทตองการ

Trees

เชนขอมลแบบ Binary tree

● ‘h’ ● ‘e’ ● ‘l’ ● ‘l’ ● ‘o’ ●

‘h’ ‘e’ ‘l’ ‘l’ ‘o’

Page 4: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Benefits of a Collection Framework

ลดเวลาในการโปรแกรม

เปนโครงสรางขอมลและอลกอลทมสทมประสทธภาพ

เพมความเรวและคณภาพของการโปรแกรม

ลดเวลาในการเรยนร APIs ใหม ๆ

เปน Framework ทมลกษณะเปนหนงเดยวกน

ใชเปน APIs สาหรบโปรแกรมประยกตตาง ๆ

กระตนใหเกดการนากลบมาใชใหมของซอฟตแวร

โครงสรางขอมลและอลกอลทมสแบบใหม ๆ

Page 5: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

The Java Collection API

Collection: ประกอบไปดวย interfaces ตาง ๆ

Set: ไมสามารถเกบคาซ ากน และลาดบไมใชสงสาคญ

List: เกบคาซ ากนไดลาดบเปนสงสาคญ

Map: ถอเปน “dictionary” ทมคาเกยวของกบ keys และ values ลาดบเปน

สงทไมสาคญ

Page 6: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Java Collections

Object(java.lang)

AbstractList

LinkedHashMap

HashMap

AbstractSequentialList

ArrayList

Stack

Vector

LinkedHashSet

HashSet

TreeSet

AbstractCollection

Collection

List

AbstractSet

Set

SortedSet

Map

SortedMap

TreeMapLinkedList

AbstractMap

Dictionary

Map

Hashtable

Page 7: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

InterfacesImplementations

Hash table Resizablearray

Tree(sorted)

Linkedlist

Hash table + Linked list

Set HashSet TreeSet(sorted) LinkedHashSet

List ArrayList LinkedList

Queue

Map HashMap TreeMap(sorted) LinkedHashMap

General Purpose Implementations

Page 8: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Interface: Collection

public interface Collection {// Basic Operationsint size();boolean isEmpty();boolean contains(Object element);boolean add(Object element); boolean remove(Object element); Iterator iterator();

// Bulk Operationsboolean containsAll(Collection c);boolean addAll(Collection c); boolean removeAll(Collection c); boolean retainAll(Collection c); void clear();

// Array OperationsObject[] toArray();Object[] toArray(Object a[]);

}

Collection ถอเปน interface หลกทถก

นาไปใชสบทอดตามลาดบชนของ

Collection

สามารถใชในการจดเกบ

ขอมลทซาหรอไมกได

ขอมลทเรยงลาดบหรอไมกได

Page 9: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

สรปเมธอดทใชใน interface Collection

boolean add(O e) ใชสาหรบการเพมสมาชกลงใน collection โดยเมธอดคนคา false ในกรณทไมสามารถเพมสมาชกได

boolean addAll(Collection c)ใชสาหรบการเพมทก ๆ สมาชกจาก collection c ลงใน collection ปจจบนทถกระบ

boolean contains(Object e)เมธอดคนคา true ในกรณท collection มสมาชกทถกระบอยแลว

boolean containsAll(Collection c)

เมธอดคนคา true ในกรณท collection ประกอบไปดวยทก ๆ สมาชกปรากฏอย

ภายใน Collection ทถกระบ

void clear()

ใชสาหรบการลบสมาชกทงหมดออกจาก collection

interface Collection : Methods

Page 10: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

สรปเมธอดทใชใน interface Collection

boolean isEmpty()คนคา true ในกรณทไมมสมาชกอยภายใน collection

Iterate iterator()

คนคา iterator ทยอมใหผใชสามารถเหนคาสมาชกภายใน collection

boolean remove(Object o) ลบออปเจคในรปของสมาชกทถกระบออกจาก collection ในกรณทมสมาชก

ดงกลาวอยจรง

boolean removeAll(Collection c)

ลบทก ๆ สมาชกทอยภายใน Collection เปาหมายทเหมอนกบหรอมอยใน collection

ทถกระบ

interface Collection : Methods

Page 11: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

สรปเมธอดทใชใน interface Collection

boolean retainAll(Collection c)

ลบสมาชกทงหมดภายใน Collection เปาหมายทไมเหมอนกบหรอมอยใน collection

ทถกระบ ดงนนสมาชกทเหลออยของ collection ทงสองจะตองเทากน

int size()

คนคาจานวนสมาชกทอยภายใน collection ปจจบน

Object[] toArray()

คนคาอะเรยทประกอบไปดวยสมาชกทงหมดของ collection ปจจบน

Object[] toArray(Object a[]) คนคาอะเรยทประกอบไปดวยสมาชกทงหมดของ collection ปจจบน รนไทมของอารเรยทมการคนคาจะตองเปนชนดเดยวกบอารเรย a

interface Collection : Methods

Page 12: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

interface List

List — เปน collection ทมสมาชก

ภายในเรยงลาดบกน และสามารถ

มคาซ ากนได

ผใชสามารถควบคมการเขาถง

ขอมลสมาชกภายใน List โดยการ

ระบตาแหนง เชนเดยวกบการ

ทางานของ Vector

public interface List {// Positional Access

Object get(int index);Object set(int index, Object element); void add(int index, Object element); Object remove(int index); abstract boolean addAll(int index,

Collection c);

// Searchint indexOf(Object o);int lastIndexOf(Object o);

// IterationListIterator listIterator();ListIterator listIterator(int index);

// Range-viewList subList(int from, int to);

}}

Page 13: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Java Lists: ArrayList

ความแตกตางระหวาง arrays และ ArrayLists:

Array มขนาดคงท แต ArrayList สามารถเพมหรอลดขนาดได

อตโนมต

ดงนนจงไมจาเปนตองทราบขนาดของ ArrayList กอนการทางาน

Arrays สามารถใชงานไดกบขอมลชนดพนฐานหรอออปเจค แต

ArrayLists สามารถเกบคาไดเฉพาะออปเจค (Java 1.4)

การทางานแบบไม synchronized

Page 14: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Class Diagram : ArrayList

Collection

add()clear()contains()isEmpty()iterator()remove()size()toArray()

List

get()indexOf()lastIndexOf()lisIterator()removeRange()set()sublist()

ArrayList LinkedListVector

elementAt()setElementAt()addElement()removeElementAt()insertElementAt()

<<interface>> <<interface>>

Page 15: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Array Lists

Constructor Summary

ArrayList() สราง list วาง ๆ ทมขนาดเรมตนเทากบ 10

ArrayList() สราง list ทประกอบดวยสมาชกของ collection ทถกระบ เพอใหสามารถคนคา

ไดโดยใช iterator รวมกบ collection

ArrayList() สราง list วางพรอมกบระบคาเรมตน

วธการเรยกใช constructors (แบบเดม):

import java.util.ArrayList;

ArrayList vec1 = new ArrayList();

ArrayList vec2 = new ArrayList(initialCapacity);

Page 16: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

สรปเมธอดทใชในการเขาถงและเพมขอมลใน list

size() คนคาจานวนสมาชกทอยภายใน list

get( int index)คนคาสมาชกทถกระบตาแหนง index ภายใน list

add( int index, java.lang.Object o) แทรกสมาชกลงในตาแหนง index ทถกระบอยภายใน list

add( java.lang.Object o) เพมออปเจคโดยตอทายสมาชกทอยภายใน list

set( int index, java.lang.Object o) แทนทสมาชกทถกระบตาแหนงโดย index ดวยพารามเตอรในรปของออปเจคท

ตองการ

ArrayLists

Page 17: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

สรปเมธอดเพมเตมทใชใน list

isEmpty () คนคา true ในกรณท list ไมมสมาชกอยภายใน

clear () ลบทก ๆ สมาชกภายใน list.

contains (java.lang.Object o) คนคา true ในกรณท list ปจจบนประกอบไปดวยออปเจคทถกระบ

indexOf (java.lang.Object o) คนคาตาแหนง index ทพบครงแรกของออปเจคทถกระบ

trimToSize()Trims the capacity of this ArrayList instance to be the list's current size.

Array Lists

Page 18: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Differences from Java 1.4

ในจาวา 1.4 หรอตากวา ArrayLists ไมสามารถใชในการจดเกบขอมลชนด

พนฐานได

ดงนนการจดเกบขอมลของ ArrayList ตองอยในรปของออปเจคเทานน

สงสาคญ : เมอมการรบคาออปเจคออกจาก ArrayList ดวยเมธอดใด ๆ

จะตองมการแปลงคาออปเจคนน ๆ ใหเปนชนดของขอมลทถกจดเกบ

เปนครงแรกเสมอ

ในกรณทจาเปนตองจดเกบขอมลชนดพนฐาน (เชน int, double) ผใช

ตองใช “wrapper” คลาสรวมดวยเสมอ เชน Integer, Double เชน

myIntList.add(new Integer(7));

เมอตองการรบคาจาก ArrayList จาเปนตองใชคลาส wrapper อกเชนกน

int x = ((Integer) myIntList.get(i)).intValue();

Page 19: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

java.applet, java.awt, java.io, java.lang, java.net, java.util

java.math, java.rmi, java.security, java.sql, java.text, java.beans

javax.accessibility, javax.swing, org.omg

javax.naming, javax.sound, javax.transaction

java.nio, javax.imageio,javax.net, javax.print,javax.security, org.w3c

javax.activity,javax.management

Java 1.08 packages212 classes

Java 1.123 packages504 classes

Java 1.259 packages1520 classes

Java 1.377 packages1595 classes

Java 1.4103 packages2175 classes

Java 1.5131 packages2656 classes

New Events

Inner class

Object Serialization

Jar Files

International

Reflection

JDBC

RMI

JFC/Swing

Drag and Drop

Java2D

CORBA

JNDI

Java Sound

Timer

Regular ExpLoggingAssertionsNIO

Differences from Java 1.0- 1.5

Page 20: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Generics

ในจาวา 1.4 หรอกอนหนานน เมอมการรบคาสมาชกจาก collection ผใช

จาเปนตองทาการ cast กอนเสมอ

การ Cast ทไมถกตองอาจกอใหเกดปญหาตามมา

การ Cast ถอเปน unsafe - อาจกอใหเกดความลมเหลวในขณะ runtime

นอกจากนนแลวยงไมสามารถเหนไดชดเจนวาขอมลชนดใดทถกนาเขา

หรอออกจาก collection

แตการทางานแบบ Generics ชวยใหคอมไพเลอรทราบวาขอมลชนดใดทถก

จดเกบโดย collection

คอมไพเลอรทาหนาท casts แทนผใช

ชวยใหชวงเวลาในการคอมไพลเปนแบบ type safety

ไดมาจากแนวคดของ C++ templates

Page 21: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Generics

นอกจากนนแลวในจาวาเวอรชน 1.4 หรอกอนหนา ArrayList จะถกใชเฉพาะ

การจดเกบออปเจคเทานน ไมสามารถใชเกบขอมลแบบพนฐานได

แตดวยเหตผลของความ compatibility ของการทางานแบบเดม ยงคง

สามารถทาไดตามปกต แตจะมขอความแจงเตอนผใชอยเสมอ

สวนในจาวา 5 ผใชสามารถเรยกใช ArrayList ไดโดยใชรปแบบใหมท

เรยกวา generics syntax

เปนวธการทมการคอมไพลซาดวยชนดขอมลทตองการใช

การใชงานเมอเปรยบเทยบกบแบบเดม:

List words = new ArrayList(); // java 1.4

List <String> words = new ArrayList <String> (); // java 5

Page 22: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Using an ArrayList

ในกรณทตองการใชรปแบบ generic ใหระบเครองหมาย angle brackets

ระหวางชอของ ArrayList และชนดของออปเจคทตองการจดเกบ

การใชงานเมอเปรยบเทยบกบแบบเดม:

ArrayList words = new ArrayList(); // java 1.4

ArrayList <String> words = new ArrayList <String> (); // java 5

ในกรณทตองการใชงานแบบเดม (จาวา 1.4) แตไมตองการขอความแจง

เตอน อาจใช <?> wildcard แทนไดดงน

ตวอยางเชน : ArrayList<?> vec1 = new ArrayList<?>();

Page 23: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Accessing with and without generics

เรยกใชเมธอด get() ดวยจาวา 1.4 :

ArrayList myList = new ArrayList();myList.add("Some string");String s = (String) myList.get(0);

เรยกใชเมธอด get() ดวยจาวา 5 :

ArrayList<String> myList = new ArrayList<String>();myList.add("Some string");String s = myList.get(0);

ไมจาเปนตองใช Cast อกตอไปเมอใชงานรวมกบ genericคลาสและ interfaces ทสามารถใช generic ไดแก : Vector, ArrayList, LinkedList, Hashtable, HashMap, Stack, Queue, PriorityQueue, Dictionary, TreeMap , TreeSet

Page 24: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

An example:

import java.util.ArrayList;

public class ArrayListTest{

public ArrayListTest{

System.out.println("ArrayListTest");ArrayList aList = new ArrayList(); aList.add("Dan");aList.add("George");aList.add("Mary");

System.out.println("aList contains:");for(int x = 0; x < aList.size(); x++){

System.out.println(aList.get(x));}

} }

“Dan” “George “Mary”

Page 25: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

An example:

import java.util.ArrayList;

public class ArrayListTest{

public ArrayListTest{

System.out.println("ArrayListTest");ArrayList<String> aList = new ArrayList <String>();aList.add("Dan");aList.add("George");aList.add("Mary");aList.add(2, “Tom”);System.out.println("aList contains:");for(int x = 0; x < aList.size(); x++){

System.out.println(aList.get(x));}

} }

“Dan” “George “Tom” “Mary”

Page 26: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

The "For Each" Loop

ในจาวาเวอรชน 5.0 ไดมการเพมการทางานของ for loop ชนดใหมทเรยกวา for-each loop

การทางานของ loop จะประมวลผลหนงครงสาหรบแตละคาของสมาชกทอยภายใน collection

รปแบบของคาสงfor(type varname : collection) {...}

type : ชนดขอมลใน collection Varname : เปนตวแปรทใชแสดงผลCollection : ระบชอของ collection ทใช

double[] array = {2.5, 5.2, 7.9, 4.3, 2.0};

for(double d: array ) {

System.out.println(d); }

Page 27: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

For each loop (Collections)

import java.util.*;public class ArrayList_ForEach1{public static void main(String []args){

ArrayList<Integer> list = new ArrayList<Integer>(); list.add(7); list.add(15); list.add(-67);

for (Integer number: list){ System.out.println(number);

} }

} Output :715-67

ตวอยางการใช for each สาหรบ ArrayList ทจดเกบคา Integer ออปเจค

Page 28: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Using enhanced FOR loop:

import java.util.ArrayList;

public class ArrayList_ForEach2{

public static void main (String [] arg){

System.out.println("ArrayListTest");ArrayList<String> aList = new ArrayList <String>(); aList.add(new String("Dan"));aList.add("George");aList.add("Mary");

System.out.println("aList contains:");

for(String e:aList){

System.out.println(e);}

} }

ArrayListTestaList contains:DanGeorgeMary

Page 29: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

What happens ?

ArrayList<String> students = new ArrayList<String>();students.add("Mary");students.add("James");students.add("Kevin"); Mary James Kevin

Mary Tanya James Kevin

temp

Mary Tanya Kevin

Mary John Kevin

students.add(1, "Tanya");

String temp = students.get(3);System.out.println(temp);

students.set(1, "John");System.out.println(students.size());

students.remove(2);

Page 30: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

The "For Each" Loop: An Example

import java.util.*;public class ArrayListDemo {

public static void main(String[] args) {ArrayList<String> todoList = new ArrayList<String>(20);System.out.println("Enter list entries, when prompted.");boolean done = false;String next = null, answer;Scanner input = new Scanner(System.in);while(!done) {

System.out.println("Input an entry: ");next = input.nextLine();todoList.add(next);System.out.print("More item for the list ?");answer = input.nextLine();

if(!(answer.equalsIgnoreCase("Yes")))done = true;

}System.out.println("The List contains: ");for(String entry: todoList)

System.out.println(entry);}

}

Page 31: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Vector with Generic

import java.util.*;public class VectorDemo {

public static void main(String[] args) {Vector<String> v = new Vector<String>();v.add("1");v.add("2");v.add("3"); ArrayList<String> arrayList = new ArrayList<String>();arrayList.add("4");arrayList.add("5");

//append all elements of ArrayList to Vectorv.addAll(arrayList);

System.out.println("After appending all elements of ArrayList, Vector contains..");for(String temp:v)

System.out.print(“ “ +temp);}

} After appending all elements of ArrayList, Vector contains..1 2 3 4 5

Page 32: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Iterators

เปนการเขาถงแตละสมาชกภายใน collection คราวละหนงครงเปนแนวคดทคลายกบการใชการวนซาทเกดขนภายใน loop เชน

for (int i=0; i < 10; i++) { . . . }Iterator เปน interface ทมลกษณะเปน abstract คอนขางมาก ดงนนจงสามารถนาไปประยกตใชไดกบทก ๆ collection Iterator interface ประกอบไปดวยรายละเอยดการทางานดงตอไปน

Interface Iterator {Object next();boolean hasNext();void remove();

}

Page 33: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Iterator methods

Object next() คนคาสมาชกในลาดบถดไปในการ iteration

void remove() ลบสมาชกปจจบนออกจาก collection

boolean hasNext() คนคา true ในกรณทการ iteration ยงมสมาชกอยในลาดบถดไป

hasNext()false

hasNext() true

next()

iterator

Page 34: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Example: Iterator

public static void filter(Collection c) {

for (Iterator it = c.iterator() ; it.hasNext(); )if (!cond(it.next()))

it.remove();}

public static void filter(Collection c) {

Iterator it = c.iterator();while (it.hasNext())

if (!cond(it.next()))it.remove();

}

รปแบบการทางานของ Iteratorfor (Iterator iName = CName.iterator(); iName.hasNext();) {

Type varname = (Type) iname.next();System.out.print(varname + " ");

}

Page 35: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Vector with Iterator

import java.util.*;public class VectorDemo {

public static void main(String[] args) {Vector<String> v = new Vector<String>();v.add("1");v.add("2");v.add("3"); ArrayList<String> arrayList = new ArrayList<String>();arrayList.add("4");arrayList.add("5");

v.addAll(arrayList); //append all elements of ArrayList to Vector

System.out.println("After appending all elements of ArrayList, Vector contains..");

Iterator iter = v.iterator(); while (iter.hasNext()) {

System.out.print(“ “+iter.next());}

}}

After appending all elements of ArrayList, Vector contains..1 2 3 4 5

Page 36: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Object References

จาวาใช reference สาหรบการอางถงแอดเดรสทแทจรงของออปเจค เชน

Student student = new Student(“John Smith”, “40725”, 3.85);

student John Smith407253.58

References สามารถนามาสราง links เพอเชอมกนระหวางออปเจคได เชน

คลาส Student ประกอบไปดวย reference ไปยงออปเจคอน ๆ ของ Student

John Smith407253.57

Jane Jones588213.72

Head

Page 37: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

References as Links

แมวาการใช References ในการสราง Single Linked List เปนสงทสามารถ

ทาได แตอยางไรกตามการทางานยงมประสทธภาพทไมสงนก

ดงนนจงไดมการพฒนา Double Linked List ขนมาใหม เพอแกไขปญหา

ดงกลาว

studentList

Page 38: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Java Lists

LinkedList : ถกพฒนาขนในรปของ

double linked list

มผลทาใหการแทรกขอมล และการลบ

ขอมลในชวงกลาง ๆ ของ list ทาไดอยาง

รวดเรว

LinkedList ไดจดเตรยมเมธอดประเภท get,

remove และ insert สมาชกทจดเรมตนและ

สนสดของ list

LinkedList ไมสนบสนนการทางานแบบ

synchronized

AbstractList

AbstractSequentialList

ArrayList

Stack

VectorLinkedList

List AbstractCollection

Collection

Page 39: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Interface: List

List ใชกบการจดเกบขอมลทม

การเรยงลาดบกน

Lists สามารถประกอบไปดวย

ขอมลทซ ากนได

ผใชสามารถเขาถงขอมลของ

List ไดโดยใชคาตาแหนง index

public interface List extends Collection {// Positional AccessObject get(int index);Object set(int index, Object element); void add(int index, Object element); Object remove(int index); abstract boolean addAll(int index, Collection c);

// Searchint indexOf(Object o);int lastIndexOf(Object o);

// IterationListIterator listIterator();ListIterator listIterator(int index);

// Range-viewList subList(int from, int to);

}

Page 40: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

สรปเมธอดทใชในการเขาถงและเพมขอมลใน list

LinkedList() คอนสรคเตอรสาหรบ Linked list วาง ๆ

LinkedList() คอนสรคเตอรทประกอบไปดวยสมาชกภายใน collection ทถกระบ

เพอใหสามารถคนคาไดโดยใช collection's iterator

addAll(Collection c) ทก ๆ สมาชกทงหมดทอยภายใน collection ถกระบจะถกนาไปตอทาย list เพอใหสามารถคนคาไดโดยใช collection's iterator

addAll(int index, Collection c) แทรกทก ๆ สมาชกลงใน collection ทถกระบ โดยเรมตนจากตาแหนงทถกระบ

addFirst(Object o) แทรกสมาชกทตองการลงในตาแหนงแรกของ list

addLast(Object o) เพมสมาชกทตองการตอทาย list

Linked List Method

Page 41: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

สรปเมธอดเพมเตมทใชใน list

getFirst() คนคาสมาชกลาดบแรกทอยภายใน list

getLast() คนคาสมาชกลาดบสดทายทอยภายใน list

removeFirst() ลบและคนคาสมาชกลาดบแรกออกจาก list

removeLast() ลบและคนคาสมาชกลาดบสดทายออกจาก list

remove(int index) ลบคาสมาชกตามตาแหนงทถกระบภายใน list

remove(Object o) คนคาสมาชกทถกพบเปนครงแรกภายใน list

Linked List Method

Page 42: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Linked List Example

import java.util.*;

class MyLinkedList {

public static void main(String[] args) {

LinkedList listIT = new LinkedList();

David Joe Sean

David

David Michael

David Michael Sean

Joe Sean

listIT.add("David");

listIT.add("Michael");

listIT.add("Sean");

listIT.set(1, “Joe");

listIT.remove(0);

System.out.println(listIT);}

}

Page 43: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Illustration/example

Operation List’s contents Return value

1. Initialiaze(List) <empty> -

2. Add(0,A,List) A -

3. Add(0,B,List) B A -

4. Add(1,C,List) B C A -

5. Set(1,N,List) B N A -

6. Add(1,D,List) B D N A -

7. Remove(A,List) B D N A

8. Set(3,I,List) B D N I -

9. Remove(D,List) B N I D

10. Remove(N,List) B I N

Page 44: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Interface: Map

map บางครงอาจถกอางถงในรป

ของ dictionary

Map เปนออปเจคทใชสาหรบการ

แปลง keys ใหเปน values

Maps เกบคา key ทไมซ ากนแต

values ซ ากนได

Hashtables เปนตวอยางการใช

งานทสบทอดมาจาก Maps

public interface Map {// Basic OperationsObject put(Object key, Object value);Object get(Object key);Object remove(Object key);boolean containsKey(Object key);boolean containsValue(Object value);int size();boolean isEmpty();

void putAll(Map t);void clear();

public Set keySet();public Collection values();public Set entrySet();

// Interface for entrySet elementspublic interface Entry {

Object getKey();Object getValue();Object setValue(Object value);

}}

Page 45: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Map interface

Map

clear()containsKey()containsValue()entrySet()get()keySet()put()size()values()

SortedMap

comparator()firstKey()headMap()lastKey()subMap()tailMap()

sorted

HashMap

LinkedHasMap

ordered access

HashTable

no nulls

TreeMap

random access

<<Interface>>

<<Interface>>

Page 46: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

สรปเมธอดทใชใน Map interface

clear() ลบทก ๆ สมาชกออกจาก map

containKey(k) คนคา true ในกรณท map ประกอบดวย mapping สาหรบ key k

containsValue(v) คนคา true ในกรณท map มการ maps keys ตงแตหนงหรอมากกวาไปยงคา v

entrySet() คนคา Set view ของการ mappings ทถกจดเกบไวใน map

Map interface Method

เมธอดดงตอไปน กาหนดให k เปนออปเจค และใชสาหรบนาเสนอ key

สวน v เปนออปเจคทใชนาเสนอ value และ m ใชนาเสนอ Map

Page 47: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

สรปเมธอดทใชใน Map interface

get(k) คนคา true ในกรณทมการmaps คา key k

isEmpty() คนคา true ในกรณท map ไมมการแปลงคา key-value

keySet() คนคา Set view ของคยทอยภายใน map

put(k,v) เพมคา v พรอมกบคย k ภายใน map

putAll(m) สาเนาคาจาก map m ไปยง map ทเรยกใช

remove(k) ลบคา mapping สาหรบคย k จาก map ปจจบน

values() คนคา Collection view ของคาทอยภายใน map

Map interface Method

Page 48: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

ประกอบไปดวย 3 มมมอง

มมมองแบบ Entry set ขอมลทงหมดทเขาส map เชน

Set entrySet()

มมมองแบบ key set กลมของ keys ทงหมดภายใน map ทถกกาหนดคา

เนองจาก keys มลกษณะ unique เชน

Set keySet()

มมมองจาก value collection เปนกลมของทก ๆ values ภายใน map ม

ลกษณะเปน collection เนองจาก keys ทแตกตางกนสามารถ map ลงใน

คาเดยวกนได เชน

Collection values()

Interface: Map

Page 49: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

import java.util.*;public class MapDemo {

public static void main(String args[]) {Map<String, String> m = new HashMap<String, String>();m.put("1", "C#");m.put("2", "Java");m.put("3", "Php");

System.out.println(" Size of Map = " m.size());System.out.println("The keys of this Map : " +m.keySet());System.out.println("The values of this Map : "+ m.entrySet());

}}

output :Size of Map = 3The keys of this Map : [3, 2, 1]The values of this Map : [3=Php, 2=Java, 1=C#]

Map Example

Page 50: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

The class Hashtable

Hashtable ใชสาหรบเกบขอมลเปนลกษณะ

คลาดบ <key,value>

ในคลาส Hashtable จะใช Hash code ของ key ทา

หนาทเปนดชนในการคนหาคาของ value

คลาส Hashtable สามารถใชงานแบบ Multi-

Thread ได (Thread-Safe)

Dictionary

Map

Hashtable

Page 51: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Hashing Concept

เปนวธการจดเกบและคนหาขอมลอกแบบหนงทประกอบไปดวย

ฟงกชนสาหรบการ hash (h)

อะเรยทมขนาดเทากบ N

Collision เกดขนในกรณท 2 keys ถก map ลงในอะเรยในตาแหนงเดยวกน

ฟงกชน hash (h) แปลงคา keys ทมชนดขอมลทกาหนดไวใหอยในรปของ

คา integer ตงแต {0, N-1}

ตวอยางเชน:

h(x) = x mod N

mod : ฟงกชนทใชหาคาเศษของ Key Value

Page 52: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Hashing Function

กาหนดให ความจในการจดเกบขอมลทได ไมเกน 20

เรคคอรด

จากขอกาหนดเลอก N สาหรบการ mode = 19

3211 2134 1532 1123 1143 1135 2432 7213 8812 5321

3211 : 02134 : 61532 : 121123 : 21143 : 31135 : 142432 : 07213 : 128812 : 155321 : 1

h(x) = x mod N

0 32111 53212 11233 1143456 2134789101112 15321314 113515 881216171819

Key: Value

Page 53: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Hash Table: Example

.

.

.

.

0123

9996999799989999

045-34-0002

045-35-9996

กาหนดให Item(name, ssn) เมอ

ssn เปนตวเลข 9 หลก

Hash table N = 10000.

Hash function: เฉพาะตวเลข 4

หลกสดทายของ x

การจดเกบคา HashTable จะม

ลกษณะดงตอไปน

Page 54: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Example use of a Hashtable

import java.util.*;

public class HashtableUser {public static void main(String[] args) {

Hashtable table = new Hashtable();table.put(“ABC", “abc");table.put(“XYZ", “xyz");table.put(“MNO", “mnos");System.out.println("two -> " + table.get(“XYZ"));System.out.println("deux -> " + table.get(“xyz"));

}}

Key Value

ABC abc

XYZ xyz

MNO mno

two -> xyzdeux -> null

การเพมคาเขาส Hashtable

table.put(key, value);

การรบคาจาก Hashtable

value = table.get(key);

Page 55: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Hashtable (1.5)

import java.util.*;class HashtableDemoGen {

public static void main(String args[]) {Hashtable<String,String> hashtable = new Hashtable<String,String>();hashtable.put("apple", "red");hashtable.put("strawberry", "red");hashtable.put("lime", "green");hashtable.put("banana", "yellow");hashtable.put("orange", "orange");

for (Enumeration<String> e = hashtable.keys() ; e.hasMoreElements() ;) {String k = e.nextElement();String v = hashtable.get(k);System.out.println("key = " + k + "; value = " + v);

}

System.out.print("\nThe color of an apple is: ");String v = hashtable.get("apple");System.out.println(v);

}}

key = banana; value = yellowkey = apple; value = redkey = orange; value = orangekey = lime; value = greenkey = strawberry; value = red

The color of an apple is: red

Page 56: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Upcasting Review

class Shape {private String name;public Shape(String aName) { name=aName; } public String getName() { return name; }public double calculateArea() { return 0.0; }

} // End Shape class

class Circle extends Shape {private double radius;public Circle(String aName) {

super(aName); radius = 1.0;}public Circle(String aName, double radius) {super(aName); this.radius = radius;

}public double calculateArea() {

return (double)3.14 * radius*radius; }

public void testCast() {System.out.println(“Can Cast Object”);

}}

Add more methodIn subclass

Page 57: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Upcasting Reviewclass Run {

public static void main(String argv[]) {Shape c1 = new Circle("Circle C1“);Shape c2 = new Circle("CircleC2",3.0);

System.out.println("The area of " + c1.getName( )+ " is " + c1.calculateArea( ) + " sq. cm.“);

System.out.println("Thearea of " + c2.getName( )+ " is " + c2.calculateArea( ) + " sq. cm.“);

c1.testCast();

}

Error and need downcasting

Page 58: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Conversion of Reference types : DownCasting

สวนในทางกลบกนการแปลง Reference

ออปเจคจาก SuperClass ตามลาดบชน

ของคลาสใหเปน Reference ออปเจคของ

SubClass ได

แต Reference ดงกลาวจะไมสามารถ

เรยกใชเมธอดทปรากฏอยภายใน

Subclass ได กรณนจะถกเรยกวา

downcasting

downcasting ตองการการ cast ท

ถกตอง มฉะนนจะกอใหเกดปญหา

กบการทางานของคอมไพเลอรได

SubClass

SuperClass

SuperClass sup = new SubClass();

SubClass sub = (SubClass) sup; // Need Casting otherwise Error

Page 59: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Understanding DownCasting

class Run {

public static void main(String argv[]) {Shape c1 = new Circle("Circle C1“);Shape c2 = new Circle("Circle C2", 3.0);

System.out.println("The area of " + c1.getName( )

+ " is " + c1.calculateArea( ) + " sq. cm.“);System.out.println("Thearea of " + c2.getName( )

+ " is " + c2.calculateArea( ) + " sq. cm.“);

Circle c3 = (Circle) c1;

c1.testCast(); // ……Ok …works after Downcasting

} // End main

SubClass

SuperClass

SuperClass sup = new SubClass();

SubClass sub = (SubClass) sup; // Need Casting otherwise Error

Page 60: Java 2 Java Collections - Maejo University · Arrays สามารถใช้งานได้กบข้อมูลชนิดพืั ้นฐานหรือออปเจค

Power of Collection

public class CollectionDemo {public static void main(String[] args) {

Set<String> obj = new HashSet<String>();obj.add("Aron");obj.add("Harry");obj.add("Steve");obj.add("Aron");for (String demo: obj) {System.out.println(""+demo);

}

System.out.println("Finish!!!!");List<String> list = new ArrayList<String>(obj);list.add("Steve");for (String temp: list) {System.out.println(""+temp);

}

}

}

HarrySteveAronFinish!!!!HarrySteveAronSteve