java collection framework

44
Java Collection Framework

Upload: nyssa-reilly

Post on 30-Dec-2015

69 views

Category:

Documents


0 download

DESCRIPTION

Java Collection Framework. คืออะไร. จาวาคอลเลคชั่นคือชุดของอินเตอร์เฟสและคลาสในแพคเกจ java.util - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Java Collection Framework

Java Collection Framework

คออะไรbull จาวาคอลเลคช13นคอชดของอนเตอรเฟสและคลาส

ในแพคเกจ javautil

bull คอลเลคช13นคลาส คอ คลาสทออบเจกตของม13นประกอบข$นมาจากสมาชกยอย ซ$งสมาชกยอยน13นต)องเปนพอยตเตอรไปย13งออบเจกต ด13งน13นเราไมสามารถใช)ชดข)อมลพนฐานเปนสวนประกอบของคอลเลคช13นคลาสได) (แตอยาลมวาเราม wrapper class ทใช)แทนชดข)อมลพนฐานได))

การใช)งานbull น13น ผ)ใช)เพยงแตเรยกใช)เมธอดให)เหมาะสมเทาน13น

กพอ ไมจ1าเปนต)องร )ถ$งการท1างานภายในbull ถ)ามอารเรยภายใน กเปนหน)าทของผ)เขยนคอลเล

คช13นคลาสทจะเขยนโค)ดเตรยมไว)จ13ดการก13บการขยายอารเรยเอง

Abstract Class

bull แอบสแตรกคลาสคอคลาสทต)องมอยางน)อยหน$งเมธอดเปนแอบสแตรกเมธอด

bull แอบสแตรกเมธอดคอเมธอดทไมมโค)ดภายใน ทงวางไว)เพอให)ไปนยามในคลาสลกของม13น

bull เราไมสามารถสร)างออบเจกตข$นจากแอบสแตรกคลาสได) (แตสร)างจากลกของม13นทนยามโค)ดของแอบสแตรกเมธอดไว)ได))

ต13วอยางการใช)งาน1 public abstract class Robot

2 public String punch()

3 return ldquo Punchrdquo

4

5

6 public abstract String getClassName()

7

ต13วอยางการใช)งาน (2)

1 public class GetterRobot extends Robot 2 public abstract String getClassName()3 return ldquoGetterRobotrdquo4 5 6 public class GundamRobot 7 public abstract String getClassName()8 return ldquoGundamRobotrdquo9 10

ต13วอยางการใช)งาน (3)

1 2 Robot r3 4 int robotSerialNumber = getSerialNumber() 5 if (robotSerialNumber == 1) 6 r = new GetterRobot()7 else 8 r= new GundamRobot()9 Systemoutprintln(rgetClassName()+rpunch())10

ไทป4แบบมพารามเตอร (Generic Types)

bull จาวา 15 ข$นไปอนญาตให)เราเขยนไทป4ของสมาชกของคลาสได) โดยเขยนในวงเลบทสร)างจากเครองหมาย ldquogtrdquo และ ldquoltrdquo

bull LinkedListltDoublegt myList = new LinkedListltDoublegt()

bull ซ$งเมอเขยนแบบนไปแล)ว จะมแต ข)อมลประเภท Double เทาน13นทลสตจะยอมร13บ ด13งน13นในการใช)งานเมธอด get ทเขยนไว)แล)วในลงคลสต (ย13งไมต)องร )มากเพราะมเรองลงคลสตของจาวาตางหากอกท)

bull Double val = myListget(o)bull เรากไมต)องมาท1าการเปลยนรปแบบข)อมลทได)ให)เปน Double เพราะวา

ถกบ13งค13บไว)เรยบร)อยแล)ว

ประโยชนของการเขยนไทป4แบบมพารามเตอร

bull เราสามารถเหนได)ท13นทวาคอลเลคช13นของเราเกบอะไรอย คอมไพเลอรสามารถเชคชนดสมาชกทเราพยายามเอาใสคอลเลคช13นได)ท13นท

bull ถ)าไมมการก1าหนดไทป4แบบนกจะคอมไพลผานแตไปเกดข)อผดพลาดตอนร13น (exception)

Wrapper class ใน java15

bull จาวา 15 ท1าการเปลยนชนดระหวางข)อมลพนฐานก13บ wrapper class ได)เอง

bull เราสามารถเขยน myListadd(38) แทน myListadd(new Double(38)) ได)เลย ต13วจาวาจะท1าการ ldquoboxingrdquo ให)เปนออบเจกตเอง

bull เราสามารถเขยน double sum = sum +myListget(0) ได) จาวาจะเปลยนออบเจกตทเอาออกมาจากลสตให)เปนต13วเลขโดยอ13ตโนม13ต เรยกวาการ ldquounboxingrdquo

Collection Interface1 public Interface Collection extends IterableltEgt2 boolean add(E o) 3 boolean addAll(Collectionlt extends Egt c)4 void clear()5 boolean contains(Object o)6 boolean containsAll(Collectionltgt c)7 boolean equals(Object o)8 int hashCode()9 boolean isEmpty()10 IteratorltEgt iterator()11 boolean remove(Object o)12 boolean removeAll(Collectionltgt c)13 boolean retainAll(Collectionltgt c)14 int size()15 Object[]toArray()16 ltTgt T[]toArray(T[] a)17

เมธอดตางๆของ Collection Interface

bull boolean add(E o) ndash พยายามท1าให)ม o อยในคอลเลคช13นน รเทรน true ถ)าการเรยกเมธอดน

ท1าให)ภายในคอลเลคช13นเปลยนไป รเทรน false ถ)าคอลเลคช13นนมกอปป7ไมได) และ ม o อยแล)ว

bull boolean addAll(Collectionlt extends Egt c) ndash เตมสมาชกจากคอลเลคช13น c ท13งหมดลงในคอลเลคช13นของเรา แต

เมธอดนจะถอวาใช)ไมได)ถ)า c ถกเปลยนแปลงระหวางทเมธอดนท1างานอย น13นกคอ c จะเปนคอลเลคช13นทเราใช)เรยกเมธอดนเองไมได)

ndash เมธอดนรเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

ndash พารามเตอร lt extends Egt หมายถ$งอะไรกได)ทเปนส13บคลาสของ E โดย E คอพารามเตอรของคอลเลคช13นทเรยกใช)เมธอดน อยาลมวาคลาสใดๆกเปนส13บคลาสของต13วม13นเอง

bull void clear() ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull void clear()ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull boolean contains(Object o) ndash รเทรน true ถ)าคอลเลคช13นนม o อย หรอพดได)อก

อยางวา รเทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าคอลเลคช13นนม สมาชกจากคอลเลคช13น

c อยท13 งหมด

bull boolean equals(Object o) ndash เปรยบเทยบออบเจกต o ก13บคอลเลคช13นนวาเทาก13นหรอ

ไม โดยพนฐานแล)ว นคอเมธอดทเอามาจากคลาส Object แตถ)าจะเขยนเมธอดนเอง เพอเปลยนให)เปนการเปรยบเทยบคาทอยในคอลเลคช13นกได)

ndash โครงสร)างข)อมล List ก13บ Set ของจาวาน13นได)เขยนเมธอดนข$นเองโดยก1าหนดให) List ต)องเทาก13บ List และ Set ต)องเทาก13บ Set เทาน13น ฉะน13นถ)าเราเขยนเมธอดนให)คลาสของเราเองซ$งไมใช List หรอ Set แล)วละก เมธอดของเราจะรเทรน false เมอน1าไปใช)ก13บ List หรอ set

ndash นอกจากนย13งไมสามารถสร)างคลาสซ$ง implement List ก13บ Set ในเวลาเดยวก13นได)

bull int hashCode() ndash รเทรนแฮชโค)ดของคอลเลคช13นน ถ)าเราโอเวอรไรด

equals() แล)วเราต)องโอเวอรไรด hashcode() ด)วย เพราะ c1equals(c2) ต)องหมายถ$ง c1hashCode()==c2hashCode()

bull boolean isEmpty() ndash รเทรน true ถ)าคอลเลคช13นนไมมสมาชก

bull IteratorltE gt iterator() ndash รเทรนอเทอเรเตอรทจะอนญาตให)เราดสมาชกใน

คอลเลคช13นนได) การเรยงของสมาชกน13นไมได)มการก1าหนดไว)ในช13นน

bull boolean remove(Object o) ndash เอาสมาชก e ซ$ง (o==null e==null oequals(e)) ออก

จากคอลเลคช13น ถ)ามอยในคอลเลคช13น ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() ) ทง ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() )

เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull Object [] toArray() ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมด ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วยbull ltTgt T[] toArray(T[] a)

ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมดndash ร13นไทมไทป4ของอารเรยทร เทรนให)เปนชนดเดยวก13บอารเรย a ndash ถ)าคอลเลคช13นของเราใส a ได) กจะเอาใส a แล)วรเทรน a เลย (สมาชกในด)าน

หล13งของ a ทมทเหลอกจะถกเซตเปน null )ndash มฉะน13นต)องสร)างอารเรยใหมซ$งขนาดใหญพอทจะเกบคอลเลคช13นของเราได) ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วย

Iterator ของ Collection

bull public Interface IteratorltEgthellipbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกให)ดได)อก (น13นคอ รเทรน true เมอ next() จะรเทรนสมาชกน13นเอง

bull E next() ndash รเทรนสมาชกต13วตอไปตามล1าด13บทก1าหนดไว)

bull void remove() ndash เอาสมาชกต13วทพ$งถกรเทรนด)วย next() ออกไป ndash เรยกเมธอดนได)หน$งคร13งตอการเรยกใช) next() หน$งคร13ง ndash ถ)าต13วคอลลเคช13นถกเปลยนระหวางทก1าล13งลปด)วยวธอนท

ไมใชเมธอดน เราจะถอวาเมธอดนใช)ไมได)

การใช)งาน Iterator

bull เราลปแล)วเลอกพมพเฉพาะต13วเลขทมคามากกวาหน$งร)อย

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 currentNumber = itrnext() auto convert 6 if(currentNumbergt100)7 Systemoutprintln(currentNumber)8 9

การใช)งาน Iterator ทผด

bull อยาลมวาการลปแตละคร13งควรใช) next() แคคร13งเดยวเทาน13น มฉะน13นเราจะท1าเกนต1าแหนงทต)องการ

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 if(itrnext() gt100)6 Systemoutprintln(itrnext())7 8 เกน

for loop แบบพเศษ

bull bull IteratorltIntegergt itr = myCollectioniterator()bull for(Integer currentInt myCollection )bull if(currentIntintValue() gt100)bull Systemoutprintln(currentIntintValue())bull bull

ldquoส1าหร13บแตละจ1านวนเตมใน myCollectionrdquo

แตวา for loop แบบพเศษน13นไมสามารถใช)ได)ในกรณทต13วคอลเลคช13นต)องมการเปลยนแปลงระหวางการลป ด13งน13นการลปเอาสมาชกออกจากคอลเลคช13นกต)องใช)อเทอเรเตอรเทาน13น

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 2: Java Collection Framework

คออะไรbull จาวาคอลเลคช13นคอชดของอนเตอรเฟสและคลาส

ในแพคเกจ javautil

bull คอลเลคช13นคลาส คอ คลาสทออบเจกตของม13นประกอบข$นมาจากสมาชกยอย ซ$งสมาชกยอยน13นต)องเปนพอยตเตอรไปย13งออบเจกต ด13งน13นเราไมสามารถใช)ชดข)อมลพนฐานเปนสวนประกอบของคอลเลคช13นคลาสได) (แตอยาลมวาเราม wrapper class ทใช)แทนชดข)อมลพนฐานได))

การใช)งานbull น13น ผ)ใช)เพยงแตเรยกใช)เมธอดให)เหมาะสมเทาน13น

กพอ ไมจ1าเปนต)องร )ถ$งการท1างานภายในbull ถ)ามอารเรยภายใน กเปนหน)าทของผ)เขยนคอลเล

คช13นคลาสทจะเขยนโค)ดเตรยมไว)จ13ดการก13บการขยายอารเรยเอง

Abstract Class

bull แอบสแตรกคลาสคอคลาสทต)องมอยางน)อยหน$งเมธอดเปนแอบสแตรกเมธอด

bull แอบสแตรกเมธอดคอเมธอดทไมมโค)ดภายใน ทงวางไว)เพอให)ไปนยามในคลาสลกของม13น

bull เราไมสามารถสร)างออบเจกตข$นจากแอบสแตรกคลาสได) (แตสร)างจากลกของม13นทนยามโค)ดของแอบสแตรกเมธอดไว)ได))

ต13วอยางการใช)งาน1 public abstract class Robot

2 public String punch()

3 return ldquo Punchrdquo

4

5

6 public abstract String getClassName()

7

ต13วอยางการใช)งาน (2)

1 public class GetterRobot extends Robot 2 public abstract String getClassName()3 return ldquoGetterRobotrdquo4 5 6 public class GundamRobot 7 public abstract String getClassName()8 return ldquoGundamRobotrdquo9 10

ต13วอยางการใช)งาน (3)

1 2 Robot r3 4 int robotSerialNumber = getSerialNumber() 5 if (robotSerialNumber == 1) 6 r = new GetterRobot()7 else 8 r= new GundamRobot()9 Systemoutprintln(rgetClassName()+rpunch())10

ไทป4แบบมพารามเตอร (Generic Types)

bull จาวา 15 ข$นไปอนญาตให)เราเขยนไทป4ของสมาชกของคลาสได) โดยเขยนในวงเลบทสร)างจากเครองหมาย ldquogtrdquo และ ldquoltrdquo

bull LinkedListltDoublegt myList = new LinkedListltDoublegt()

bull ซ$งเมอเขยนแบบนไปแล)ว จะมแต ข)อมลประเภท Double เทาน13นทลสตจะยอมร13บ ด13งน13นในการใช)งานเมธอด get ทเขยนไว)แล)วในลงคลสต (ย13งไมต)องร )มากเพราะมเรองลงคลสตของจาวาตางหากอกท)

bull Double val = myListget(o)bull เรากไมต)องมาท1าการเปลยนรปแบบข)อมลทได)ให)เปน Double เพราะวา

ถกบ13งค13บไว)เรยบร)อยแล)ว

ประโยชนของการเขยนไทป4แบบมพารามเตอร

bull เราสามารถเหนได)ท13นทวาคอลเลคช13นของเราเกบอะไรอย คอมไพเลอรสามารถเชคชนดสมาชกทเราพยายามเอาใสคอลเลคช13นได)ท13นท

bull ถ)าไมมการก1าหนดไทป4แบบนกจะคอมไพลผานแตไปเกดข)อผดพลาดตอนร13น (exception)

Wrapper class ใน java15

bull จาวา 15 ท1าการเปลยนชนดระหวางข)อมลพนฐานก13บ wrapper class ได)เอง

bull เราสามารถเขยน myListadd(38) แทน myListadd(new Double(38)) ได)เลย ต13วจาวาจะท1าการ ldquoboxingrdquo ให)เปนออบเจกตเอง

bull เราสามารถเขยน double sum = sum +myListget(0) ได) จาวาจะเปลยนออบเจกตทเอาออกมาจากลสตให)เปนต13วเลขโดยอ13ตโนม13ต เรยกวาการ ldquounboxingrdquo

Collection Interface1 public Interface Collection extends IterableltEgt2 boolean add(E o) 3 boolean addAll(Collectionlt extends Egt c)4 void clear()5 boolean contains(Object o)6 boolean containsAll(Collectionltgt c)7 boolean equals(Object o)8 int hashCode()9 boolean isEmpty()10 IteratorltEgt iterator()11 boolean remove(Object o)12 boolean removeAll(Collectionltgt c)13 boolean retainAll(Collectionltgt c)14 int size()15 Object[]toArray()16 ltTgt T[]toArray(T[] a)17

เมธอดตางๆของ Collection Interface

bull boolean add(E o) ndash พยายามท1าให)ม o อยในคอลเลคช13นน รเทรน true ถ)าการเรยกเมธอดน

ท1าให)ภายในคอลเลคช13นเปลยนไป รเทรน false ถ)าคอลเลคช13นนมกอปป7ไมได) และ ม o อยแล)ว

bull boolean addAll(Collectionlt extends Egt c) ndash เตมสมาชกจากคอลเลคช13น c ท13งหมดลงในคอลเลคช13นของเรา แต

เมธอดนจะถอวาใช)ไมได)ถ)า c ถกเปลยนแปลงระหวางทเมธอดนท1างานอย น13นกคอ c จะเปนคอลเลคช13นทเราใช)เรยกเมธอดนเองไมได)

ndash เมธอดนรเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

ndash พารามเตอร lt extends Egt หมายถ$งอะไรกได)ทเปนส13บคลาสของ E โดย E คอพารามเตอรของคอลเลคช13นทเรยกใช)เมธอดน อยาลมวาคลาสใดๆกเปนส13บคลาสของต13วม13นเอง

bull void clear() ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull void clear()ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull boolean contains(Object o) ndash รเทรน true ถ)าคอลเลคช13นนม o อย หรอพดได)อก

อยางวา รเทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าคอลเลคช13นนม สมาชกจากคอลเลคช13น

c อยท13 งหมด

bull boolean equals(Object o) ndash เปรยบเทยบออบเจกต o ก13บคอลเลคช13นนวาเทาก13นหรอ

ไม โดยพนฐานแล)ว นคอเมธอดทเอามาจากคลาส Object แตถ)าจะเขยนเมธอดนเอง เพอเปลยนให)เปนการเปรยบเทยบคาทอยในคอลเลคช13นกได)

ndash โครงสร)างข)อมล List ก13บ Set ของจาวาน13นได)เขยนเมธอดนข$นเองโดยก1าหนดให) List ต)องเทาก13บ List และ Set ต)องเทาก13บ Set เทาน13น ฉะน13นถ)าเราเขยนเมธอดนให)คลาสของเราเองซ$งไมใช List หรอ Set แล)วละก เมธอดของเราจะรเทรน false เมอน1าไปใช)ก13บ List หรอ set

ndash นอกจากนย13งไมสามารถสร)างคลาสซ$ง implement List ก13บ Set ในเวลาเดยวก13นได)

bull int hashCode() ndash รเทรนแฮชโค)ดของคอลเลคช13นน ถ)าเราโอเวอรไรด

equals() แล)วเราต)องโอเวอรไรด hashcode() ด)วย เพราะ c1equals(c2) ต)องหมายถ$ง c1hashCode()==c2hashCode()

bull boolean isEmpty() ndash รเทรน true ถ)าคอลเลคช13นนไมมสมาชก

bull IteratorltE gt iterator() ndash รเทรนอเทอเรเตอรทจะอนญาตให)เราดสมาชกใน

คอลเลคช13นนได) การเรยงของสมาชกน13นไมได)มการก1าหนดไว)ในช13นน

bull boolean remove(Object o) ndash เอาสมาชก e ซ$ง (o==null e==null oequals(e)) ออก

จากคอลเลคช13น ถ)ามอยในคอลเลคช13น ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() ) ทง ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() )

เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull Object [] toArray() ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมด ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วยbull ltTgt T[] toArray(T[] a)

ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมดndash ร13นไทมไทป4ของอารเรยทร เทรนให)เปนชนดเดยวก13บอารเรย a ndash ถ)าคอลเลคช13นของเราใส a ได) กจะเอาใส a แล)วรเทรน a เลย (สมาชกในด)าน

หล13งของ a ทมทเหลอกจะถกเซตเปน null )ndash มฉะน13นต)องสร)างอารเรยใหมซ$งขนาดใหญพอทจะเกบคอลเลคช13นของเราได) ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วย

Iterator ของ Collection

bull public Interface IteratorltEgthellipbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกให)ดได)อก (น13นคอ รเทรน true เมอ next() จะรเทรนสมาชกน13นเอง

bull E next() ndash รเทรนสมาชกต13วตอไปตามล1าด13บทก1าหนดไว)

bull void remove() ndash เอาสมาชกต13วทพ$งถกรเทรนด)วย next() ออกไป ndash เรยกเมธอดนได)หน$งคร13งตอการเรยกใช) next() หน$งคร13ง ndash ถ)าต13วคอลลเคช13นถกเปลยนระหวางทก1าล13งลปด)วยวธอนท

ไมใชเมธอดน เราจะถอวาเมธอดนใช)ไมได)

การใช)งาน Iterator

bull เราลปแล)วเลอกพมพเฉพาะต13วเลขทมคามากกวาหน$งร)อย

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 currentNumber = itrnext() auto convert 6 if(currentNumbergt100)7 Systemoutprintln(currentNumber)8 9

การใช)งาน Iterator ทผด

bull อยาลมวาการลปแตละคร13งควรใช) next() แคคร13งเดยวเทาน13น มฉะน13นเราจะท1าเกนต1าแหนงทต)องการ

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 if(itrnext() gt100)6 Systemoutprintln(itrnext())7 8 เกน

for loop แบบพเศษ

bull bull IteratorltIntegergt itr = myCollectioniterator()bull for(Integer currentInt myCollection )bull if(currentIntintValue() gt100)bull Systemoutprintln(currentIntintValue())bull bull

ldquoส1าหร13บแตละจ1านวนเตมใน myCollectionrdquo

แตวา for loop แบบพเศษน13นไมสามารถใช)ได)ในกรณทต13วคอลเลคช13นต)องมการเปลยนแปลงระหวางการลป ด13งน13นการลปเอาสมาชกออกจากคอลเลคช13นกต)องใช)อเทอเรเตอรเทาน13น

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 3: Java Collection Framework

การใช)งานbull น13น ผ)ใช)เพยงแตเรยกใช)เมธอดให)เหมาะสมเทาน13น

กพอ ไมจ1าเปนต)องร )ถ$งการท1างานภายในbull ถ)ามอารเรยภายใน กเปนหน)าทของผ)เขยนคอลเล

คช13นคลาสทจะเขยนโค)ดเตรยมไว)จ13ดการก13บการขยายอารเรยเอง

Abstract Class

bull แอบสแตรกคลาสคอคลาสทต)องมอยางน)อยหน$งเมธอดเปนแอบสแตรกเมธอด

bull แอบสแตรกเมธอดคอเมธอดทไมมโค)ดภายใน ทงวางไว)เพอให)ไปนยามในคลาสลกของม13น

bull เราไมสามารถสร)างออบเจกตข$นจากแอบสแตรกคลาสได) (แตสร)างจากลกของม13นทนยามโค)ดของแอบสแตรกเมธอดไว)ได))

ต13วอยางการใช)งาน1 public abstract class Robot

2 public String punch()

3 return ldquo Punchrdquo

4

5

6 public abstract String getClassName()

7

ต13วอยางการใช)งาน (2)

1 public class GetterRobot extends Robot 2 public abstract String getClassName()3 return ldquoGetterRobotrdquo4 5 6 public class GundamRobot 7 public abstract String getClassName()8 return ldquoGundamRobotrdquo9 10

ต13วอยางการใช)งาน (3)

1 2 Robot r3 4 int robotSerialNumber = getSerialNumber() 5 if (robotSerialNumber == 1) 6 r = new GetterRobot()7 else 8 r= new GundamRobot()9 Systemoutprintln(rgetClassName()+rpunch())10

ไทป4แบบมพารามเตอร (Generic Types)

bull จาวา 15 ข$นไปอนญาตให)เราเขยนไทป4ของสมาชกของคลาสได) โดยเขยนในวงเลบทสร)างจากเครองหมาย ldquogtrdquo และ ldquoltrdquo

bull LinkedListltDoublegt myList = new LinkedListltDoublegt()

bull ซ$งเมอเขยนแบบนไปแล)ว จะมแต ข)อมลประเภท Double เทาน13นทลสตจะยอมร13บ ด13งน13นในการใช)งานเมธอด get ทเขยนไว)แล)วในลงคลสต (ย13งไมต)องร )มากเพราะมเรองลงคลสตของจาวาตางหากอกท)

bull Double val = myListget(o)bull เรากไมต)องมาท1าการเปลยนรปแบบข)อมลทได)ให)เปน Double เพราะวา

ถกบ13งค13บไว)เรยบร)อยแล)ว

ประโยชนของการเขยนไทป4แบบมพารามเตอร

bull เราสามารถเหนได)ท13นทวาคอลเลคช13นของเราเกบอะไรอย คอมไพเลอรสามารถเชคชนดสมาชกทเราพยายามเอาใสคอลเลคช13นได)ท13นท

bull ถ)าไมมการก1าหนดไทป4แบบนกจะคอมไพลผานแตไปเกดข)อผดพลาดตอนร13น (exception)

Wrapper class ใน java15

bull จาวา 15 ท1าการเปลยนชนดระหวางข)อมลพนฐานก13บ wrapper class ได)เอง

bull เราสามารถเขยน myListadd(38) แทน myListadd(new Double(38)) ได)เลย ต13วจาวาจะท1าการ ldquoboxingrdquo ให)เปนออบเจกตเอง

bull เราสามารถเขยน double sum = sum +myListget(0) ได) จาวาจะเปลยนออบเจกตทเอาออกมาจากลสตให)เปนต13วเลขโดยอ13ตโนม13ต เรยกวาการ ldquounboxingrdquo

Collection Interface1 public Interface Collection extends IterableltEgt2 boolean add(E o) 3 boolean addAll(Collectionlt extends Egt c)4 void clear()5 boolean contains(Object o)6 boolean containsAll(Collectionltgt c)7 boolean equals(Object o)8 int hashCode()9 boolean isEmpty()10 IteratorltEgt iterator()11 boolean remove(Object o)12 boolean removeAll(Collectionltgt c)13 boolean retainAll(Collectionltgt c)14 int size()15 Object[]toArray()16 ltTgt T[]toArray(T[] a)17

เมธอดตางๆของ Collection Interface

bull boolean add(E o) ndash พยายามท1าให)ม o อยในคอลเลคช13นน รเทรน true ถ)าการเรยกเมธอดน

ท1าให)ภายในคอลเลคช13นเปลยนไป รเทรน false ถ)าคอลเลคช13นนมกอปป7ไมได) และ ม o อยแล)ว

bull boolean addAll(Collectionlt extends Egt c) ndash เตมสมาชกจากคอลเลคช13น c ท13งหมดลงในคอลเลคช13นของเรา แต

เมธอดนจะถอวาใช)ไมได)ถ)า c ถกเปลยนแปลงระหวางทเมธอดนท1างานอย น13นกคอ c จะเปนคอลเลคช13นทเราใช)เรยกเมธอดนเองไมได)

ndash เมธอดนรเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

ndash พารามเตอร lt extends Egt หมายถ$งอะไรกได)ทเปนส13บคลาสของ E โดย E คอพารามเตอรของคอลเลคช13นทเรยกใช)เมธอดน อยาลมวาคลาสใดๆกเปนส13บคลาสของต13วม13นเอง

bull void clear() ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull void clear()ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull boolean contains(Object o) ndash รเทรน true ถ)าคอลเลคช13นนม o อย หรอพดได)อก

อยางวา รเทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าคอลเลคช13นนม สมาชกจากคอลเลคช13น

c อยท13 งหมด

bull boolean equals(Object o) ndash เปรยบเทยบออบเจกต o ก13บคอลเลคช13นนวาเทาก13นหรอ

ไม โดยพนฐานแล)ว นคอเมธอดทเอามาจากคลาส Object แตถ)าจะเขยนเมธอดนเอง เพอเปลยนให)เปนการเปรยบเทยบคาทอยในคอลเลคช13นกได)

ndash โครงสร)างข)อมล List ก13บ Set ของจาวาน13นได)เขยนเมธอดนข$นเองโดยก1าหนดให) List ต)องเทาก13บ List และ Set ต)องเทาก13บ Set เทาน13น ฉะน13นถ)าเราเขยนเมธอดนให)คลาสของเราเองซ$งไมใช List หรอ Set แล)วละก เมธอดของเราจะรเทรน false เมอน1าไปใช)ก13บ List หรอ set

ndash นอกจากนย13งไมสามารถสร)างคลาสซ$ง implement List ก13บ Set ในเวลาเดยวก13นได)

bull int hashCode() ndash รเทรนแฮชโค)ดของคอลเลคช13นน ถ)าเราโอเวอรไรด

equals() แล)วเราต)องโอเวอรไรด hashcode() ด)วย เพราะ c1equals(c2) ต)องหมายถ$ง c1hashCode()==c2hashCode()

bull boolean isEmpty() ndash รเทรน true ถ)าคอลเลคช13นนไมมสมาชก

bull IteratorltE gt iterator() ndash รเทรนอเทอเรเตอรทจะอนญาตให)เราดสมาชกใน

คอลเลคช13นนได) การเรยงของสมาชกน13นไมได)มการก1าหนดไว)ในช13นน

bull boolean remove(Object o) ndash เอาสมาชก e ซ$ง (o==null e==null oequals(e)) ออก

จากคอลเลคช13น ถ)ามอยในคอลเลคช13น ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() ) ทง ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() )

เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull Object [] toArray() ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมด ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วยbull ltTgt T[] toArray(T[] a)

ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมดndash ร13นไทมไทป4ของอารเรยทร เทรนให)เปนชนดเดยวก13บอารเรย a ndash ถ)าคอลเลคช13นของเราใส a ได) กจะเอาใส a แล)วรเทรน a เลย (สมาชกในด)าน

หล13งของ a ทมทเหลอกจะถกเซตเปน null )ndash มฉะน13นต)องสร)างอารเรยใหมซ$งขนาดใหญพอทจะเกบคอลเลคช13นของเราได) ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วย

Iterator ของ Collection

bull public Interface IteratorltEgthellipbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกให)ดได)อก (น13นคอ รเทรน true เมอ next() จะรเทรนสมาชกน13นเอง

bull E next() ndash รเทรนสมาชกต13วตอไปตามล1าด13บทก1าหนดไว)

bull void remove() ndash เอาสมาชกต13วทพ$งถกรเทรนด)วย next() ออกไป ndash เรยกเมธอดนได)หน$งคร13งตอการเรยกใช) next() หน$งคร13ง ndash ถ)าต13วคอลลเคช13นถกเปลยนระหวางทก1าล13งลปด)วยวธอนท

ไมใชเมธอดน เราจะถอวาเมธอดนใช)ไมได)

การใช)งาน Iterator

bull เราลปแล)วเลอกพมพเฉพาะต13วเลขทมคามากกวาหน$งร)อย

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 currentNumber = itrnext() auto convert 6 if(currentNumbergt100)7 Systemoutprintln(currentNumber)8 9

การใช)งาน Iterator ทผด

bull อยาลมวาการลปแตละคร13งควรใช) next() แคคร13งเดยวเทาน13น มฉะน13นเราจะท1าเกนต1าแหนงทต)องการ

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 if(itrnext() gt100)6 Systemoutprintln(itrnext())7 8 เกน

for loop แบบพเศษ

bull bull IteratorltIntegergt itr = myCollectioniterator()bull for(Integer currentInt myCollection )bull if(currentIntintValue() gt100)bull Systemoutprintln(currentIntintValue())bull bull

ldquoส1าหร13บแตละจ1านวนเตมใน myCollectionrdquo

แตวา for loop แบบพเศษน13นไมสามารถใช)ได)ในกรณทต13วคอลเลคช13นต)องมการเปลยนแปลงระหวางการลป ด13งน13นการลปเอาสมาชกออกจากคอลเลคช13นกต)องใช)อเทอเรเตอรเทาน13น

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 4: Java Collection Framework

Abstract Class

bull แอบสแตรกคลาสคอคลาสทต)องมอยางน)อยหน$งเมธอดเปนแอบสแตรกเมธอด

bull แอบสแตรกเมธอดคอเมธอดทไมมโค)ดภายใน ทงวางไว)เพอให)ไปนยามในคลาสลกของม13น

bull เราไมสามารถสร)างออบเจกตข$นจากแอบสแตรกคลาสได) (แตสร)างจากลกของม13นทนยามโค)ดของแอบสแตรกเมธอดไว)ได))

ต13วอยางการใช)งาน1 public abstract class Robot

2 public String punch()

3 return ldquo Punchrdquo

4

5

6 public abstract String getClassName()

7

ต13วอยางการใช)งาน (2)

1 public class GetterRobot extends Robot 2 public abstract String getClassName()3 return ldquoGetterRobotrdquo4 5 6 public class GundamRobot 7 public abstract String getClassName()8 return ldquoGundamRobotrdquo9 10

ต13วอยางการใช)งาน (3)

1 2 Robot r3 4 int robotSerialNumber = getSerialNumber() 5 if (robotSerialNumber == 1) 6 r = new GetterRobot()7 else 8 r= new GundamRobot()9 Systemoutprintln(rgetClassName()+rpunch())10

ไทป4แบบมพารามเตอร (Generic Types)

bull จาวา 15 ข$นไปอนญาตให)เราเขยนไทป4ของสมาชกของคลาสได) โดยเขยนในวงเลบทสร)างจากเครองหมาย ldquogtrdquo และ ldquoltrdquo

bull LinkedListltDoublegt myList = new LinkedListltDoublegt()

bull ซ$งเมอเขยนแบบนไปแล)ว จะมแต ข)อมลประเภท Double เทาน13นทลสตจะยอมร13บ ด13งน13นในการใช)งานเมธอด get ทเขยนไว)แล)วในลงคลสต (ย13งไมต)องร )มากเพราะมเรองลงคลสตของจาวาตางหากอกท)

bull Double val = myListget(o)bull เรากไมต)องมาท1าการเปลยนรปแบบข)อมลทได)ให)เปน Double เพราะวา

ถกบ13งค13บไว)เรยบร)อยแล)ว

ประโยชนของการเขยนไทป4แบบมพารามเตอร

bull เราสามารถเหนได)ท13นทวาคอลเลคช13นของเราเกบอะไรอย คอมไพเลอรสามารถเชคชนดสมาชกทเราพยายามเอาใสคอลเลคช13นได)ท13นท

bull ถ)าไมมการก1าหนดไทป4แบบนกจะคอมไพลผานแตไปเกดข)อผดพลาดตอนร13น (exception)

Wrapper class ใน java15

bull จาวา 15 ท1าการเปลยนชนดระหวางข)อมลพนฐานก13บ wrapper class ได)เอง

bull เราสามารถเขยน myListadd(38) แทน myListadd(new Double(38)) ได)เลย ต13วจาวาจะท1าการ ldquoboxingrdquo ให)เปนออบเจกตเอง

bull เราสามารถเขยน double sum = sum +myListget(0) ได) จาวาจะเปลยนออบเจกตทเอาออกมาจากลสตให)เปนต13วเลขโดยอ13ตโนม13ต เรยกวาการ ldquounboxingrdquo

Collection Interface1 public Interface Collection extends IterableltEgt2 boolean add(E o) 3 boolean addAll(Collectionlt extends Egt c)4 void clear()5 boolean contains(Object o)6 boolean containsAll(Collectionltgt c)7 boolean equals(Object o)8 int hashCode()9 boolean isEmpty()10 IteratorltEgt iterator()11 boolean remove(Object o)12 boolean removeAll(Collectionltgt c)13 boolean retainAll(Collectionltgt c)14 int size()15 Object[]toArray()16 ltTgt T[]toArray(T[] a)17

เมธอดตางๆของ Collection Interface

bull boolean add(E o) ndash พยายามท1าให)ม o อยในคอลเลคช13นน รเทรน true ถ)าการเรยกเมธอดน

ท1าให)ภายในคอลเลคช13นเปลยนไป รเทรน false ถ)าคอลเลคช13นนมกอปป7ไมได) และ ม o อยแล)ว

bull boolean addAll(Collectionlt extends Egt c) ndash เตมสมาชกจากคอลเลคช13น c ท13งหมดลงในคอลเลคช13นของเรา แต

เมธอดนจะถอวาใช)ไมได)ถ)า c ถกเปลยนแปลงระหวางทเมธอดนท1างานอย น13นกคอ c จะเปนคอลเลคช13นทเราใช)เรยกเมธอดนเองไมได)

ndash เมธอดนรเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

ndash พารามเตอร lt extends Egt หมายถ$งอะไรกได)ทเปนส13บคลาสของ E โดย E คอพารามเตอรของคอลเลคช13นทเรยกใช)เมธอดน อยาลมวาคลาสใดๆกเปนส13บคลาสของต13วม13นเอง

bull void clear() ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull void clear()ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull boolean contains(Object o) ndash รเทรน true ถ)าคอลเลคช13นนม o อย หรอพดได)อก

อยางวา รเทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าคอลเลคช13นนม สมาชกจากคอลเลคช13น

c อยท13 งหมด

bull boolean equals(Object o) ndash เปรยบเทยบออบเจกต o ก13บคอลเลคช13นนวาเทาก13นหรอ

ไม โดยพนฐานแล)ว นคอเมธอดทเอามาจากคลาส Object แตถ)าจะเขยนเมธอดนเอง เพอเปลยนให)เปนการเปรยบเทยบคาทอยในคอลเลคช13นกได)

ndash โครงสร)างข)อมล List ก13บ Set ของจาวาน13นได)เขยนเมธอดนข$นเองโดยก1าหนดให) List ต)องเทาก13บ List และ Set ต)องเทาก13บ Set เทาน13น ฉะน13นถ)าเราเขยนเมธอดนให)คลาสของเราเองซ$งไมใช List หรอ Set แล)วละก เมธอดของเราจะรเทรน false เมอน1าไปใช)ก13บ List หรอ set

ndash นอกจากนย13งไมสามารถสร)างคลาสซ$ง implement List ก13บ Set ในเวลาเดยวก13นได)

bull int hashCode() ndash รเทรนแฮชโค)ดของคอลเลคช13นน ถ)าเราโอเวอรไรด

equals() แล)วเราต)องโอเวอรไรด hashcode() ด)วย เพราะ c1equals(c2) ต)องหมายถ$ง c1hashCode()==c2hashCode()

bull boolean isEmpty() ndash รเทรน true ถ)าคอลเลคช13นนไมมสมาชก

bull IteratorltE gt iterator() ndash รเทรนอเทอเรเตอรทจะอนญาตให)เราดสมาชกใน

คอลเลคช13นนได) การเรยงของสมาชกน13นไมได)มการก1าหนดไว)ในช13นน

bull boolean remove(Object o) ndash เอาสมาชก e ซ$ง (o==null e==null oequals(e)) ออก

จากคอลเลคช13น ถ)ามอยในคอลเลคช13น ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() ) ทง ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() )

เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull Object [] toArray() ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมด ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วยbull ltTgt T[] toArray(T[] a)

ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมดndash ร13นไทมไทป4ของอารเรยทร เทรนให)เปนชนดเดยวก13บอารเรย a ndash ถ)าคอลเลคช13นของเราใส a ได) กจะเอาใส a แล)วรเทรน a เลย (สมาชกในด)าน

หล13งของ a ทมทเหลอกจะถกเซตเปน null )ndash มฉะน13นต)องสร)างอารเรยใหมซ$งขนาดใหญพอทจะเกบคอลเลคช13นของเราได) ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วย

Iterator ของ Collection

bull public Interface IteratorltEgthellipbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกให)ดได)อก (น13นคอ รเทรน true เมอ next() จะรเทรนสมาชกน13นเอง

bull E next() ndash รเทรนสมาชกต13วตอไปตามล1าด13บทก1าหนดไว)

bull void remove() ndash เอาสมาชกต13วทพ$งถกรเทรนด)วย next() ออกไป ndash เรยกเมธอดนได)หน$งคร13งตอการเรยกใช) next() หน$งคร13ง ndash ถ)าต13วคอลลเคช13นถกเปลยนระหวางทก1าล13งลปด)วยวธอนท

ไมใชเมธอดน เราจะถอวาเมธอดนใช)ไมได)

การใช)งาน Iterator

bull เราลปแล)วเลอกพมพเฉพาะต13วเลขทมคามากกวาหน$งร)อย

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 currentNumber = itrnext() auto convert 6 if(currentNumbergt100)7 Systemoutprintln(currentNumber)8 9

การใช)งาน Iterator ทผด

bull อยาลมวาการลปแตละคร13งควรใช) next() แคคร13งเดยวเทาน13น มฉะน13นเราจะท1าเกนต1าแหนงทต)องการ

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 if(itrnext() gt100)6 Systemoutprintln(itrnext())7 8 เกน

for loop แบบพเศษ

bull bull IteratorltIntegergt itr = myCollectioniterator()bull for(Integer currentInt myCollection )bull if(currentIntintValue() gt100)bull Systemoutprintln(currentIntintValue())bull bull

ldquoส1าหร13บแตละจ1านวนเตมใน myCollectionrdquo

แตวา for loop แบบพเศษน13นไมสามารถใช)ได)ในกรณทต13วคอลเลคช13นต)องมการเปลยนแปลงระหวางการลป ด13งน13นการลปเอาสมาชกออกจากคอลเลคช13นกต)องใช)อเทอเรเตอรเทาน13น

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 5: Java Collection Framework

ต13วอยางการใช)งาน1 public abstract class Robot

2 public String punch()

3 return ldquo Punchrdquo

4

5

6 public abstract String getClassName()

7

ต13วอยางการใช)งาน (2)

1 public class GetterRobot extends Robot 2 public abstract String getClassName()3 return ldquoGetterRobotrdquo4 5 6 public class GundamRobot 7 public abstract String getClassName()8 return ldquoGundamRobotrdquo9 10

ต13วอยางการใช)งาน (3)

1 2 Robot r3 4 int robotSerialNumber = getSerialNumber() 5 if (robotSerialNumber == 1) 6 r = new GetterRobot()7 else 8 r= new GundamRobot()9 Systemoutprintln(rgetClassName()+rpunch())10

ไทป4แบบมพารามเตอร (Generic Types)

bull จาวา 15 ข$นไปอนญาตให)เราเขยนไทป4ของสมาชกของคลาสได) โดยเขยนในวงเลบทสร)างจากเครองหมาย ldquogtrdquo และ ldquoltrdquo

bull LinkedListltDoublegt myList = new LinkedListltDoublegt()

bull ซ$งเมอเขยนแบบนไปแล)ว จะมแต ข)อมลประเภท Double เทาน13นทลสตจะยอมร13บ ด13งน13นในการใช)งานเมธอด get ทเขยนไว)แล)วในลงคลสต (ย13งไมต)องร )มากเพราะมเรองลงคลสตของจาวาตางหากอกท)

bull Double val = myListget(o)bull เรากไมต)องมาท1าการเปลยนรปแบบข)อมลทได)ให)เปน Double เพราะวา

ถกบ13งค13บไว)เรยบร)อยแล)ว

ประโยชนของการเขยนไทป4แบบมพารามเตอร

bull เราสามารถเหนได)ท13นทวาคอลเลคช13นของเราเกบอะไรอย คอมไพเลอรสามารถเชคชนดสมาชกทเราพยายามเอาใสคอลเลคช13นได)ท13นท

bull ถ)าไมมการก1าหนดไทป4แบบนกจะคอมไพลผานแตไปเกดข)อผดพลาดตอนร13น (exception)

Wrapper class ใน java15

bull จาวา 15 ท1าการเปลยนชนดระหวางข)อมลพนฐานก13บ wrapper class ได)เอง

bull เราสามารถเขยน myListadd(38) แทน myListadd(new Double(38)) ได)เลย ต13วจาวาจะท1าการ ldquoboxingrdquo ให)เปนออบเจกตเอง

bull เราสามารถเขยน double sum = sum +myListget(0) ได) จาวาจะเปลยนออบเจกตทเอาออกมาจากลสตให)เปนต13วเลขโดยอ13ตโนม13ต เรยกวาการ ldquounboxingrdquo

Collection Interface1 public Interface Collection extends IterableltEgt2 boolean add(E o) 3 boolean addAll(Collectionlt extends Egt c)4 void clear()5 boolean contains(Object o)6 boolean containsAll(Collectionltgt c)7 boolean equals(Object o)8 int hashCode()9 boolean isEmpty()10 IteratorltEgt iterator()11 boolean remove(Object o)12 boolean removeAll(Collectionltgt c)13 boolean retainAll(Collectionltgt c)14 int size()15 Object[]toArray()16 ltTgt T[]toArray(T[] a)17

เมธอดตางๆของ Collection Interface

bull boolean add(E o) ndash พยายามท1าให)ม o อยในคอลเลคช13นน รเทรน true ถ)าการเรยกเมธอดน

ท1าให)ภายในคอลเลคช13นเปลยนไป รเทรน false ถ)าคอลเลคช13นนมกอปป7ไมได) และ ม o อยแล)ว

bull boolean addAll(Collectionlt extends Egt c) ndash เตมสมาชกจากคอลเลคช13น c ท13งหมดลงในคอลเลคช13นของเรา แต

เมธอดนจะถอวาใช)ไมได)ถ)า c ถกเปลยนแปลงระหวางทเมธอดนท1างานอย น13นกคอ c จะเปนคอลเลคช13นทเราใช)เรยกเมธอดนเองไมได)

ndash เมธอดนรเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

ndash พารามเตอร lt extends Egt หมายถ$งอะไรกได)ทเปนส13บคลาสของ E โดย E คอพารามเตอรของคอลเลคช13นทเรยกใช)เมธอดน อยาลมวาคลาสใดๆกเปนส13บคลาสของต13วม13นเอง

bull void clear() ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull void clear()ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull boolean contains(Object o) ndash รเทรน true ถ)าคอลเลคช13นนม o อย หรอพดได)อก

อยางวา รเทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าคอลเลคช13นนม สมาชกจากคอลเลคช13น

c อยท13 งหมด

bull boolean equals(Object o) ndash เปรยบเทยบออบเจกต o ก13บคอลเลคช13นนวาเทาก13นหรอ

ไม โดยพนฐานแล)ว นคอเมธอดทเอามาจากคลาส Object แตถ)าจะเขยนเมธอดนเอง เพอเปลยนให)เปนการเปรยบเทยบคาทอยในคอลเลคช13นกได)

ndash โครงสร)างข)อมล List ก13บ Set ของจาวาน13นได)เขยนเมธอดนข$นเองโดยก1าหนดให) List ต)องเทาก13บ List และ Set ต)องเทาก13บ Set เทาน13น ฉะน13นถ)าเราเขยนเมธอดนให)คลาสของเราเองซ$งไมใช List หรอ Set แล)วละก เมธอดของเราจะรเทรน false เมอน1าไปใช)ก13บ List หรอ set

ndash นอกจากนย13งไมสามารถสร)างคลาสซ$ง implement List ก13บ Set ในเวลาเดยวก13นได)

bull int hashCode() ndash รเทรนแฮชโค)ดของคอลเลคช13นน ถ)าเราโอเวอรไรด

equals() แล)วเราต)องโอเวอรไรด hashcode() ด)วย เพราะ c1equals(c2) ต)องหมายถ$ง c1hashCode()==c2hashCode()

bull boolean isEmpty() ndash รเทรน true ถ)าคอลเลคช13นนไมมสมาชก

bull IteratorltE gt iterator() ndash รเทรนอเทอเรเตอรทจะอนญาตให)เราดสมาชกใน

คอลเลคช13นนได) การเรยงของสมาชกน13นไมได)มการก1าหนดไว)ในช13นน

bull boolean remove(Object o) ndash เอาสมาชก e ซ$ง (o==null e==null oequals(e)) ออก

จากคอลเลคช13น ถ)ามอยในคอลเลคช13น ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() ) ทง ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() )

เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull Object [] toArray() ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมด ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วยbull ltTgt T[] toArray(T[] a)

ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมดndash ร13นไทมไทป4ของอารเรยทร เทรนให)เปนชนดเดยวก13บอารเรย a ndash ถ)าคอลเลคช13นของเราใส a ได) กจะเอาใส a แล)วรเทรน a เลย (สมาชกในด)าน

หล13งของ a ทมทเหลอกจะถกเซตเปน null )ndash มฉะน13นต)องสร)างอารเรยใหมซ$งขนาดใหญพอทจะเกบคอลเลคช13นของเราได) ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วย

Iterator ของ Collection

bull public Interface IteratorltEgthellipbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกให)ดได)อก (น13นคอ รเทรน true เมอ next() จะรเทรนสมาชกน13นเอง

bull E next() ndash รเทรนสมาชกต13วตอไปตามล1าด13บทก1าหนดไว)

bull void remove() ndash เอาสมาชกต13วทพ$งถกรเทรนด)วย next() ออกไป ndash เรยกเมธอดนได)หน$งคร13งตอการเรยกใช) next() หน$งคร13ง ndash ถ)าต13วคอลลเคช13นถกเปลยนระหวางทก1าล13งลปด)วยวธอนท

ไมใชเมธอดน เราจะถอวาเมธอดนใช)ไมได)

การใช)งาน Iterator

bull เราลปแล)วเลอกพมพเฉพาะต13วเลขทมคามากกวาหน$งร)อย

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 currentNumber = itrnext() auto convert 6 if(currentNumbergt100)7 Systemoutprintln(currentNumber)8 9

การใช)งาน Iterator ทผด

bull อยาลมวาการลปแตละคร13งควรใช) next() แคคร13งเดยวเทาน13น มฉะน13นเราจะท1าเกนต1าแหนงทต)องการ

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 if(itrnext() gt100)6 Systemoutprintln(itrnext())7 8 เกน

for loop แบบพเศษ

bull bull IteratorltIntegergt itr = myCollectioniterator()bull for(Integer currentInt myCollection )bull if(currentIntintValue() gt100)bull Systemoutprintln(currentIntintValue())bull bull

ldquoส1าหร13บแตละจ1านวนเตมใน myCollectionrdquo

แตวา for loop แบบพเศษน13นไมสามารถใช)ได)ในกรณทต13วคอลเลคช13นต)องมการเปลยนแปลงระหวางการลป ด13งน13นการลปเอาสมาชกออกจากคอลเลคช13นกต)องใช)อเทอเรเตอรเทาน13น

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 6: Java Collection Framework

ต13วอยางการใช)งาน (2)

1 public class GetterRobot extends Robot 2 public abstract String getClassName()3 return ldquoGetterRobotrdquo4 5 6 public class GundamRobot 7 public abstract String getClassName()8 return ldquoGundamRobotrdquo9 10

ต13วอยางการใช)งาน (3)

1 2 Robot r3 4 int robotSerialNumber = getSerialNumber() 5 if (robotSerialNumber == 1) 6 r = new GetterRobot()7 else 8 r= new GundamRobot()9 Systemoutprintln(rgetClassName()+rpunch())10

ไทป4แบบมพารามเตอร (Generic Types)

bull จาวา 15 ข$นไปอนญาตให)เราเขยนไทป4ของสมาชกของคลาสได) โดยเขยนในวงเลบทสร)างจากเครองหมาย ldquogtrdquo และ ldquoltrdquo

bull LinkedListltDoublegt myList = new LinkedListltDoublegt()

bull ซ$งเมอเขยนแบบนไปแล)ว จะมแต ข)อมลประเภท Double เทาน13นทลสตจะยอมร13บ ด13งน13นในการใช)งานเมธอด get ทเขยนไว)แล)วในลงคลสต (ย13งไมต)องร )มากเพราะมเรองลงคลสตของจาวาตางหากอกท)

bull Double val = myListget(o)bull เรากไมต)องมาท1าการเปลยนรปแบบข)อมลทได)ให)เปน Double เพราะวา

ถกบ13งค13บไว)เรยบร)อยแล)ว

ประโยชนของการเขยนไทป4แบบมพารามเตอร

bull เราสามารถเหนได)ท13นทวาคอลเลคช13นของเราเกบอะไรอย คอมไพเลอรสามารถเชคชนดสมาชกทเราพยายามเอาใสคอลเลคช13นได)ท13นท

bull ถ)าไมมการก1าหนดไทป4แบบนกจะคอมไพลผานแตไปเกดข)อผดพลาดตอนร13น (exception)

Wrapper class ใน java15

bull จาวา 15 ท1าการเปลยนชนดระหวางข)อมลพนฐานก13บ wrapper class ได)เอง

bull เราสามารถเขยน myListadd(38) แทน myListadd(new Double(38)) ได)เลย ต13วจาวาจะท1าการ ldquoboxingrdquo ให)เปนออบเจกตเอง

bull เราสามารถเขยน double sum = sum +myListget(0) ได) จาวาจะเปลยนออบเจกตทเอาออกมาจากลสตให)เปนต13วเลขโดยอ13ตโนม13ต เรยกวาการ ldquounboxingrdquo

Collection Interface1 public Interface Collection extends IterableltEgt2 boolean add(E o) 3 boolean addAll(Collectionlt extends Egt c)4 void clear()5 boolean contains(Object o)6 boolean containsAll(Collectionltgt c)7 boolean equals(Object o)8 int hashCode()9 boolean isEmpty()10 IteratorltEgt iterator()11 boolean remove(Object o)12 boolean removeAll(Collectionltgt c)13 boolean retainAll(Collectionltgt c)14 int size()15 Object[]toArray()16 ltTgt T[]toArray(T[] a)17

เมธอดตางๆของ Collection Interface

bull boolean add(E o) ndash พยายามท1าให)ม o อยในคอลเลคช13นน รเทรน true ถ)าการเรยกเมธอดน

ท1าให)ภายในคอลเลคช13นเปลยนไป รเทรน false ถ)าคอลเลคช13นนมกอปป7ไมได) และ ม o อยแล)ว

bull boolean addAll(Collectionlt extends Egt c) ndash เตมสมาชกจากคอลเลคช13น c ท13งหมดลงในคอลเลคช13นของเรา แต

เมธอดนจะถอวาใช)ไมได)ถ)า c ถกเปลยนแปลงระหวางทเมธอดนท1างานอย น13นกคอ c จะเปนคอลเลคช13นทเราใช)เรยกเมธอดนเองไมได)

ndash เมธอดนรเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

ndash พารามเตอร lt extends Egt หมายถ$งอะไรกได)ทเปนส13บคลาสของ E โดย E คอพารามเตอรของคอลเลคช13นทเรยกใช)เมธอดน อยาลมวาคลาสใดๆกเปนส13บคลาสของต13วม13นเอง

bull void clear() ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull void clear()ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull boolean contains(Object o) ndash รเทรน true ถ)าคอลเลคช13นนม o อย หรอพดได)อก

อยางวา รเทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าคอลเลคช13นนม สมาชกจากคอลเลคช13น

c อยท13 งหมด

bull boolean equals(Object o) ndash เปรยบเทยบออบเจกต o ก13บคอลเลคช13นนวาเทาก13นหรอ

ไม โดยพนฐานแล)ว นคอเมธอดทเอามาจากคลาส Object แตถ)าจะเขยนเมธอดนเอง เพอเปลยนให)เปนการเปรยบเทยบคาทอยในคอลเลคช13นกได)

ndash โครงสร)างข)อมล List ก13บ Set ของจาวาน13นได)เขยนเมธอดนข$นเองโดยก1าหนดให) List ต)องเทาก13บ List และ Set ต)องเทาก13บ Set เทาน13น ฉะน13นถ)าเราเขยนเมธอดนให)คลาสของเราเองซ$งไมใช List หรอ Set แล)วละก เมธอดของเราจะรเทรน false เมอน1าไปใช)ก13บ List หรอ set

ndash นอกจากนย13งไมสามารถสร)างคลาสซ$ง implement List ก13บ Set ในเวลาเดยวก13นได)

bull int hashCode() ndash รเทรนแฮชโค)ดของคอลเลคช13นน ถ)าเราโอเวอรไรด

equals() แล)วเราต)องโอเวอรไรด hashcode() ด)วย เพราะ c1equals(c2) ต)องหมายถ$ง c1hashCode()==c2hashCode()

bull boolean isEmpty() ndash รเทรน true ถ)าคอลเลคช13นนไมมสมาชก

bull IteratorltE gt iterator() ndash รเทรนอเทอเรเตอรทจะอนญาตให)เราดสมาชกใน

คอลเลคช13นนได) การเรยงของสมาชกน13นไมได)มการก1าหนดไว)ในช13นน

bull boolean remove(Object o) ndash เอาสมาชก e ซ$ง (o==null e==null oequals(e)) ออก

จากคอลเลคช13น ถ)ามอยในคอลเลคช13น ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() ) ทง ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() )

เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull Object [] toArray() ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมด ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วยbull ltTgt T[] toArray(T[] a)

ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมดndash ร13นไทมไทป4ของอารเรยทร เทรนให)เปนชนดเดยวก13บอารเรย a ndash ถ)าคอลเลคช13นของเราใส a ได) กจะเอาใส a แล)วรเทรน a เลย (สมาชกในด)าน

หล13งของ a ทมทเหลอกจะถกเซตเปน null )ndash มฉะน13นต)องสร)างอารเรยใหมซ$งขนาดใหญพอทจะเกบคอลเลคช13นของเราได) ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วย

Iterator ของ Collection

bull public Interface IteratorltEgthellipbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกให)ดได)อก (น13นคอ รเทรน true เมอ next() จะรเทรนสมาชกน13นเอง

bull E next() ndash รเทรนสมาชกต13วตอไปตามล1าด13บทก1าหนดไว)

bull void remove() ndash เอาสมาชกต13วทพ$งถกรเทรนด)วย next() ออกไป ndash เรยกเมธอดนได)หน$งคร13งตอการเรยกใช) next() หน$งคร13ง ndash ถ)าต13วคอลลเคช13นถกเปลยนระหวางทก1าล13งลปด)วยวธอนท

ไมใชเมธอดน เราจะถอวาเมธอดนใช)ไมได)

การใช)งาน Iterator

bull เราลปแล)วเลอกพมพเฉพาะต13วเลขทมคามากกวาหน$งร)อย

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 currentNumber = itrnext() auto convert 6 if(currentNumbergt100)7 Systemoutprintln(currentNumber)8 9

การใช)งาน Iterator ทผด

bull อยาลมวาการลปแตละคร13งควรใช) next() แคคร13งเดยวเทาน13น มฉะน13นเราจะท1าเกนต1าแหนงทต)องการ

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 if(itrnext() gt100)6 Systemoutprintln(itrnext())7 8 เกน

for loop แบบพเศษ

bull bull IteratorltIntegergt itr = myCollectioniterator()bull for(Integer currentInt myCollection )bull if(currentIntintValue() gt100)bull Systemoutprintln(currentIntintValue())bull bull

ldquoส1าหร13บแตละจ1านวนเตมใน myCollectionrdquo

แตวา for loop แบบพเศษน13นไมสามารถใช)ได)ในกรณทต13วคอลเลคช13นต)องมการเปลยนแปลงระหวางการลป ด13งน13นการลปเอาสมาชกออกจากคอลเลคช13นกต)องใช)อเทอเรเตอรเทาน13น

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 7: Java Collection Framework

ต13วอยางการใช)งาน (3)

1 2 Robot r3 4 int robotSerialNumber = getSerialNumber() 5 if (robotSerialNumber == 1) 6 r = new GetterRobot()7 else 8 r= new GundamRobot()9 Systemoutprintln(rgetClassName()+rpunch())10

ไทป4แบบมพารามเตอร (Generic Types)

bull จาวา 15 ข$นไปอนญาตให)เราเขยนไทป4ของสมาชกของคลาสได) โดยเขยนในวงเลบทสร)างจากเครองหมาย ldquogtrdquo และ ldquoltrdquo

bull LinkedListltDoublegt myList = new LinkedListltDoublegt()

bull ซ$งเมอเขยนแบบนไปแล)ว จะมแต ข)อมลประเภท Double เทาน13นทลสตจะยอมร13บ ด13งน13นในการใช)งานเมธอด get ทเขยนไว)แล)วในลงคลสต (ย13งไมต)องร )มากเพราะมเรองลงคลสตของจาวาตางหากอกท)

bull Double val = myListget(o)bull เรากไมต)องมาท1าการเปลยนรปแบบข)อมลทได)ให)เปน Double เพราะวา

ถกบ13งค13บไว)เรยบร)อยแล)ว

ประโยชนของการเขยนไทป4แบบมพารามเตอร

bull เราสามารถเหนได)ท13นทวาคอลเลคช13นของเราเกบอะไรอย คอมไพเลอรสามารถเชคชนดสมาชกทเราพยายามเอาใสคอลเลคช13นได)ท13นท

bull ถ)าไมมการก1าหนดไทป4แบบนกจะคอมไพลผานแตไปเกดข)อผดพลาดตอนร13น (exception)

Wrapper class ใน java15

bull จาวา 15 ท1าการเปลยนชนดระหวางข)อมลพนฐานก13บ wrapper class ได)เอง

bull เราสามารถเขยน myListadd(38) แทน myListadd(new Double(38)) ได)เลย ต13วจาวาจะท1าการ ldquoboxingrdquo ให)เปนออบเจกตเอง

bull เราสามารถเขยน double sum = sum +myListget(0) ได) จาวาจะเปลยนออบเจกตทเอาออกมาจากลสตให)เปนต13วเลขโดยอ13ตโนม13ต เรยกวาการ ldquounboxingrdquo

Collection Interface1 public Interface Collection extends IterableltEgt2 boolean add(E o) 3 boolean addAll(Collectionlt extends Egt c)4 void clear()5 boolean contains(Object o)6 boolean containsAll(Collectionltgt c)7 boolean equals(Object o)8 int hashCode()9 boolean isEmpty()10 IteratorltEgt iterator()11 boolean remove(Object o)12 boolean removeAll(Collectionltgt c)13 boolean retainAll(Collectionltgt c)14 int size()15 Object[]toArray()16 ltTgt T[]toArray(T[] a)17

เมธอดตางๆของ Collection Interface

bull boolean add(E o) ndash พยายามท1าให)ม o อยในคอลเลคช13นน รเทรน true ถ)าการเรยกเมธอดน

ท1าให)ภายในคอลเลคช13นเปลยนไป รเทรน false ถ)าคอลเลคช13นนมกอปป7ไมได) และ ม o อยแล)ว

bull boolean addAll(Collectionlt extends Egt c) ndash เตมสมาชกจากคอลเลคช13น c ท13งหมดลงในคอลเลคช13นของเรา แต

เมธอดนจะถอวาใช)ไมได)ถ)า c ถกเปลยนแปลงระหวางทเมธอดนท1างานอย น13นกคอ c จะเปนคอลเลคช13นทเราใช)เรยกเมธอดนเองไมได)

ndash เมธอดนรเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

ndash พารามเตอร lt extends Egt หมายถ$งอะไรกได)ทเปนส13บคลาสของ E โดย E คอพารามเตอรของคอลเลคช13นทเรยกใช)เมธอดน อยาลมวาคลาสใดๆกเปนส13บคลาสของต13วม13นเอง

bull void clear() ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull void clear()ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull boolean contains(Object o) ndash รเทรน true ถ)าคอลเลคช13นนม o อย หรอพดได)อก

อยางวา รเทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าคอลเลคช13นนม สมาชกจากคอลเลคช13น

c อยท13 งหมด

bull boolean equals(Object o) ndash เปรยบเทยบออบเจกต o ก13บคอลเลคช13นนวาเทาก13นหรอ

ไม โดยพนฐานแล)ว นคอเมธอดทเอามาจากคลาส Object แตถ)าจะเขยนเมธอดนเอง เพอเปลยนให)เปนการเปรยบเทยบคาทอยในคอลเลคช13นกได)

ndash โครงสร)างข)อมล List ก13บ Set ของจาวาน13นได)เขยนเมธอดนข$นเองโดยก1าหนดให) List ต)องเทาก13บ List และ Set ต)องเทาก13บ Set เทาน13น ฉะน13นถ)าเราเขยนเมธอดนให)คลาสของเราเองซ$งไมใช List หรอ Set แล)วละก เมธอดของเราจะรเทรน false เมอน1าไปใช)ก13บ List หรอ set

ndash นอกจากนย13งไมสามารถสร)างคลาสซ$ง implement List ก13บ Set ในเวลาเดยวก13นได)

bull int hashCode() ndash รเทรนแฮชโค)ดของคอลเลคช13นน ถ)าเราโอเวอรไรด

equals() แล)วเราต)องโอเวอรไรด hashcode() ด)วย เพราะ c1equals(c2) ต)องหมายถ$ง c1hashCode()==c2hashCode()

bull boolean isEmpty() ndash รเทรน true ถ)าคอลเลคช13นนไมมสมาชก

bull IteratorltE gt iterator() ndash รเทรนอเทอเรเตอรทจะอนญาตให)เราดสมาชกใน

คอลเลคช13นนได) การเรยงของสมาชกน13นไมได)มการก1าหนดไว)ในช13นน

bull boolean remove(Object o) ndash เอาสมาชก e ซ$ง (o==null e==null oequals(e)) ออก

จากคอลเลคช13น ถ)ามอยในคอลเลคช13น ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() ) ทง ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() )

เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull Object [] toArray() ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมด ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วยbull ltTgt T[] toArray(T[] a)

ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมดndash ร13นไทมไทป4ของอารเรยทร เทรนให)เปนชนดเดยวก13บอารเรย a ndash ถ)าคอลเลคช13นของเราใส a ได) กจะเอาใส a แล)วรเทรน a เลย (สมาชกในด)าน

หล13งของ a ทมทเหลอกจะถกเซตเปน null )ndash มฉะน13นต)องสร)างอารเรยใหมซ$งขนาดใหญพอทจะเกบคอลเลคช13นของเราได) ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วย

Iterator ของ Collection

bull public Interface IteratorltEgthellipbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกให)ดได)อก (น13นคอ รเทรน true เมอ next() จะรเทรนสมาชกน13นเอง

bull E next() ndash รเทรนสมาชกต13วตอไปตามล1าด13บทก1าหนดไว)

bull void remove() ndash เอาสมาชกต13วทพ$งถกรเทรนด)วย next() ออกไป ndash เรยกเมธอดนได)หน$งคร13งตอการเรยกใช) next() หน$งคร13ง ndash ถ)าต13วคอลลเคช13นถกเปลยนระหวางทก1าล13งลปด)วยวธอนท

ไมใชเมธอดน เราจะถอวาเมธอดนใช)ไมได)

การใช)งาน Iterator

bull เราลปแล)วเลอกพมพเฉพาะต13วเลขทมคามากกวาหน$งร)อย

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 currentNumber = itrnext() auto convert 6 if(currentNumbergt100)7 Systemoutprintln(currentNumber)8 9

การใช)งาน Iterator ทผด

bull อยาลมวาการลปแตละคร13งควรใช) next() แคคร13งเดยวเทาน13น มฉะน13นเราจะท1าเกนต1าแหนงทต)องการ

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 if(itrnext() gt100)6 Systemoutprintln(itrnext())7 8 เกน

for loop แบบพเศษ

bull bull IteratorltIntegergt itr = myCollectioniterator()bull for(Integer currentInt myCollection )bull if(currentIntintValue() gt100)bull Systemoutprintln(currentIntintValue())bull bull

ldquoส1าหร13บแตละจ1านวนเตมใน myCollectionrdquo

แตวา for loop แบบพเศษน13นไมสามารถใช)ได)ในกรณทต13วคอลเลคช13นต)องมการเปลยนแปลงระหวางการลป ด13งน13นการลปเอาสมาชกออกจากคอลเลคช13นกต)องใช)อเทอเรเตอรเทาน13น

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 8: Java Collection Framework

ไทป4แบบมพารามเตอร (Generic Types)

bull จาวา 15 ข$นไปอนญาตให)เราเขยนไทป4ของสมาชกของคลาสได) โดยเขยนในวงเลบทสร)างจากเครองหมาย ldquogtrdquo และ ldquoltrdquo

bull LinkedListltDoublegt myList = new LinkedListltDoublegt()

bull ซ$งเมอเขยนแบบนไปแล)ว จะมแต ข)อมลประเภท Double เทาน13นทลสตจะยอมร13บ ด13งน13นในการใช)งานเมธอด get ทเขยนไว)แล)วในลงคลสต (ย13งไมต)องร )มากเพราะมเรองลงคลสตของจาวาตางหากอกท)

bull Double val = myListget(o)bull เรากไมต)องมาท1าการเปลยนรปแบบข)อมลทได)ให)เปน Double เพราะวา

ถกบ13งค13บไว)เรยบร)อยแล)ว

ประโยชนของการเขยนไทป4แบบมพารามเตอร

bull เราสามารถเหนได)ท13นทวาคอลเลคช13นของเราเกบอะไรอย คอมไพเลอรสามารถเชคชนดสมาชกทเราพยายามเอาใสคอลเลคช13นได)ท13นท

bull ถ)าไมมการก1าหนดไทป4แบบนกจะคอมไพลผานแตไปเกดข)อผดพลาดตอนร13น (exception)

Wrapper class ใน java15

bull จาวา 15 ท1าการเปลยนชนดระหวางข)อมลพนฐานก13บ wrapper class ได)เอง

bull เราสามารถเขยน myListadd(38) แทน myListadd(new Double(38)) ได)เลย ต13วจาวาจะท1าการ ldquoboxingrdquo ให)เปนออบเจกตเอง

bull เราสามารถเขยน double sum = sum +myListget(0) ได) จาวาจะเปลยนออบเจกตทเอาออกมาจากลสตให)เปนต13วเลขโดยอ13ตโนม13ต เรยกวาการ ldquounboxingrdquo

Collection Interface1 public Interface Collection extends IterableltEgt2 boolean add(E o) 3 boolean addAll(Collectionlt extends Egt c)4 void clear()5 boolean contains(Object o)6 boolean containsAll(Collectionltgt c)7 boolean equals(Object o)8 int hashCode()9 boolean isEmpty()10 IteratorltEgt iterator()11 boolean remove(Object o)12 boolean removeAll(Collectionltgt c)13 boolean retainAll(Collectionltgt c)14 int size()15 Object[]toArray()16 ltTgt T[]toArray(T[] a)17

เมธอดตางๆของ Collection Interface

bull boolean add(E o) ndash พยายามท1าให)ม o อยในคอลเลคช13นน รเทรน true ถ)าการเรยกเมธอดน

ท1าให)ภายในคอลเลคช13นเปลยนไป รเทรน false ถ)าคอลเลคช13นนมกอปป7ไมได) และ ม o อยแล)ว

bull boolean addAll(Collectionlt extends Egt c) ndash เตมสมาชกจากคอลเลคช13น c ท13งหมดลงในคอลเลคช13นของเรา แต

เมธอดนจะถอวาใช)ไมได)ถ)า c ถกเปลยนแปลงระหวางทเมธอดนท1างานอย น13นกคอ c จะเปนคอลเลคช13นทเราใช)เรยกเมธอดนเองไมได)

ndash เมธอดนรเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

ndash พารามเตอร lt extends Egt หมายถ$งอะไรกได)ทเปนส13บคลาสของ E โดย E คอพารามเตอรของคอลเลคช13นทเรยกใช)เมธอดน อยาลมวาคลาสใดๆกเปนส13บคลาสของต13วม13นเอง

bull void clear() ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull void clear()ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull boolean contains(Object o) ndash รเทรน true ถ)าคอลเลคช13นนม o อย หรอพดได)อก

อยางวา รเทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าคอลเลคช13นนม สมาชกจากคอลเลคช13น

c อยท13 งหมด

bull boolean equals(Object o) ndash เปรยบเทยบออบเจกต o ก13บคอลเลคช13นนวาเทาก13นหรอ

ไม โดยพนฐานแล)ว นคอเมธอดทเอามาจากคลาส Object แตถ)าจะเขยนเมธอดนเอง เพอเปลยนให)เปนการเปรยบเทยบคาทอยในคอลเลคช13นกได)

ndash โครงสร)างข)อมล List ก13บ Set ของจาวาน13นได)เขยนเมธอดนข$นเองโดยก1าหนดให) List ต)องเทาก13บ List และ Set ต)องเทาก13บ Set เทาน13น ฉะน13นถ)าเราเขยนเมธอดนให)คลาสของเราเองซ$งไมใช List หรอ Set แล)วละก เมธอดของเราจะรเทรน false เมอน1าไปใช)ก13บ List หรอ set

ndash นอกจากนย13งไมสามารถสร)างคลาสซ$ง implement List ก13บ Set ในเวลาเดยวก13นได)

bull int hashCode() ndash รเทรนแฮชโค)ดของคอลเลคช13นน ถ)าเราโอเวอรไรด

equals() แล)วเราต)องโอเวอรไรด hashcode() ด)วย เพราะ c1equals(c2) ต)องหมายถ$ง c1hashCode()==c2hashCode()

bull boolean isEmpty() ndash รเทรน true ถ)าคอลเลคช13นนไมมสมาชก

bull IteratorltE gt iterator() ndash รเทรนอเทอเรเตอรทจะอนญาตให)เราดสมาชกใน

คอลเลคช13นนได) การเรยงของสมาชกน13นไมได)มการก1าหนดไว)ในช13นน

bull boolean remove(Object o) ndash เอาสมาชก e ซ$ง (o==null e==null oequals(e)) ออก

จากคอลเลคช13น ถ)ามอยในคอลเลคช13น ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() ) ทง ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() )

เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull Object [] toArray() ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมด ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วยbull ltTgt T[] toArray(T[] a)

ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมดndash ร13นไทมไทป4ของอารเรยทร เทรนให)เปนชนดเดยวก13บอารเรย a ndash ถ)าคอลเลคช13นของเราใส a ได) กจะเอาใส a แล)วรเทรน a เลย (สมาชกในด)าน

หล13งของ a ทมทเหลอกจะถกเซตเปน null )ndash มฉะน13นต)องสร)างอารเรยใหมซ$งขนาดใหญพอทจะเกบคอลเลคช13นของเราได) ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วย

Iterator ของ Collection

bull public Interface IteratorltEgthellipbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกให)ดได)อก (น13นคอ รเทรน true เมอ next() จะรเทรนสมาชกน13นเอง

bull E next() ndash รเทรนสมาชกต13วตอไปตามล1าด13บทก1าหนดไว)

bull void remove() ndash เอาสมาชกต13วทพ$งถกรเทรนด)วย next() ออกไป ndash เรยกเมธอดนได)หน$งคร13งตอการเรยกใช) next() หน$งคร13ง ndash ถ)าต13วคอลลเคช13นถกเปลยนระหวางทก1าล13งลปด)วยวธอนท

ไมใชเมธอดน เราจะถอวาเมธอดนใช)ไมได)

การใช)งาน Iterator

bull เราลปแล)วเลอกพมพเฉพาะต13วเลขทมคามากกวาหน$งร)อย

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 currentNumber = itrnext() auto convert 6 if(currentNumbergt100)7 Systemoutprintln(currentNumber)8 9

การใช)งาน Iterator ทผด

bull อยาลมวาการลปแตละคร13งควรใช) next() แคคร13งเดยวเทาน13น มฉะน13นเราจะท1าเกนต1าแหนงทต)องการ

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 if(itrnext() gt100)6 Systemoutprintln(itrnext())7 8 เกน

for loop แบบพเศษ

bull bull IteratorltIntegergt itr = myCollectioniterator()bull for(Integer currentInt myCollection )bull if(currentIntintValue() gt100)bull Systemoutprintln(currentIntintValue())bull bull

ldquoส1าหร13บแตละจ1านวนเตมใน myCollectionrdquo

แตวา for loop แบบพเศษน13นไมสามารถใช)ได)ในกรณทต13วคอลเลคช13นต)องมการเปลยนแปลงระหวางการลป ด13งน13นการลปเอาสมาชกออกจากคอลเลคช13นกต)องใช)อเทอเรเตอรเทาน13น

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 9: Java Collection Framework

ประโยชนของการเขยนไทป4แบบมพารามเตอร

bull เราสามารถเหนได)ท13นทวาคอลเลคช13นของเราเกบอะไรอย คอมไพเลอรสามารถเชคชนดสมาชกทเราพยายามเอาใสคอลเลคช13นได)ท13นท

bull ถ)าไมมการก1าหนดไทป4แบบนกจะคอมไพลผานแตไปเกดข)อผดพลาดตอนร13น (exception)

Wrapper class ใน java15

bull จาวา 15 ท1าการเปลยนชนดระหวางข)อมลพนฐานก13บ wrapper class ได)เอง

bull เราสามารถเขยน myListadd(38) แทน myListadd(new Double(38)) ได)เลย ต13วจาวาจะท1าการ ldquoboxingrdquo ให)เปนออบเจกตเอง

bull เราสามารถเขยน double sum = sum +myListget(0) ได) จาวาจะเปลยนออบเจกตทเอาออกมาจากลสตให)เปนต13วเลขโดยอ13ตโนม13ต เรยกวาการ ldquounboxingrdquo

Collection Interface1 public Interface Collection extends IterableltEgt2 boolean add(E o) 3 boolean addAll(Collectionlt extends Egt c)4 void clear()5 boolean contains(Object o)6 boolean containsAll(Collectionltgt c)7 boolean equals(Object o)8 int hashCode()9 boolean isEmpty()10 IteratorltEgt iterator()11 boolean remove(Object o)12 boolean removeAll(Collectionltgt c)13 boolean retainAll(Collectionltgt c)14 int size()15 Object[]toArray()16 ltTgt T[]toArray(T[] a)17

เมธอดตางๆของ Collection Interface

bull boolean add(E o) ndash พยายามท1าให)ม o อยในคอลเลคช13นน รเทรน true ถ)าการเรยกเมธอดน

ท1าให)ภายในคอลเลคช13นเปลยนไป รเทรน false ถ)าคอลเลคช13นนมกอปป7ไมได) และ ม o อยแล)ว

bull boolean addAll(Collectionlt extends Egt c) ndash เตมสมาชกจากคอลเลคช13น c ท13งหมดลงในคอลเลคช13นของเรา แต

เมธอดนจะถอวาใช)ไมได)ถ)า c ถกเปลยนแปลงระหวางทเมธอดนท1างานอย น13นกคอ c จะเปนคอลเลคช13นทเราใช)เรยกเมธอดนเองไมได)

ndash เมธอดนรเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

ndash พารามเตอร lt extends Egt หมายถ$งอะไรกได)ทเปนส13บคลาสของ E โดย E คอพารามเตอรของคอลเลคช13นทเรยกใช)เมธอดน อยาลมวาคลาสใดๆกเปนส13บคลาสของต13วม13นเอง

bull void clear() ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull void clear()ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull boolean contains(Object o) ndash รเทรน true ถ)าคอลเลคช13นนม o อย หรอพดได)อก

อยางวา รเทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าคอลเลคช13นนม สมาชกจากคอลเลคช13น

c อยท13 งหมด

bull boolean equals(Object o) ndash เปรยบเทยบออบเจกต o ก13บคอลเลคช13นนวาเทาก13นหรอ

ไม โดยพนฐานแล)ว นคอเมธอดทเอามาจากคลาส Object แตถ)าจะเขยนเมธอดนเอง เพอเปลยนให)เปนการเปรยบเทยบคาทอยในคอลเลคช13นกได)

ndash โครงสร)างข)อมล List ก13บ Set ของจาวาน13นได)เขยนเมธอดนข$นเองโดยก1าหนดให) List ต)องเทาก13บ List และ Set ต)องเทาก13บ Set เทาน13น ฉะน13นถ)าเราเขยนเมธอดนให)คลาสของเราเองซ$งไมใช List หรอ Set แล)วละก เมธอดของเราจะรเทรน false เมอน1าไปใช)ก13บ List หรอ set

ndash นอกจากนย13งไมสามารถสร)างคลาสซ$ง implement List ก13บ Set ในเวลาเดยวก13นได)

bull int hashCode() ndash รเทรนแฮชโค)ดของคอลเลคช13นน ถ)าเราโอเวอรไรด

equals() แล)วเราต)องโอเวอรไรด hashcode() ด)วย เพราะ c1equals(c2) ต)องหมายถ$ง c1hashCode()==c2hashCode()

bull boolean isEmpty() ndash รเทรน true ถ)าคอลเลคช13นนไมมสมาชก

bull IteratorltE gt iterator() ndash รเทรนอเทอเรเตอรทจะอนญาตให)เราดสมาชกใน

คอลเลคช13นนได) การเรยงของสมาชกน13นไมได)มการก1าหนดไว)ในช13นน

bull boolean remove(Object o) ndash เอาสมาชก e ซ$ง (o==null e==null oequals(e)) ออก

จากคอลเลคช13น ถ)ามอยในคอลเลคช13น ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() ) ทง ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() )

เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull Object [] toArray() ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมด ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วยbull ltTgt T[] toArray(T[] a)

ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมดndash ร13นไทมไทป4ของอารเรยทร เทรนให)เปนชนดเดยวก13บอารเรย a ndash ถ)าคอลเลคช13นของเราใส a ได) กจะเอาใส a แล)วรเทรน a เลย (สมาชกในด)าน

หล13งของ a ทมทเหลอกจะถกเซตเปน null )ndash มฉะน13นต)องสร)างอารเรยใหมซ$งขนาดใหญพอทจะเกบคอลเลคช13นของเราได) ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วย

Iterator ของ Collection

bull public Interface IteratorltEgthellipbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกให)ดได)อก (น13นคอ รเทรน true เมอ next() จะรเทรนสมาชกน13นเอง

bull E next() ndash รเทรนสมาชกต13วตอไปตามล1าด13บทก1าหนดไว)

bull void remove() ndash เอาสมาชกต13วทพ$งถกรเทรนด)วย next() ออกไป ndash เรยกเมธอดนได)หน$งคร13งตอการเรยกใช) next() หน$งคร13ง ndash ถ)าต13วคอลลเคช13นถกเปลยนระหวางทก1าล13งลปด)วยวธอนท

ไมใชเมธอดน เราจะถอวาเมธอดนใช)ไมได)

การใช)งาน Iterator

bull เราลปแล)วเลอกพมพเฉพาะต13วเลขทมคามากกวาหน$งร)อย

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 currentNumber = itrnext() auto convert 6 if(currentNumbergt100)7 Systemoutprintln(currentNumber)8 9

การใช)งาน Iterator ทผด

bull อยาลมวาการลปแตละคร13งควรใช) next() แคคร13งเดยวเทาน13น มฉะน13นเราจะท1าเกนต1าแหนงทต)องการ

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 if(itrnext() gt100)6 Systemoutprintln(itrnext())7 8 เกน

for loop แบบพเศษ

bull bull IteratorltIntegergt itr = myCollectioniterator()bull for(Integer currentInt myCollection )bull if(currentIntintValue() gt100)bull Systemoutprintln(currentIntintValue())bull bull

ldquoส1าหร13บแตละจ1านวนเตมใน myCollectionrdquo

แตวา for loop แบบพเศษน13นไมสามารถใช)ได)ในกรณทต13วคอลเลคช13นต)องมการเปลยนแปลงระหวางการลป ด13งน13นการลปเอาสมาชกออกจากคอลเลคช13นกต)องใช)อเทอเรเตอรเทาน13น

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 10: Java Collection Framework

Wrapper class ใน java15

bull จาวา 15 ท1าการเปลยนชนดระหวางข)อมลพนฐานก13บ wrapper class ได)เอง

bull เราสามารถเขยน myListadd(38) แทน myListadd(new Double(38)) ได)เลย ต13วจาวาจะท1าการ ldquoboxingrdquo ให)เปนออบเจกตเอง

bull เราสามารถเขยน double sum = sum +myListget(0) ได) จาวาจะเปลยนออบเจกตทเอาออกมาจากลสตให)เปนต13วเลขโดยอ13ตโนม13ต เรยกวาการ ldquounboxingrdquo

Collection Interface1 public Interface Collection extends IterableltEgt2 boolean add(E o) 3 boolean addAll(Collectionlt extends Egt c)4 void clear()5 boolean contains(Object o)6 boolean containsAll(Collectionltgt c)7 boolean equals(Object o)8 int hashCode()9 boolean isEmpty()10 IteratorltEgt iterator()11 boolean remove(Object o)12 boolean removeAll(Collectionltgt c)13 boolean retainAll(Collectionltgt c)14 int size()15 Object[]toArray()16 ltTgt T[]toArray(T[] a)17

เมธอดตางๆของ Collection Interface

bull boolean add(E o) ndash พยายามท1าให)ม o อยในคอลเลคช13นน รเทรน true ถ)าการเรยกเมธอดน

ท1าให)ภายในคอลเลคช13นเปลยนไป รเทรน false ถ)าคอลเลคช13นนมกอปป7ไมได) และ ม o อยแล)ว

bull boolean addAll(Collectionlt extends Egt c) ndash เตมสมาชกจากคอลเลคช13น c ท13งหมดลงในคอลเลคช13นของเรา แต

เมธอดนจะถอวาใช)ไมได)ถ)า c ถกเปลยนแปลงระหวางทเมธอดนท1างานอย น13นกคอ c จะเปนคอลเลคช13นทเราใช)เรยกเมธอดนเองไมได)

ndash เมธอดนรเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

ndash พารามเตอร lt extends Egt หมายถ$งอะไรกได)ทเปนส13บคลาสของ E โดย E คอพารามเตอรของคอลเลคช13นทเรยกใช)เมธอดน อยาลมวาคลาสใดๆกเปนส13บคลาสของต13วม13นเอง

bull void clear() ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull void clear()ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull boolean contains(Object o) ndash รเทรน true ถ)าคอลเลคช13นนม o อย หรอพดได)อก

อยางวา รเทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าคอลเลคช13นนม สมาชกจากคอลเลคช13น

c อยท13 งหมด

bull boolean equals(Object o) ndash เปรยบเทยบออบเจกต o ก13บคอลเลคช13นนวาเทาก13นหรอ

ไม โดยพนฐานแล)ว นคอเมธอดทเอามาจากคลาส Object แตถ)าจะเขยนเมธอดนเอง เพอเปลยนให)เปนการเปรยบเทยบคาทอยในคอลเลคช13นกได)

ndash โครงสร)างข)อมล List ก13บ Set ของจาวาน13นได)เขยนเมธอดนข$นเองโดยก1าหนดให) List ต)องเทาก13บ List และ Set ต)องเทาก13บ Set เทาน13น ฉะน13นถ)าเราเขยนเมธอดนให)คลาสของเราเองซ$งไมใช List หรอ Set แล)วละก เมธอดของเราจะรเทรน false เมอน1าไปใช)ก13บ List หรอ set

ndash นอกจากนย13งไมสามารถสร)างคลาสซ$ง implement List ก13บ Set ในเวลาเดยวก13นได)

bull int hashCode() ndash รเทรนแฮชโค)ดของคอลเลคช13นน ถ)าเราโอเวอรไรด

equals() แล)วเราต)องโอเวอรไรด hashcode() ด)วย เพราะ c1equals(c2) ต)องหมายถ$ง c1hashCode()==c2hashCode()

bull boolean isEmpty() ndash รเทรน true ถ)าคอลเลคช13นนไมมสมาชก

bull IteratorltE gt iterator() ndash รเทรนอเทอเรเตอรทจะอนญาตให)เราดสมาชกใน

คอลเลคช13นนได) การเรยงของสมาชกน13นไมได)มการก1าหนดไว)ในช13นน

bull boolean remove(Object o) ndash เอาสมาชก e ซ$ง (o==null e==null oequals(e)) ออก

จากคอลเลคช13น ถ)ามอยในคอลเลคช13น ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() ) ทง ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() )

เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull Object [] toArray() ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมด ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วยbull ltTgt T[] toArray(T[] a)

ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมดndash ร13นไทมไทป4ของอารเรยทร เทรนให)เปนชนดเดยวก13บอารเรย a ndash ถ)าคอลเลคช13นของเราใส a ได) กจะเอาใส a แล)วรเทรน a เลย (สมาชกในด)าน

หล13งของ a ทมทเหลอกจะถกเซตเปน null )ndash มฉะน13นต)องสร)างอารเรยใหมซ$งขนาดใหญพอทจะเกบคอลเลคช13นของเราได) ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วย

Iterator ของ Collection

bull public Interface IteratorltEgthellipbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกให)ดได)อก (น13นคอ รเทรน true เมอ next() จะรเทรนสมาชกน13นเอง

bull E next() ndash รเทรนสมาชกต13วตอไปตามล1าด13บทก1าหนดไว)

bull void remove() ndash เอาสมาชกต13วทพ$งถกรเทรนด)วย next() ออกไป ndash เรยกเมธอดนได)หน$งคร13งตอการเรยกใช) next() หน$งคร13ง ndash ถ)าต13วคอลลเคช13นถกเปลยนระหวางทก1าล13งลปด)วยวธอนท

ไมใชเมธอดน เราจะถอวาเมธอดนใช)ไมได)

การใช)งาน Iterator

bull เราลปแล)วเลอกพมพเฉพาะต13วเลขทมคามากกวาหน$งร)อย

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 currentNumber = itrnext() auto convert 6 if(currentNumbergt100)7 Systemoutprintln(currentNumber)8 9

การใช)งาน Iterator ทผด

bull อยาลมวาการลปแตละคร13งควรใช) next() แคคร13งเดยวเทาน13น มฉะน13นเราจะท1าเกนต1าแหนงทต)องการ

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 if(itrnext() gt100)6 Systemoutprintln(itrnext())7 8 เกน

for loop แบบพเศษ

bull bull IteratorltIntegergt itr = myCollectioniterator()bull for(Integer currentInt myCollection )bull if(currentIntintValue() gt100)bull Systemoutprintln(currentIntintValue())bull bull

ldquoส1าหร13บแตละจ1านวนเตมใน myCollectionrdquo

แตวา for loop แบบพเศษน13นไมสามารถใช)ได)ในกรณทต13วคอลเลคช13นต)องมการเปลยนแปลงระหวางการลป ด13งน13นการลปเอาสมาชกออกจากคอลเลคช13นกต)องใช)อเทอเรเตอรเทาน13น

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 11: Java Collection Framework

Collection Interface1 public Interface Collection extends IterableltEgt2 boolean add(E o) 3 boolean addAll(Collectionlt extends Egt c)4 void clear()5 boolean contains(Object o)6 boolean containsAll(Collectionltgt c)7 boolean equals(Object o)8 int hashCode()9 boolean isEmpty()10 IteratorltEgt iterator()11 boolean remove(Object o)12 boolean removeAll(Collectionltgt c)13 boolean retainAll(Collectionltgt c)14 int size()15 Object[]toArray()16 ltTgt T[]toArray(T[] a)17

เมธอดตางๆของ Collection Interface

bull boolean add(E o) ndash พยายามท1าให)ม o อยในคอลเลคช13นน รเทรน true ถ)าการเรยกเมธอดน

ท1าให)ภายในคอลเลคช13นเปลยนไป รเทรน false ถ)าคอลเลคช13นนมกอปป7ไมได) และ ม o อยแล)ว

bull boolean addAll(Collectionlt extends Egt c) ndash เตมสมาชกจากคอลเลคช13น c ท13งหมดลงในคอลเลคช13นของเรา แต

เมธอดนจะถอวาใช)ไมได)ถ)า c ถกเปลยนแปลงระหวางทเมธอดนท1างานอย น13นกคอ c จะเปนคอลเลคช13นทเราใช)เรยกเมธอดนเองไมได)

ndash เมธอดนรเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

ndash พารามเตอร lt extends Egt หมายถ$งอะไรกได)ทเปนส13บคลาสของ E โดย E คอพารามเตอรของคอลเลคช13นทเรยกใช)เมธอดน อยาลมวาคลาสใดๆกเปนส13บคลาสของต13วม13นเอง

bull void clear() ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull void clear()ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull boolean contains(Object o) ndash รเทรน true ถ)าคอลเลคช13นนม o อย หรอพดได)อก

อยางวา รเทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าคอลเลคช13นนม สมาชกจากคอลเลคช13น

c อยท13 งหมด

bull boolean equals(Object o) ndash เปรยบเทยบออบเจกต o ก13บคอลเลคช13นนวาเทาก13นหรอ

ไม โดยพนฐานแล)ว นคอเมธอดทเอามาจากคลาส Object แตถ)าจะเขยนเมธอดนเอง เพอเปลยนให)เปนการเปรยบเทยบคาทอยในคอลเลคช13นกได)

ndash โครงสร)างข)อมล List ก13บ Set ของจาวาน13นได)เขยนเมธอดนข$นเองโดยก1าหนดให) List ต)องเทาก13บ List และ Set ต)องเทาก13บ Set เทาน13น ฉะน13นถ)าเราเขยนเมธอดนให)คลาสของเราเองซ$งไมใช List หรอ Set แล)วละก เมธอดของเราจะรเทรน false เมอน1าไปใช)ก13บ List หรอ set

ndash นอกจากนย13งไมสามารถสร)างคลาสซ$ง implement List ก13บ Set ในเวลาเดยวก13นได)

bull int hashCode() ndash รเทรนแฮชโค)ดของคอลเลคช13นน ถ)าเราโอเวอรไรด

equals() แล)วเราต)องโอเวอรไรด hashcode() ด)วย เพราะ c1equals(c2) ต)องหมายถ$ง c1hashCode()==c2hashCode()

bull boolean isEmpty() ndash รเทรน true ถ)าคอลเลคช13นนไมมสมาชก

bull IteratorltE gt iterator() ndash รเทรนอเทอเรเตอรทจะอนญาตให)เราดสมาชกใน

คอลเลคช13นนได) การเรยงของสมาชกน13นไมได)มการก1าหนดไว)ในช13นน

bull boolean remove(Object o) ndash เอาสมาชก e ซ$ง (o==null e==null oequals(e)) ออก

จากคอลเลคช13น ถ)ามอยในคอลเลคช13น ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() ) ทง ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() )

เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull Object [] toArray() ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมด ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วยbull ltTgt T[] toArray(T[] a)

ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมดndash ร13นไทมไทป4ของอารเรยทร เทรนให)เปนชนดเดยวก13บอารเรย a ndash ถ)าคอลเลคช13นของเราใส a ได) กจะเอาใส a แล)วรเทรน a เลย (สมาชกในด)าน

หล13งของ a ทมทเหลอกจะถกเซตเปน null )ndash มฉะน13นต)องสร)างอารเรยใหมซ$งขนาดใหญพอทจะเกบคอลเลคช13นของเราได) ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วย

Iterator ของ Collection

bull public Interface IteratorltEgthellipbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกให)ดได)อก (น13นคอ รเทรน true เมอ next() จะรเทรนสมาชกน13นเอง

bull E next() ndash รเทรนสมาชกต13วตอไปตามล1าด13บทก1าหนดไว)

bull void remove() ndash เอาสมาชกต13วทพ$งถกรเทรนด)วย next() ออกไป ndash เรยกเมธอดนได)หน$งคร13งตอการเรยกใช) next() หน$งคร13ง ndash ถ)าต13วคอลลเคช13นถกเปลยนระหวางทก1าล13งลปด)วยวธอนท

ไมใชเมธอดน เราจะถอวาเมธอดนใช)ไมได)

การใช)งาน Iterator

bull เราลปแล)วเลอกพมพเฉพาะต13วเลขทมคามากกวาหน$งร)อย

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 currentNumber = itrnext() auto convert 6 if(currentNumbergt100)7 Systemoutprintln(currentNumber)8 9

การใช)งาน Iterator ทผด

bull อยาลมวาการลปแตละคร13งควรใช) next() แคคร13งเดยวเทาน13น มฉะน13นเราจะท1าเกนต1าแหนงทต)องการ

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 if(itrnext() gt100)6 Systemoutprintln(itrnext())7 8 เกน

for loop แบบพเศษ

bull bull IteratorltIntegergt itr = myCollectioniterator()bull for(Integer currentInt myCollection )bull if(currentIntintValue() gt100)bull Systemoutprintln(currentIntintValue())bull bull

ldquoส1าหร13บแตละจ1านวนเตมใน myCollectionrdquo

แตวา for loop แบบพเศษน13นไมสามารถใช)ได)ในกรณทต13วคอลเลคช13นต)องมการเปลยนแปลงระหวางการลป ด13งน13นการลปเอาสมาชกออกจากคอลเลคช13นกต)องใช)อเทอเรเตอรเทาน13น

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 12: Java Collection Framework

เมธอดตางๆของ Collection Interface

bull boolean add(E o) ndash พยายามท1าให)ม o อยในคอลเลคช13นน รเทรน true ถ)าการเรยกเมธอดน

ท1าให)ภายในคอลเลคช13นเปลยนไป รเทรน false ถ)าคอลเลคช13นนมกอปป7ไมได) และ ม o อยแล)ว

bull boolean addAll(Collectionlt extends Egt c) ndash เตมสมาชกจากคอลเลคช13น c ท13งหมดลงในคอลเลคช13นของเรา แต

เมธอดนจะถอวาใช)ไมได)ถ)า c ถกเปลยนแปลงระหวางทเมธอดนท1างานอย น13นกคอ c จะเปนคอลเลคช13นทเราใช)เรยกเมธอดนเองไมได)

ndash เมธอดนรเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

ndash พารามเตอร lt extends Egt หมายถ$งอะไรกได)ทเปนส13บคลาสของ E โดย E คอพารามเตอรของคอลเลคช13นทเรยกใช)เมธอดน อยาลมวาคลาสใดๆกเปนส13บคลาสของต13วม13นเอง

bull void clear() ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull void clear()ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull boolean contains(Object o) ndash รเทรน true ถ)าคอลเลคช13นนม o อย หรอพดได)อก

อยางวา รเทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าคอลเลคช13นนม สมาชกจากคอลเลคช13น

c อยท13 งหมด

bull boolean equals(Object o) ndash เปรยบเทยบออบเจกต o ก13บคอลเลคช13นนวาเทาก13นหรอ

ไม โดยพนฐานแล)ว นคอเมธอดทเอามาจากคลาส Object แตถ)าจะเขยนเมธอดนเอง เพอเปลยนให)เปนการเปรยบเทยบคาทอยในคอลเลคช13นกได)

ndash โครงสร)างข)อมล List ก13บ Set ของจาวาน13นได)เขยนเมธอดนข$นเองโดยก1าหนดให) List ต)องเทาก13บ List และ Set ต)องเทาก13บ Set เทาน13น ฉะน13นถ)าเราเขยนเมธอดนให)คลาสของเราเองซ$งไมใช List หรอ Set แล)วละก เมธอดของเราจะรเทรน false เมอน1าไปใช)ก13บ List หรอ set

ndash นอกจากนย13งไมสามารถสร)างคลาสซ$ง implement List ก13บ Set ในเวลาเดยวก13นได)

bull int hashCode() ndash รเทรนแฮชโค)ดของคอลเลคช13นน ถ)าเราโอเวอรไรด

equals() แล)วเราต)องโอเวอรไรด hashcode() ด)วย เพราะ c1equals(c2) ต)องหมายถ$ง c1hashCode()==c2hashCode()

bull boolean isEmpty() ndash รเทรน true ถ)าคอลเลคช13นนไมมสมาชก

bull IteratorltE gt iterator() ndash รเทรนอเทอเรเตอรทจะอนญาตให)เราดสมาชกใน

คอลเลคช13นนได) การเรยงของสมาชกน13นไมได)มการก1าหนดไว)ในช13นน

bull boolean remove(Object o) ndash เอาสมาชก e ซ$ง (o==null e==null oequals(e)) ออก

จากคอลเลคช13น ถ)ามอยในคอลเลคช13น ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() ) ทง ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() )

เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull Object [] toArray() ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมด ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วยbull ltTgt T[] toArray(T[] a)

ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมดndash ร13นไทมไทป4ของอารเรยทร เทรนให)เปนชนดเดยวก13บอารเรย a ndash ถ)าคอลเลคช13นของเราใส a ได) กจะเอาใส a แล)วรเทรน a เลย (สมาชกในด)าน

หล13งของ a ทมทเหลอกจะถกเซตเปน null )ndash มฉะน13นต)องสร)างอารเรยใหมซ$งขนาดใหญพอทจะเกบคอลเลคช13นของเราได) ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วย

Iterator ของ Collection

bull public Interface IteratorltEgthellipbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกให)ดได)อก (น13นคอ รเทรน true เมอ next() จะรเทรนสมาชกน13นเอง

bull E next() ndash รเทรนสมาชกต13วตอไปตามล1าด13บทก1าหนดไว)

bull void remove() ndash เอาสมาชกต13วทพ$งถกรเทรนด)วย next() ออกไป ndash เรยกเมธอดนได)หน$งคร13งตอการเรยกใช) next() หน$งคร13ง ndash ถ)าต13วคอลลเคช13นถกเปลยนระหวางทก1าล13งลปด)วยวธอนท

ไมใชเมธอดน เราจะถอวาเมธอดนใช)ไมได)

การใช)งาน Iterator

bull เราลปแล)วเลอกพมพเฉพาะต13วเลขทมคามากกวาหน$งร)อย

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 currentNumber = itrnext() auto convert 6 if(currentNumbergt100)7 Systemoutprintln(currentNumber)8 9

การใช)งาน Iterator ทผด

bull อยาลมวาการลปแตละคร13งควรใช) next() แคคร13งเดยวเทาน13น มฉะน13นเราจะท1าเกนต1าแหนงทต)องการ

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 if(itrnext() gt100)6 Systemoutprintln(itrnext())7 8 เกน

for loop แบบพเศษ

bull bull IteratorltIntegergt itr = myCollectioniterator()bull for(Integer currentInt myCollection )bull if(currentIntintValue() gt100)bull Systemoutprintln(currentIntintValue())bull bull

ldquoส1าหร13บแตละจ1านวนเตมใน myCollectionrdquo

แตวา for loop แบบพเศษน13นไมสามารถใช)ได)ในกรณทต13วคอลเลคช13นต)องมการเปลยนแปลงระหวางการลป ด13งน13นการลปเอาสมาชกออกจากคอลเลคช13นกต)องใช)อเทอเรเตอรเทาน13น

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 13: Java Collection Framework

bull void clear()ndash เอาสมาชกของคอลเลคช13นนออกไปให)หมด

bull boolean contains(Object o) ndash รเทรน true ถ)าคอลเลคช13นนม o อย หรอพดได)อก

อยางวา รเทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าคอลเลคช13นนม สมาชกจากคอลเลคช13น

c อยท13 งหมด

bull boolean equals(Object o) ndash เปรยบเทยบออบเจกต o ก13บคอลเลคช13นนวาเทาก13นหรอ

ไม โดยพนฐานแล)ว นคอเมธอดทเอามาจากคลาส Object แตถ)าจะเขยนเมธอดนเอง เพอเปลยนให)เปนการเปรยบเทยบคาทอยในคอลเลคช13นกได)

ndash โครงสร)างข)อมล List ก13บ Set ของจาวาน13นได)เขยนเมธอดนข$นเองโดยก1าหนดให) List ต)องเทาก13บ List และ Set ต)องเทาก13บ Set เทาน13น ฉะน13นถ)าเราเขยนเมธอดนให)คลาสของเราเองซ$งไมใช List หรอ Set แล)วละก เมธอดของเราจะรเทรน false เมอน1าไปใช)ก13บ List หรอ set

ndash นอกจากนย13งไมสามารถสร)างคลาสซ$ง implement List ก13บ Set ในเวลาเดยวก13นได)

bull int hashCode() ndash รเทรนแฮชโค)ดของคอลเลคช13นน ถ)าเราโอเวอรไรด

equals() แล)วเราต)องโอเวอรไรด hashcode() ด)วย เพราะ c1equals(c2) ต)องหมายถ$ง c1hashCode()==c2hashCode()

bull boolean isEmpty() ndash รเทรน true ถ)าคอลเลคช13นนไมมสมาชก

bull IteratorltE gt iterator() ndash รเทรนอเทอเรเตอรทจะอนญาตให)เราดสมาชกใน

คอลเลคช13นนได) การเรยงของสมาชกน13นไมได)มการก1าหนดไว)ในช13นน

bull boolean remove(Object o) ndash เอาสมาชก e ซ$ง (o==null e==null oequals(e)) ออก

จากคอลเลคช13น ถ)ามอยในคอลเลคช13น ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() ) ทง ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() )

เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull Object [] toArray() ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมด ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วยbull ltTgt T[] toArray(T[] a)

ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมดndash ร13นไทมไทป4ของอารเรยทร เทรนให)เปนชนดเดยวก13บอารเรย a ndash ถ)าคอลเลคช13นของเราใส a ได) กจะเอาใส a แล)วรเทรน a เลย (สมาชกในด)าน

หล13งของ a ทมทเหลอกจะถกเซตเปน null )ndash มฉะน13นต)องสร)างอารเรยใหมซ$งขนาดใหญพอทจะเกบคอลเลคช13นของเราได) ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วย

Iterator ของ Collection

bull public Interface IteratorltEgthellipbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกให)ดได)อก (น13นคอ รเทรน true เมอ next() จะรเทรนสมาชกน13นเอง

bull E next() ndash รเทรนสมาชกต13วตอไปตามล1าด13บทก1าหนดไว)

bull void remove() ndash เอาสมาชกต13วทพ$งถกรเทรนด)วย next() ออกไป ndash เรยกเมธอดนได)หน$งคร13งตอการเรยกใช) next() หน$งคร13ง ndash ถ)าต13วคอลลเคช13นถกเปลยนระหวางทก1าล13งลปด)วยวธอนท

ไมใชเมธอดน เราจะถอวาเมธอดนใช)ไมได)

การใช)งาน Iterator

bull เราลปแล)วเลอกพมพเฉพาะต13วเลขทมคามากกวาหน$งร)อย

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 currentNumber = itrnext() auto convert 6 if(currentNumbergt100)7 Systemoutprintln(currentNumber)8 9

การใช)งาน Iterator ทผด

bull อยาลมวาการลปแตละคร13งควรใช) next() แคคร13งเดยวเทาน13น มฉะน13นเราจะท1าเกนต1าแหนงทต)องการ

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 if(itrnext() gt100)6 Systemoutprintln(itrnext())7 8 เกน

for loop แบบพเศษ

bull bull IteratorltIntegergt itr = myCollectioniterator()bull for(Integer currentInt myCollection )bull if(currentIntintValue() gt100)bull Systemoutprintln(currentIntintValue())bull bull

ldquoส1าหร13บแตละจ1านวนเตมใน myCollectionrdquo

แตวา for loop แบบพเศษน13นไมสามารถใช)ได)ในกรณทต13วคอลเลคช13นต)องมการเปลยนแปลงระหวางการลป ด13งน13นการลปเอาสมาชกออกจากคอลเลคช13นกต)องใช)อเทอเรเตอรเทาน13น

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 14: Java Collection Framework

bull boolean equals(Object o) ndash เปรยบเทยบออบเจกต o ก13บคอลเลคช13นนวาเทาก13นหรอ

ไม โดยพนฐานแล)ว นคอเมธอดทเอามาจากคลาส Object แตถ)าจะเขยนเมธอดนเอง เพอเปลยนให)เปนการเปรยบเทยบคาทอยในคอลเลคช13นกได)

ndash โครงสร)างข)อมล List ก13บ Set ของจาวาน13นได)เขยนเมธอดนข$นเองโดยก1าหนดให) List ต)องเทาก13บ List และ Set ต)องเทาก13บ Set เทาน13น ฉะน13นถ)าเราเขยนเมธอดนให)คลาสของเราเองซ$งไมใช List หรอ Set แล)วละก เมธอดของเราจะรเทรน false เมอน1าไปใช)ก13บ List หรอ set

ndash นอกจากนย13งไมสามารถสร)างคลาสซ$ง implement List ก13บ Set ในเวลาเดยวก13นได)

bull int hashCode() ndash รเทรนแฮชโค)ดของคอลเลคช13นน ถ)าเราโอเวอรไรด

equals() แล)วเราต)องโอเวอรไรด hashcode() ด)วย เพราะ c1equals(c2) ต)องหมายถ$ง c1hashCode()==c2hashCode()

bull boolean isEmpty() ndash รเทรน true ถ)าคอลเลคช13นนไมมสมาชก

bull IteratorltE gt iterator() ndash รเทรนอเทอเรเตอรทจะอนญาตให)เราดสมาชกใน

คอลเลคช13นนได) การเรยงของสมาชกน13นไมได)มการก1าหนดไว)ในช13นน

bull boolean remove(Object o) ndash เอาสมาชก e ซ$ง (o==null e==null oequals(e)) ออก

จากคอลเลคช13น ถ)ามอยในคอลเลคช13น ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() ) ทง ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() )

เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull Object [] toArray() ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมด ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วยbull ltTgt T[] toArray(T[] a)

ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมดndash ร13นไทมไทป4ของอารเรยทร เทรนให)เปนชนดเดยวก13บอารเรย a ndash ถ)าคอลเลคช13นของเราใส a ได) กจะเอาใส a แล)วรเทรน a เลย (สมาชกในด)าน

หล13งของ a ทมทเหลอกจะถกเซตเปน null )ndash มฉะน13นต)องสร)างอารเรยใหมซ$งขนาดใหญพอทจะเกบคอลเลคช13นของเราได) ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วย

Iterator ของ Collection

bull public Interface IteratorltEgthellipbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกให)ดได)อก (น13นคอ รเทรน true เมอ next() จะรเทรนสมาชกน13นเอง

bull E next() ndash รเทรนสมาชกต13วตอไปตามล1าด13บทก1าหนดไว)

bull void remove() ndash เอาสมาชกต13วทพ$งถกรเทรนด)วย next() ออกไป ndash เรยกเมธอดนได)หน$งคร13งตอการเรยกใช) next() หน$งคร13ง ndash ถ)าต13วคอลลเคช13นถกเปลยนระหวางทก1าล13งลปด)วยวธอนท

ไมใชเมธอดน เราจะถอวาเมธอดนใช)ไมได)

การใช)งาน Iterator

bull เราลปแล)วเลอกพมพเฉพาะต13วเลขทมคามากกวาหน$งร)อย

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 currentNumber = itrnext() auto convert 6 if(currentNumbergt100)7 Systemoutprintln(currentNumber)8 9

การใช)งาน Iterator ทผด

bull อยาลมวาการลปแตละคร13งควรใช) next() แคคร13งเดยวเทาน13น มฉะน13นเราจะท1าเกนต1าแหนงทต)องการ

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 if(itrnext() gt100)6 Systemoutprintln(itrnext())7 8 เกน

for loop แบบพเศษ

bull bull IteratorltIntegergt itr = myCollectioniterator()bull for(Integer currentInt myCollection )bull if(currentIntintValue() gt100)bull Systemoutprintln(currentIntintValue())bull bull

ldquoส1าหร13บแตละจ1านวนเตมใน myCollectionrdquo

แตวา for loop แบบพเศษน13นไมสามารถใช)ได)ในกรณทต13วคอลเลคช13นต)องมการเปลยนแปลงระหวางการลป ด13งน13นการลปเอาสมาชกออกจากคอลเลคช13นกต)องใช)อเทอเรเตอรเทาน13น

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 15: Java Collection Framework

bull int hashCode() ndash รเทรนแฮชโค)ดของคอลเลคช13นน ถ)าเราโอเวอรไรด

equals() แล)วเราต)องโอเวอรไรด hashcode() ด)วย เพราะ c1equals(c2) ต)องหมายถ$ง c1hashCode()==c2hashCode()

bull boolean isEmpty() ndash รเทรน true ถ)าคอลเลคช13นนไมมสมาชก

bull IteratorltE gt iterator() ndash รเทรนอเทอเรเตอรทจะอนญาตให)เราดสมาชกใน

คอลเลคช13นนได) การเรยงของสมาชกน13นไมได)มการก1าหนดไว)ในช13นน

bull boolean remove(Object o) ndash เอาสมาชก e ซ$ง (o==null e==null oequals(e)) ออก

จากคอลเลคช13น ถ)ามอยในคอลเลคช13น ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() ) ทง ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() )

เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull Object [] toArray() ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมด ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วยbull ltTgt T[] toArray(T[] a)

ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมดndash ร13นไทมไทป4ของอารเรยทร เทรนให)เปนชนดเดยวก13บอารเรย a ndash ถ)าคอลเลคช13นของเราใส a ได) กจะเอาใส a แล)วรเทรน a เลย (สมาชกในด)าน

หล13งของ a ทมทเหลอกจะถกเซตเปน null )ndash มฉะน13นต)องสร)างอารเรยใหมซ$งขนาดใหญพอทจะเกบคอลเลคช13นของเราได) ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วย

Iterator ของ Collection

bull public Interface IteratorltEgthellipbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกให)ดได)อก (น13นคอ รเทรน true เมอ next() จะรเทรนสมาชกน13นเอง

bull E next() ndash รเทรนสมาชกต13วตอไปตามล1าด13บทก1าหนดไว)

bull void remove() ndash เอาสมาชกต13วทพ$งถกรเทรนด)วย next() ออกไป ndash เรยกเมธอดนได)หน$งคร13งตอการเรยกใช) next() หน$งคร13ง ndash ถ)าต13วคอลลเคช13นถกเปลยนระหวางทก1าล13งลปด)วยวธอนท

ไมใชเมธอดน เราจะถอวาเมธอดนใช)ไมได)

การใช)งาน Iterator

bull เราลปแล)วเลอกพมพเฉพาะต13วเลขทมคามากกวาหน$งร)อย

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 currentNumber = itrnext() auto convert 6 if(currentNumbergt100)7 Systemoutprintln(currentNumber)8 9

การใช)งาน Iterator ทผด

bull อยาลมวาการลปแตละคร13งควรใช) next() แคคร13งเดยวเทาน13น มฉะน13นเราจะท1าเกนต1าแหนงทต)องการ

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 if(itrnext() gt100)6 Systemoutprintln(itrnext())7 8 เกน

for loop แบบพเศษ

bull bull IteratorltIntegergt itr = myCollectioniterator()bull for(Integer currentInt myCollection )bull if(currentIntintValue() gt100)bull Systemoutprintln(currentIntintValue())bull bull

ldquoส1าหร13บแตละจ1านวนเตมใน myCollectionrdquo

แตวา for loop แบบพเศษน13นไมสามารถใช)ได)ในกรณทต13วคอลเลคช13นต)องมการเปลยนแปลงระหวางการลป ด13งน13นการลปเอาสมาชกออกจากคอลเลคช13นกต)องใช)อเทอเรเตอรเทาน13น

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 16: Java Collection Framework

bull boolean remove(Object o) ndash เอาสมาชก e ซ$ง (o==null e==null oequals(e)) ออก

จากคอลเลคช13น ถ)ามอยในคอลเลคช13น ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() ) ทง ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย equals() )

เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull Object [] toArray() ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมด ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วยbull ltTgt T[] toArray(T[] a)

ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมดndash ร13นไทมไทป4ของอารเรยทร เทรนให)เปนชนดเดยวก13บอารเรย a ndash ถ)าคอลเลคช13นของเราใส a ได) กจะเอาใส a แล)วรเทรน a เลย (สมาชกในด)าน

หล13งของ a ทมทเหลอกจะถกเซตเปน null )ndash มฉะน13นต)องสร)างอารเรยใหมซ$งขนาดใหญพอทจะเกบคอลเลคช13นของเราได) ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วย

Iterator ของ Collection

bull public Interface IteratorltEgthellipbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกให)ดได)อก (น13นคอ รเทรน true เมอ next() จะรเทรนสมาชกน13นเอง

bull E next() ndash รเทรนสมาชกต13วตอไปตามล1าด13บทก1าหนดไว)

bull void remove() ndash เอาสมาชกต13วทพ$งถกรเทรนด)วย next() ออกไป ndash เรยกเมธอดนได)หน$งคร13งตอการเรยกใช) next() หน$งคร13ง ndash ถ)าต13วคอลลเคช13นถกเปลยนระหวางทก1าล13งลปด)วยวธอนท

ไมใชเมธอดน เราจะถอวาเมธอดนใช)ไมได)

การใช)งาน Iterator

bull เราลปแล)วเลอกพมพเฉพาะต13วเลขทมคามากกวาหน$งร)อย

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 currentNumber = itrnext() auto convert 6 if(currentNumbergt100)7 Systemoutprintln(currentNumber)8 9

การใช)งาน Iterator ทผด

bull อยาลมวาการลปแตละคร13งควรใช) next() แคคร13งเดยวเทาน13น มฉะน13นเราจะท1าเกนต1าแหนงทต)องการ

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 if(itrnext() gt100)6 Systemoutprintln(itrnext())7 8 เกน

for loop แบบพเศษ

bull bull IteratorltIntegergt itr = myCollectioniterator()bull for(Integer currentInt myCollection )bull if(currentIntintValue() gt100)bull Systemoutprintln(currentIntintValue())bull bull

ldquoส1าหร13บแตละจ1านวนเตมใน myCollectionrdquo

แตวา for loop แบบพเศษน13นไมสามารถใช)ได)ในกรณทต13วคอลเลคช13นต)องมการเปลยนแปลงระหวางการลป ด13งน13นการลปเอาสมาชกออกจากคอลเลคช13นกต)องใช)อเทอเรเตอรเทาน13น

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 17: Java Collection Framework

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull Object [] toArray() ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมด ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วยbull ltTgt T[] toArray(T[] a)

ndash รเทรนอารเรยซ$งใสสมาชกของคอลเลคช13นนไว)ท13 งหมดndash ร13นไทมไทป4ของอารเรยทร เทรนให)เปนชนดเดยวก13บอารเรย a ndash ถ)าคอลเลคช13นของเราใส a ได) กจะเอาใส a แล)วรเทรน a เลย (สมาชกในด)าน

หล13งของ a ทมทเหลอกจะถกเซตเปน null )ndash มฉะน13นต)องสร)างอารเรยใหมซ$งขนาดใหญพอทจะเกบคอลเลคช13นของเราได) ndash ถ)ามการก1าหนดล1าด13บของสมาชกด)วยอเทอเรเตอรไว)แล)ว ล1าด13บสมาชกใน

อารเรยกต)องเปนไปตามน13นด)วย

Iterator ของ Collection

bull public Interface IteratorltEgthellipbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกให)ดได)อก (น13นคอ รเทรน true เมอ next() จะรเทรนสมาชกน13นเอง

bull E next() ndash รเทรนสมาชกต13วตอไปตามล1าด13บทก1าหนดไว)

bull void remove() ndash เอาสมาชกต13วทพ$งถกรเทรนด)วย next() ออกไป ndash เรยกเมธอดนได)หน$งคร13งตอการเรยกใช) next() หน$งคร13ง ndash ถ)าต13วคอลลเคช13นถกเปลยนระหวางทก1าล13งลปด)วยวธอนท

ไมใชเมธอดน เราจะถอวาเมธอดนใช)ไมได)

การใช)งาน Iterator

bull เราลปแล)วเลอกพมพเฉพาะต13วเลขทมคามากกวาหน$งร)อย

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 currentNumber = itrnext() auto convert 6 if(currentNumbergt100)7 Systemoutprintln(currentNumber)8 9

การใช)งาน Iterator ทผด

bull อยาลมวาการลปแตละคร13งควรใช) next() แคคร13งเดยวเทาน13น มฉะน13นเราจะท1าเกนต1าแหนงทต)องการ

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 if(itrnext() gt100)6 Systemoutprintln(itrnext())7 8 เกน

for loop แบบพเศษ

bull bull IteratorltIntegergt itr = myCollectioniterator()bull for(Integer currentInt myCollection )bull if(currentIntintValue() gt100)bull Systemoutprintln(currentIntintValue())bull bull

ldquoส1าหร13บแตละจ1านวนเตมใน myCollectionrdquo

แตวา for loop แบบพเศษน13นไมสามารถใช)ได)ในกรณทต13วคอลเลคช13นต)องมการเปลยนแปลงระหวางการลป ด13งน13นการลปเอาสมาชกออกจากคอลเลคช13นกต)องใช)อเทอเรเตอรเทาน13น

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 18: Java Collection Framework

Iterator ของ Collection

bull public Interface IteratorltEgthellipbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกให)ดได)อก (น13นคอ รเทรน true เมอ next() จะรเทรนสมาชกน13นเอง

bull E next() ndash รเทรนสมาชกต13วตอไปตามล1าด13บทก1าหนดไว)

bull void remove() ndash เอาสมาชกต13วทพ$งถกรเทรนด)วย next() ออกไป ndash เรยกเมธอดนได)หน$งคร13งตอการเรยกใช) next() หน$งคร13ง ndash ถ)าต13วคอลลเคช13นถกเปลยนระหวางทก1าล13งลปด)วยวธอนท

ไมใชเมธอดน เราจะถอวาเมธอดนใช)ไมได)

การใช)งาน Iterator

bull เราลปแล)วเลอกพมพเฉพาะต13วเลขทมคามากกวาหน$งร)อย

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 currentNumber = itrnext() auto convert 6 if(currentNumbergt100)7 Systemoutprintln(currentNumber)8 9

การใช)งาน Iterator ทผด

bull อยาลมวาการลปแตละคร13งควรใช) next() แคคร13งเดยวเทาน13น มฉะน13นเราจะท1าเกนต1าแหนงทต)องการ

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 if(itrnext() gt100)6 Systemoutprintln(itrnext())7 8 เกน

for loop แบบพเศษ

bull bull IteratorltIntegergt itr = myCollectioniterator()bull for(Integer currentInt myCollection )bull if(currentIntintValue() gt100)bull Systemoutprintln(currentIntintValue())bull bull

ldquoส1าหร13บแตละจ1านวนเตมใน myCollectionrdquo

แตวา for loop แบบพเศษน13นไมสามารถใช)ได)ในกรณทต13วคอลเลคช13นต)องมการเปลยนแปลงระหวางการลป ด13งน13นการลปเอาสมาชกออกจากคอลเลคช13นกต)องใช)อเทอเรเตอรเทาน13น

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 19: Java Collection Framework

การใช)งาน Iterator

bull เราลปแล)วเลอกพมพเฉพาะต13วเลขทมคามากกวาหน$งร)อย

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 currentNumber = itrnext() auto convert 6 if(currentNumbergt100)7 Systemoutprintln(currentNumber)8 9

การใช)งาน Iterator ทผด

bull อยาลมวาการลปแตละคร13งควรใช) next() แคคร13งเดยวเทาน13น มฉะน13นเราจะท1าเกนต1าแหนงทต)องการ

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 if(itrnext() gt100)6 Systemoutprintln(itrnext())7 8 เกน

for loop แบบพเศษ

bull bull IteratorltIntegergt itr = myCollectioniterator()bull for(Integer currentInt myCollection )bull if(currentIntintValue() gt100)bull Systemoutprintln(currentIntintValue())bull bull

ldquoส1าหร13บแตละจ1านวนเตมใน myCollectionrdquo

แตวา for loop แบบพเศษน13นไมสามารถใช)ได)ในกรณทต13วคอลเลคช13นต)องมการเปลยนแปลงระหวางการลป ด13งน13นการลปเอาสมาชกออกจากคอลเลคช13นกต)องใช)อเทอเรเตอรเทาน13น

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 20: Java Collection Framework

การใช)งาน Iterator ทผด

bull อยาลมวาการลปแตละคร13งควรใช) next() แคคร13งเดยวเทาน13น มฉะน13นเราจะท1าเกนต1าแหนงทต)องการ

1 2 IteratorltIntegergt itr = myCollectioniterator()3 int currentNumber4 while(itrhasNext())5 if(itrnext() gt100)6 Systemoutprintln(itrnext())7 8 เกน

for loop แบบพเศษ

bull bull IteratorltIntegergt itr = myCollectioniterator()bull for(Integer currentInt myCollection )bull if(currentIntintValue() gt100)bull Systemoutprintln(currentIntintValue())bull bull

ldquoส1าหร13บแตละจ1านวนเตมใน myCollectionrdquo

แตวา for loop แบบพเศษน13นไมสามารถใช)ได)ในกรณทต13วคอลเลคช13นต)องมการเปลยนแปลงระหวางการลป ด13งน13นการลปเอาสมาชกออกจากคอลเลคช13นกต)องใช)อเทอเรเตอรเทาน13น

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 21: Java Collection Framework

for loop แบบพเศษ

bull bull IteratorltIntegergt itr = myCollectioniterator()bull for(Integer currentInt myCollection )bull if(currentIntintValue() gt100)bull Systemoutprintln(currentIntintValue())bull bull

ldquoส1าหร13บแตละจ1านวนเตมใน myCollectionrdquo

แตวา for loop แบบพเศษน13นไมสามารถใช)ได)ในกรณทต13วคอลเลคช13นต)องมการเปลยนแปลงระหวางการลป ด13งน13นการลปเอาสมาชกออกจากคอลเลคช13นกต)องใช)อเทอเรเตอรเทาน13น

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 22: Java Collection Framework

ต13วอยางการลปเอาของออกจาก Collection

1 2 int currentNumber3 for(IteratorltIntegergt itr = 4 myCollectioniterator() itrhasNext() )5 currentNumber = itrnext() auto convert 6 if(currentNumberlt100)7 itrremove()8 9

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 23: Java Collection Framework

List Interface bull ลสตของจาวาคอทเกบของเรยงก13น bull โดยสามารถเข)าถ$งของแตละชนโดยการใช)ด13ชน (index) ได) bull ด13ชนน13นมคาเรมจากศนย bull ภายในลสตอนญาตให)มของซ1าก13นได) bull สงทเปนลสตม13กม null เปนสมาชกได) bull ลสตอนเตอรเฟสมอเทอเรเตอรของม13นเองเรยกวา ลสตอเท

อเรเตอร (ListIterator) ซ$งมเมธอดส1าหร13บการใสของและเอาของออกจากลสต รวมท13งสามารถอนญาตการลปได)สองทศทางอกด)วย

bull ลสตเปนอนเตอรเฟส ด13งน13นโครงสร)างภายในอาจสร)างข$นมาจากอะไรกได)

bull จาวามคลาสแอบสแตรกลสต (AbstractList) เปนส13บคลาสของลสตซ$ง แอบสแตรกลสต อมพลเม)นทโค)ดของลสตบางสวน นอกน13นจะเปนหน)าทของส13บคลาสของแอบสแตรกลสตอกทหน$ง ซ$งจรงๆแล)วมสองคลาสคอ อารเรยลสต (ArrayList) ก13บลงคลสต(LinkedList)

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 24: Java Collection Framework

Collection Interface

List Interface

ArrayList LinkedList

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 25: Java Collection Framework

เมธอดของ List Interface

bull boolean add(E o) ndash ใส o ไปทท)ายลสต ลสตทเราสร)างข$นอาจก1าหนดชนด

ของข)อมลทใสได)เอาไว) เชน ไมร13บคา null หรอไมร13บข)อมลบางชนด เอกสารของลสตแตละชนดควรบอกถ$งชนดของข)อมลทไมร13บด)วย รเทรน true ถ)าการเรยกเมธอดนท1าให)ภายในคอลเลคช13นเปลยนไป

bull void add(int index E element) ndash ใส element เข)าไปทต1าแหนงท index เลอนสมาชก

ในลสตต13วทเคยอยตรงน13น รวมท13งสมาชกต13วถ13ดไปอนๆ ไปทางขวาต13วละต1าแหนง

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 26: Java Collection Framework

bull boolean addAll(Collectionlt extends Egt c) ndash ใสของใน c ตอท)ายลสต ล1าด13บทใสน13นเปนไปตามอเทอเรเตอรของ

c ndash เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)เมธอด

น เชนเมอ c คอต13วลสตเอง ndash รเทรน true ถ)ามการเตมสมาชกลงไปจรง

bull boolean addAll(int index Collectionlt extends Egt c) ndash ใสของใน c ลงไปในลสต ณ ต1าแหนงทถกก1าหนดโดย ล1าด13บทใส

น13นเปนไปตามอเทอเรเตอรของ c ndash เลอนสมาชกในลสตต13วทเคยอยต1าแหนงน13น รวมท13งสมาชกต13วถ13ด

ไปอนๆ ไปทางขวา เมธอดนจะใช)ไมได)ถ)า c ถกเปลยนแปลงในระหวางทเรยกใช)

bull void clear() ndash ท1าให)ลสตนวาง

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 27: Java Collection Framework

bull boolean contains(Object o) ndash รเทรน true ถ)าลสตนม o อย หรอพดได)อกอยางวา ร

เทรน true กตอเมอคอลเลคช13นนมสมาชก e ซ$ง (o==null e==null oequals(e))

bull boolean containsAll(Collectionltgt c) ndash รเทรน true ถ)าลสตนม สมาชกจากคอลเลคช13น c อย

ท13 งหมดbull boolean equals(Object o)

ndash เปรยบเทยบออบเจกต o ก13บลสตนวาเทาก13นหรอไม ndash รเทรน true ถ)า o กเปนลสต ลสตของเราก13บ o มขนาด

เทาก13น และมสมาชกเหมอนก13น (เทยบด)วยเมธอด equals() ) เรยงก13นด)วยล1าด13บเดยวก13นทกประการ

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 28: Java Collection Framework

bull E get(int index) ndash รเทรนสมาชก ณ ต1าแหนงทบอกด)วย index

bull int hashCode() ndash รเทรนแฮชโค)ดของลสตน โดยมสตรวา hashCode = 1Iterator i = listiterator()while (ihasNext())

Object obj = inext() hashCode = 31hashCode + (obj==null 0 objhashCode())

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 29: Java Collection Framework

bull int indexOf(Object o) ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงแรก หรอ - 1

ถ)า o ไมได)อยในลสตนbull boolean isEmpty()

ndash รเทรน true ถ)าลสตนเปนลสตวางbull IteratorltE gt iterator()

ndash รเทรนอเทอเรเตอรbull int lastIndexOf(Object o)

ndash รเทรนต1าแหนงทม o อยเปนต1าแหนงสดท)าย หรอ - 1 ถ)า o ไมได)อยในลสตน

bull ListIteratorltE gt listIterator() ndash รเทรนลสตอเทอเรเตอร

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 30: Java Collection Framework

bull ListIteratorltE gt listIterator(int index) ndash รเทรนลสตอเทอเรเตอร โดยให)ต1าแหนงทสนใจเรมจากต1าแหนง

index นจะเปนต1าแหนงทเมธอด next() รเทรนมาเปนต1าแหนงแรก

ndash สวนการเรยก previous() คร13งแรกจากสถานะนจะรเทรนสมาชกต13วทมต1าแหนงน)อยกวานหน$งต1าแหนง

bull E remove(int index) ndash เอาสมาชกทต1าแหนง index ออกจากลสต รเทรนสมาชกน13น

ออกมา สวนสมาชกต13วอนกเลอนมาแทนทต1าแหนงของต13วทออกไปน

bull boolean remove(Object o) ndash เอาสมาชกทคาเทาก13บ o (เทยบด)วย equals() ) อยเปน

ต1าแหนงแรกออกจากลสตไป ndash ถ)า o ไมได)อยในลสตนกจะไมมอะไรเปลยนแปลง ndash รเทรน true ถ)ามสมาชกทมคาเทาก13บ o อยในลสตจรงๆ

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 31: Java Collection Framework

bull boolean removeAll(Collectionltgt c) ndash เอาของทอยใน c ออกจากลสตไปให)หมด ndash รเทรน true ถ)าลสตเกดการเปลยนแปลง

bull boolean retainAll(Collectionltgt c) ndash เอาสมาชกทเหมอนก13บสมาชกใน c (โดยเทยบด)วย

equals() ) เหลอไว) นอกน13นลบทงหมด ndash รเทรน true ถ)ามสมาชกถกเอาออกไปจรงๆ ndash c ห)ามเปน null ไมง13 นจะ throw exception

bull E set(int index E element) ndash เปลยนสมาชก ณ ต1าแหนง index ให)เปน element ndash รเทรนสมาชกต13วทอยกอนจะถกเปลยน

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 32: Java Collection Framework

bull int size() ndash รเทรนจ1านวนสมาชกในคอลเลคช13นน ถ)าจ1านวนสมาชกมากกวา

IntegerMAX_VALUE ให)รเทรน IntegerMAX_VALUE

bull ListltEgt subList(int fromIndex int toIndex) ndash รเทรนลสตยอย น13บรวมต13งแตต1าแหนง fromIndex จนถ$ง

ต1าแหนง toIndex-1 (ถ)า fromIndex เทาก13บ toIndex เมธอดนจะรเทรนลสตวาง)

ndash การเปลยนแปลงในลสตยอยจะเหนผลทลสตใหญด)วย และการเปลยนแปลงทลสตใหญกจะเหนผลทลสตยอย

ndash ลสตยอยทร เทรนมาสามารถใช)เมธอดได)แบบลสตใหญต13วทเรยกใช)เมธอดน

ndash เราสามารถใช)ลสตยอยในการท1างานเฉพาะสวนได)เชน listsubList(from to)clear()

ndash ถ)าลสตต13วใหญถกเปลยนขนาดหรอถกท1าให)ใช)งานอเทอเรเตอรไมได)ผล เมธอดนกจะใช)ไมได)

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 33: Java Collection Framework

bull Object [] toArray() ndash เหมอนก13บเมธอดของคอลเลคช13น

bull ltTgt T[] toArray(T[] a) ndash เหมอนก13บเมธอดของคอลเลคช13น

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 34: Java Collection Framework

List Iterator bull void add(E o)

ndash ใส o ลงไปในลสตbull boolean hasNext()

ndash รเทรน true ถ)าย13งมสมาชกของลสตให)ดอย ในทศทางทไปข)างหน)า (น13นคอ ถ)าการเรยก next() คร13งตอไปรเทรนสมาชกในลสตมา)

bull boolean hasPrevious() ndash รเทรน true ถ)าย13งมสมาชกให)ดในทศทางย)อนกล13บ (น13นคอ ถ)า

การเรยก previous() คร13งตอไปรเทรนสมาชกในลสตมา)bull E next()

ndash รเทรนสมาชกต13วถ13ดไปในลสต ndash ถ)าเราเรยก next() แล)ว เรยก previous() สล13บก13นคร13งตอคร13ง

จะได)สมาชกต13วเดยวก13นเปนผลล13พธตลอด

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 35: Java Collection Framework

bull int nextIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

next() หรอถ)าอยทต1าแหนงสดท)ายของลสตแล)วกให)รเทรนขนาดของลสต

bull E previous() ndash รเทรนสมาชกต13วกอนในลสต

bull int previousIndex() ndash รเทรนคาด13ชนของสมาชกต13วทจะเปนค1าตอบของ

previous() หรอถ)าอยทต1าแหนงแรกของลสตแล)วกให)รเทรน-1

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 36: Java Collection Framework

bull void remove() ndash เอาสมาชกต13วทพ$งเปนผลล13พธของ next() หรอ

previous() ออกจากลสต ndash เมธอดนใช)สล13บก13บ next() หรอ previous()ได)คร13งตอ

คร13งเทาน13น ndash จะต)องไมมการเรยกเมธอด ListIteratoradd()

ระหวางการเรยก next() หรอ previous() ก13บเมธอดนbull void set(E o)

ndash เอา o แทนทสมาชกต13วท)ายสดทพ$งถกรเทรนเปนค1าตอบของ next() หรอ previous()

ndash นอกจากนจะต)องไมมการเรยกเมธอด ListIteratoradd() และ ListIteratorremove() ระหวางการเรยก next() หรอ previous() ก13บเมธอดน

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 37: Java Collection Framework

ต13วอยางการลปเดนหน)าbull โปรแกรมนแทนท val ด)วย new

1

2 ListIteratorltDoublegt i

3 for(i= elistIterator()ihasNext() )

4 if(valequals(inext()))

5 iset(new)

6

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 38: Java Collection Framework

ต13วอยางการลปถอยหล13ง1

2 ListIteratorltDoublegt i

3 for(i= elistIterator(esize())ihasPrevious() )

4 Systemoutprintln(iprevious())

5

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 39: Java Collection Framework

Set Interface

Collection Interface

Set Interface

TreeSet HashSet

AbstractSet Class

เหมอน Collection แตห)ามมสมาชกซ1า

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 40: Java Collection Framework

ฯลฯ bull สร)างเซตข$นจาก Collection

ndash CollectionltDoublegt d = new HashSet(c)

bull TreeSet น13นภายในสร)างข$นมาด)วยโครงสร)างต)นไม) ndash ล1าด13บในการไลดสมาชกด)วยอเทอเรเตอรจะเรยงเปน

รปแบบทแนนอน bull HashSet น13นสร)างข$นมาด)วยโครงสร)างข)อมลตา

รางแฮช ndash ซ$งจะมการเรยงของสมาชกภายในคอนข)างสม

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 41: Java Collection Framework

เมธอดทท1างานตางจากในคอลเลคช13น bull boolean add(E o)

ndash เตมสมาชกใหมลงไปในเซตถ)าม13นไมซ1าก13บสมาชกทมอยแล)ว ndash น13นคอ เตม o ลงไปในเซตถ)าไมม e ซ$ง (o==null e==null

oequals(e)) ndash ถ)ามสมาชกต13วทเราต)องการเตมอยในเซตแล)ว เซตจะไม

เปลยนแปลงและเมธอดนจะรเทรนfalse

bull boolean addAll(Collectionlt extends Egt c)ndash เหมอนก13บเมธอดของ Collection Interface เพยงแตจะไม

เตมสมาชกทซ1า น13นคอ ถ)า c เปนเซต เรากจะได)การยเนยนของสองเซตน13นเอง

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 42: Java Collection Framework

bull boolean equals(Object o) ndash รเทรน true ถ)า o เปนเซตทมขนาดเดยวก13บเซตทเรยก

ใช)เมธอดนและทกสมาชกทอยใน o อยในเซตทเรยกใช)เมธอดน

ndash อยาลมวา o ต)องเปน Set ด)วยbull int hashCode()

ndash รเทรนคาแฮชโค)ด ซ$งแฮชโค)ดของเซต คอผลบวกของแฮชโค)ดจากสมาชกในเซต

ndash (แฮชโค)ดของ null คอ 0)

bull IteratorltEgt iterator()ndash รเทรนอเทอเรเตอร การเรยงของสมาชกจะข$นอยก13บ

วาจรงๆแล)วเซตนเปนแฮชเซตหรอทรเซต

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 43: Java Collection Framework

ต13วอยาง - หาค1าซ1าและค1าทใช)ในประโยค

1 import javautil2 public class FindDups 3 public static void main(String args[]) 4 Set s = new HashSet() 5 for (int i=0 iltargslength i++) 6 if (sadd(args[i])) เตมสมาชก ถ)าไมส1าเรจจะร

เทรนfalse 7 Systemoutprintln(ค1าซ1า +args[i])8 9 Systemoutprintln(ค1าทใช)ม + s)10 11

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
Page 44: Java Collection Framework

ต13วอยาง ndash Intersect หลกเลยงการเปลยนเซตต)นฉบ13บ

1

2 public static Set union(Set s1 Set s2)

3 Set intersect = new HashSet(s1)

4 intersectretainAll(s2)

5 return intersect

6

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44