java 2 java collections - maejo university · arrays...
TRANSCRIPT
Java 2
Java Collections
By Assoc. Prof. Rangsit Sirirangsi
Collections
Collection (บางครงถกเรยกวา container) ใชสาหรบจดกลมสมาชกในรป
ของขอมลใหอยในหนวยเดยวกน
Collection ประกอบดวยบรการตาง ๆ เชน การเพมหรอลบขอมล และการ
จดการกบสมาชกตาง ๆ ภายใน collection
Collection ในจาวาไดถกจดเตรยมไวในรปของอนเตอรเฟสและคลาสตาง ๆ
ภายในแพคเกจ java.util
การใช Collection ในทางปฏบตผใชเพยงแตเรยกใชเมธอดใหเหมาะสม
เทานนกพอ ไมจาเปนตองรถงการทางานภายใน
สวน Collection Framework เปนการรวบรวมสถาปตยกรรมทใชสาหรบ
การนาเสนอและเขาถงสมาชกภายใน Collections
Storing data
ขอมลสามารถจดเกบในรปของโครงสรางขอมลไดหลายชนด เชน
Array Lists
Sequential Lists
Hash tables
จดเกบโดยใช key ทสามารถคานวณไดจากขอมลทตองการ
Trees
เชนขอมลแบบ Binary tree
● ‘h’ ● ‘e’ ● ‘l’ ● ‘l’ ● ‘o’ ●
‘h’ ‘e’ ‘l’ ‘l’ ‘o’
Benefits of a Collection Framework
ลดเวลาในการโปรแกรม
เปนโครงสรางขอมลและอลกอลทมสทมประสทธภาพ
เพมความเรวและคณภาพของการโปรแกรม
ลดเวลาในการเรยนร APIs ใหม ๆ
เปน Framework ทมลกษณะเปนหนงเดยวกน
ใชเปน APIs สาหรบโปรแกรมประยกตตาง ๆ
กระตนใหเกดการนากลบมาใชใหมของซอฟตแวร
โครงสรางขอมลและอลกอลทมสแบบใหม ๆ
The Java Collection API
Collection: ประกอบไปดวย interfaces ตาง ๆ
Set: ไมสามารถเกบคาซ ากน และลาดบไมใชสงสาคญ
List: เกบคาซ ากนไดลาดบเปนสงสาคญ
Map: ถอเปน “dictionary” ทมคาเกยวของกบ keys และ values ลาดบเปน
สงทไมสาคญ
Java Collections
Object(java.lang)
AbstractList
LinkedHashMap
HashMap
AbstractSequentialList
ArrayList
Stack
Vector
LinkedHashSet
HashSet
TreeSet
AbstractCollection
Collection
List
AbstractSet
Set
SortedSet
Map
SortedMap
TreeMapLinkedList
AbstractMap
Dictionary
Map
Hashtable
InterfacesImplementations
Hash table Resizablearray
Tree(sorted)
Linkedlist
Hash table + Linked list
Set HashSet TreeSet(sorted) LinkedHashSet
List ArrayList LinkedList
Queue
Map HashMap TreeMap(sorted) LinkedHashMap
General Purpose Implementations
Interface: Collection
public interface Collection {// Basic Operationsint size();boolean isEmpty();boolean contains(Object element);boolean add(Object element); boolean remove(Object element); Iterator iterator();
// Bulk Operationsboolean containsAll(Collection c);boolean addAll(Collection c); boolean removeAll(Collection c); boolean retainAll(Collection c); void clear();
// Array OperationsObject[] toArray();Object[] toArray(Object a[]);
}
Collection ถอเปน interface หลกทถก
นาไปใชสบทอดตามลาดบชนของ
Collection
สามารถใชในการจดเกบ
ขอมลทซาหรอไมกได
ขอมลทเรยงลาดบหรอไมกได
สรปเมธอดทใชใน interface Collection
boolean add(O e) ใชสาหรบการเพมสมาชกลงใน collection โดยเมธอดคนคา false ในกรณทไมสามารถเพมสมาชกได
boolean addAll(Collection c)ใชสาหรบการเพมทก ๆ สมาชกจาก collection c ลงใน collection ปจจบนทถกระบ
boolean contains(Object e)เมธอดคนคา true ในกรณท collection มสมาชกทถกระบอยแลว
boolean containsAll(Collection c)
เมธอดคนคา true ในกรณท collection ประกอบไปดวยทก ๆ สมาชกปรากฏอย
ภายใน Collection ทถกระบ
void clear()
ใชสาหรบการลบสมาชกทงหมดออกจาก collection
interface Collection : Methods
สรปเมธอดทใชใน interface Collection
boolean isEmpty()คนคา true ในกรณทไมมสมาชกอยภายใน collection
Iterate iterator()
คนคา iterator ทยอมใหผใชสามารถเหนคาสมาชกภายใน collection
boolean remove(Object o) ลบออปเจคในรปของสมาชกทถกระบออกจาก collection ในกรณทมสมาชก
ดงกลาวอยจรง
boolean removeAll(Collection c)
ลบทก ๆ สมาชกทอยภายใน Collection เปาหมายทเหมอนกบหรอมอยใน collection
ทถกระบ
interface Collection : Methods
สรปเมธอดทใชใน interface Collection
boolean retainAll(Collection c)
ลบสมาชกทงหมดภายใน Collection เปาหมายทไมเหมอนกบหรอมอยใน collection
ทถกระบ ดงนนสมาชกทเหลออยของ collection ทงสองจะตองเทากน
int size()
คนคาจานวนสมาชกทอยภายใน collection ปจจบน
Object[] toArray()
คนคาอะเรยทประกอบไปดวยสมาชกทงหมดของ collection ปจจบน
Object[] toArray(Object a[]) คนคาอะเรยทประกอบไปดวยสมาชกทงหมดของ collection ปจจบน รนไทมของอารเรยทมการคนคาจะตองเปนชนดเดยวกบอารเรย a
interface Collection : Methods
interface List
List — เปน collection ทมสมาชก
ภายในเรยงลาดบกน และสามารถ
มคาซ ากนได
ผใชสามารถควบคมการเขาถง
ขอมลสมาชกภายใน List โดยการ
ระบตาแหนง เชนเดยวกบการ
ทางานของ Vector
public interface List {// Positional Access
Object get(int index);Object set(int index, Object element); void add(int index, Object element); Object remove(int index); abstract boolean addAll(int index,
Collection c);
// Searchint indexOf(Object o);int lastIndexOf(Object o);
// IterationListIterator listIterator();ListIterator listIterator(int index);
// Range-viewList subList(int from, int to);
}}
Java Lists: ArrayList
ความแตกตางระหวาง arrays และ ArrayLists:
Array มขนาดคงท แต ArrayList สามารถเพมหรอลดขนาดได
อตโนมต
ดงนนจงไมจาเปนตองทราบขนาดของ ArrayList กอนการทางาน
Arrays สามารถใชงานไดกบขอมลชนดพนฐานหรอออปเจค แต
ArrayLists สามารถเกบคาไดเฉพาะออปเจค (Java 1.4)
การทางานแบบไม synchronized
Class Diagram : ArrayList
Collection
add()clear()contains()isEmpty()iterator()remove()size()toArray()
List
get()indexOf()lastIndexOf()lisIterator()removeRange()set()sublist()
ArrayList LinkedListVector
elementAt()setElementAt()addElement()removeElementAt()insertElementAt()
<<interface>> <<interface>>
Array Lists
Constructor Summary
ArrayList() สราง list วาง ๆ ทมขนาดเรมตนเทากบ 10
ArrayList() สราง list ทประกอบดวยสมาชกของ collection ทถกระบ เพอใหสามารถคนคา
ไดโดยใช iterator รวมกบ collection
ArrayList() สราง list วางพรอมกบระบคาเรมตน
วธการเรยกใช constructors (แบบเดม):
import java.util.ArrayList;
ArrayList vec1 = new ArrayList();
ArrayList vec2 = new ArrayList(initialCapacity);
สรปเมธอดทใชในการเขาถงและเพมขอมลใน list
size() คนคาจานวนสมาชกทอยภายใน list
get( int index)คนคาสมาชกทถกระบตาแหนง index ภายใน list
add( int index, java.lang.Object o) แทรกสมาชกลงในตาแหนง index ทถกระบอยภายใน list
add( java.lang.Object o) เพมออปเจคโดยตอทายสมาชกทอยภายใน list
set( int index, java.lang.Object o) แทนทสมาชกทถกระบตาแหนงโดย index ดวยพารามเตอรในรปของออปเจคท
ตองการ
ArrayLists
สรปเมธอดเพมเตมทใชใน list
isEmpty () คนคา true ในกรณท list ไมมสมาชกอยภายใน
clear () ลบทก ๆ สมาชกภายใน list.
contains (java.lang.Object o) คนคา true ในกรณท list ปจจบนประกอบไปดวยออปเจคทถกระบ
indexOf (java.lang.Object o) คนคาตาแหนง index ทพบครงแรกของออปเจคทถกระบ
trimToSize()Trims the capacity of this ArrayList instance to be the list's current size.
Array Lists
Differences from Java 1.4
ในจาวา 1.4 หรอตากวา ArrayLists ไมสามารถใชในการจดเกบขอมลชนด
พนฐานได
ดงนนการจดเกบขอมลของ ArrayList ตองอยในรปของออปเจคเทานน
สงสาคญ : เมอมการรบคาออปเจคออกจาก ArrayList ดวยเมธอดใด ๆ
จะตองมการแปลงคาออปเจคนน ๆ ใหเปนชนดของขอมลทถกจดเกบ
เปนครงแรกเสมอ
ในกรณทจาเปนตองจดเกบขอมลชนดพนฐาน (เชน int, double) ผใช
ตองใช “wrapper” คลาสรวมดวยเสมอ เชน Integer, Double เชน
myIntList.add(new Integer(7));
เมอตองการรบคาจาก ArrayList จาเปนตองใชคลาส wrapper อกเชนกน
int x = ((Integer) myIntList.get(i)).intValue();
java.applet, java.awt, java.io, java.lang, java.net, java.util
java.math, java.rmi, java.security, java.sql, java.text, java.beans
javax.accessibility, javax.swing, org.omg
javax.naming, javax.sound, javax.transaction
java.nio, javax.imageio,javax.net, javax.print,javax.security, org.w3c
javax.activity,javax.management
Java 1.08 packages212 classes
Java 1.123 packages504 classes
Java 1.259 packages1520 classes
Java 1.377 packages1595 classes
Java 1.4103 packages2175 classes
Java 1.5131 packages2656 classes
New Events
Inner class
Object Serialization
Jar Files
International
Reflection
JDBC
RMI
JFC/Swing
Drag and Drop
Java2D
CORBA
JNDI
Java Sound
Timer
Regular ExpLoggingAssertionsNIO
Differences from Java 1.0- 1.5
Generics
ในจาวา 1.4 หรอกอนหนานน เมอมการรบคาสมาชกจาก collection ผใช
จาเปนตองทาการ cast กอนเสมอ
การ Cast ทไมถกตองอาจกอใหเกดปญหาตามมา
การ Cast ถอเปน unsafe - อาจกอใหเกดความลมเหลวในขณะ runtime
นอกจากนนแลวยงไมสามารถเหนไดชดเจนวาขอมลชนดใดทถกนาเขา
หรอออกจาก collection
แตการทางานแบบ Generics ชวยใหคอมไพเลอรทราบวาขอมลชนดใดทถก
จดเกบโดย collection
คอมไพเลอรทาหนาท casts แทนผใช
ชวยใหชวงเวลาในการคอมไพลเปนแบบ type safety
ไดมาจากแนวคดของ C++ templates
Generics
นอกจากนนแลวในจาวาเวอรชน 1.4 หรอกอนหนา ArrayList จะถกใชเฉพาะ
การจดเกบออปเจคเทานน ไมสามารถใชเกบขอมลแบบพนฐานได
แตดวยเหตผลของความ compatibility ของการทางานแบบเดม ยงคง
สามารถทาไดตามปกต แตจะมขอความแจงเตอนผใชอยเสมอ
สวนในจาวา 5 ผใชสามารถเรยกใช ArrayList ไดโดยใชรปแบบใหมท
เรยกวา generics syntax
เปนวธการทมการคอมไพลซาดวยชนดขอมลทตองการใช
การใชงานเมอเปรยบเทยบกบแบบเดม:
List words = new ArrayList(); // java 1.4
List <String> words = new ArrayList <String> (); // java 5
Using an ArrayList
ในกรณทตองการใชรปแบบ generic ใหระบเครองหมาย angle brackets
ระหวางชอของ ArrayList และชนดของออปเจคทตองการจดเกบ
การใชงานเมอเปรยบเทยบกบแบบเดม:
ArrayList words = new ArrayList(); // java 1.4
ArrayList <String> words = new ArrayList <String> (); // java 5
ในกรณทตองการใชงานแบบเดม (จาวา 1.4) แตไมตองการขอความแจง
เตอน อาจใช <?> wildcard แทนไดดงน
ตวอยางเชน : ArrayList<?> vec1 = new ArrayList<?>();
Accessing with and without generics
เรยกใชเมธอด get() ดวยจาวา 1.4 :
ArrayList myList = new ArrayList();myList.add("Some string");String s = (String) myList.get(0);
เรยกใชเมธอด get() ดวยจาวา 5 :
ArrayList<String> myList = new ArrayList<String>();myList.add("Some string");String s = myList.get(0);
ไมจาเปนตองใช Cast อกตอไปเมอใชงานรวมกบ genericคลาสและ interfaces ทสามารถใช generic ไดแก : Vector, ArrayList, LinkedList, Hashtable, HashMap, Stack, Queue, PriorityQueue, Dictionary, TreeMap , TreeSet
An example:
import java.util.ArrayList;
public class ArrayListTest{
public ArrayListTest{
System.out.println("ArrayListTest");ArrayList aList = new ArrayList(); aList.add("Dan");aList.add("George");aList.add("Mary");
System.out.println("aList contains:");for(int x = 0; x < aList.size(); x++){
System.out.println(aList.get(x));}
} }
“Dan” “George “Mary”
An example:
import java.util.ArrayList;
public class ArrayListTest{
public ArrayListTest{
System.out.println("ArrayListTest");ArrayList<String> aList = new ArrayList <String>();aList.add("Dan");aList.add("George");aList.add("Mary");aList.add(2, “Tom”);System.out.println("aList contains:");for(int x = 0; x < aList.size(); x++){
System.out.println(aList.get(x));}
} }
“Dan” “George “Tom” “Mary”
The "For Each" Loop
ในจาวาเวอรชน 5.0 ไดมการเพมการทางานของ for loop ชนดใหมทเรยกวา for-each loop
การทางานของ loop จะประมวลผลหนงครงสาหรบแตละคาของสมาชกทอยภายใน collection
รปแบบของคาสงfor(type varname : collection) {...}
type : ชนดขอมลใน collection Varname : เปนตวแปรทใชแสดงผลCollection : ระบชอของ collection ทใช
double[] array = {2.5, 5.2, 7.9, 4.3, 2.0};
for(double d: array ) {
System.out.println(d); }
For each loop (Collections)
import java.util.*;public class ArrayList_ForEach1{public static void main(String []args){
ArrayList<Integer> list = new ArrayList<Integer>(); list.add(7); list.add(15); list.add(-67);
for (Integer number: list){ System.out.println(number);
} }
} Output :715-67
ตวอยางการใช for each สาหรบ ArrayList ทจดเกบคา Integer ออปเจค
Using enhanced FOR loop:
import java.util.ArrayList;
public class ArrayList_ForEach2{
public static void main (String [] arg){
System.out.println("ArrayListTest");ArrayList<String> aList = new ArrayList <String>(); aList.add(new String("Dan"));aList.add("George");aList.add("Mary");
System.out.println("aList contains:");
for(String e:aList){
System.out.println(e);}
} }
ArrayListTestaList contains:DanGeorgeMary
What happens ?
ArrayList<String> students = new ArrayList<String>();students.add("Mary");students.add("James");students.add("Kevin"); Mary James Kevin
Mary Tanya James Kevin
temp
Mary Tanya Kevin
Mary John Kevin
students.add(1, "Tanya");
String temp = students.get(3);System.out.println(temp);
students.set(1, "John");System.out.println(students.size());
students.remove(2);
The "For Each" Loop: An Example
import java.util.*;public class ArrayListDemo {
public static void main(String[] args) {ArrayList<String> todoList = new ArrayList<String>(20);System.out.println("Enter list entries, when prompted.");boolean done = false;String next = null, answer;Scanner input = new Scanner(System.in);while(!done) {
System.out.println("Input an entry: ");next = input.nextLine();todoList.add(next);System.out.print("More item for the list ?");answer = input.nextLine();
if(!(answer.equalsIgnoreCase("Yes")))done = true;
}System.out.println("The List contains: ");for(String entry: todoList)
System.out.println(entry);}
}
Vector with Generic
import java.util.*;public class VectorDemo {
public static void main(String[] args) {Vector<String> v = new Vector<String>();v.add("1");v.add("2");v.add("3"); ArrayList<String> arrayList = new ArrayList<String>();arrayList.add("4");arrayList.add("5");
//append all elements of ArrayList to Vectorv.addAll(arrayList);
System.out.println("After appending all elements of ArrayList, Vector contains..");for(String temp:v)
System.out.print(“ “ +temp);}
} After appending all elements of ArrayList, Vector contains..1 2 3 4 5
Iterators
เปนการเขาถงแตละสมาชกภายใน collection คราวละหนงครงเปนแนวคดทคลายกบการใชการวนซาทเกดขนภายใน loop เชน
for (int i=0; i < 10; i++) { . . . }Iterator เปน interface ทมลกษณะเปน abstract คอนขางมาก ดงนนจงสามารถนาไปประยกตใชไดกบทก ๆ collection Iterator interface ประกอบไปดวยรายละเอยดการทางานดงตอไปน
Interface Iterator {Object next();boolean hasNext();void remove();
}
Iterator methods
Object next() คนคาสมาชกในลาดบถดไปในการ iteration
void remove() ลบสมาชกปจจบนออกจาก collection
boolean hasNext() คนคา true ในกรณทการ iteration ยงมสมาชกอยในลาดบถดไป
hasNext()false
hasNext() true
next()
iterator
Example: Iterator
public static void filter(Collection c) {
for (Iterator it = c.iterator() ; it.hasNext(); )if (!cond(it.next()))
it.remove();}
public static void filter(Collection c) {
Iterator it = c.iterator();while (it.hasNext())
if (!cond(it.next()))it.remove();
}
รปแบบการทางานของ Iteratorfor (Iterator iName = CName.iterator(); iName.hasNext();) {
Type varname = (Type) iname.next();System.out.print(varname + " ");
}
Vector with Iterator
import java.util.*;public class VectorDemo {
public static void main(String[] args) {Vector<String> v = new Vector<String>();v.add("1");v.add("2");v.add("3"); ArrayList<String> arrayList = new ArrayList<String>();arrayList.add("4");arrayList.add("5");
v.addAll(arrayList); //append all elements of ArrayList to Vector
System.out.println("After appending all elements of ArrayList, Vector contains..");
Iterator iter = v.iterator(); while (iter.hasNext()) {
System.out.print(“ “+iter.next());}
}}
After appending all elements of ArrayList, Vector contains..1 2 3 4 5
Object References
จาวาใช reference สาหรบการอางถงแอดเดรสทแทจรงของออปเจค เชน
Student student = new Student(“John Smith”, “40725”, 3.85);
student John Smith407253.58
References สามารถนามาสราง links เพอเชอมกนระหวางออปเจคได เชน
คลาส Student ประกอบไปดวย reference ไปยงออปเจคอน ๆ ของ Student
John Smith407253.57
Jane Jones588213.72
Head
References as Links
แมวาการใช References ในการสราง Single Linked List เปนสงทสามารถ
ทาได แตอยางไรกตามการทางานยงมประสทธภาพทไมสงนก
ดงนนจงไดมการพฒนา Double Linked List ขนมาใหม เพอแกไขปญหา
ดงกลาว
studentList
Java Lists
LinkedList : ถกพฒนาขนในรปของ
double linked list
มผลทาใหการแทรกขอมล และการลบ
ขอมลในชวงกลาง ๆ ของ list ทาไดอยาง
รวดเรว
LinkedList ไดจดเตรยมเมธอดประเภท get,
remove และ insert สมาชกทจดเรมตนและ
สนสดของ list
LinkedList ไมสนบสนนการทางานแบบ
synchronized
AbstractList
AbstractSequentialList
ArrayList
Stack
VectorLinkedList
List AbstractCollection
Collection
Interface: List
List ใชกบการจดเกบขอมลทม
การเรยงลาดบกน
Lists สามารถประกอบไปดวย
ขอมลทซ ากนได
ผใชสามารถเขาถงขอมลของ
List ไดโดยใชคาตาแหนง index
public interface List extends Collection {// Positional AccessObject get(int index);Object set(int index, Object element); void add(int index, Object element); Object remove(int index); abstract boolean addAll(int index, Collection c);
// Searchint indexOf(Object o);int lastIndexOf(Object o);
// IterationListIterator listIterator();ListIterator listIterator(int index);
// Range-viewList subList(int from, int to);
}
สรปเมธอดทใชในการเขาถงและเพมขอมลใน list
LinkedList() คอนสรคเตอรสาหรบ Linked list วาง ๆ
LinkedList() คอนสรคเตอรทประกอบไปดวยสมาชกภายใน collection ทถกระบ
เพอใหสามารถคนคาไดโดยใช collection's iterator
addAll(Collection c) ทก ๆ สมาชกทงหมดทอยภายใน collection ถกระบจะถกนาไปตอทาย list เพอใหสามารถคนคาไดโดยใช collection's iterator
addAll(int index, Collection c) แทรกทก ๆ สมาชกลงใน collection ทถกระบ โดยเรมตนจากตาแหนงทถกระบ
addFirst(Object o) แทรกสมาชกทตองการลงในตาแหนงแรกของ list
addLast(Object o) เพมสมาชกทตองการตอทาย list
Linked List Method
สรปเมธอดเพมเตมทใชใน list
getFirst() คนคาสมาชกลาดบแรกทอยภายใน list
getLast() คนคาสมาชกลาดบสดทายทอยภายใน list
removeFirst() ลบและคนคาสมาชกลาดบแรกออกจาก list
removeLast() ลบและคนคาสมาชกลาดบสดทายออกจาก list
remove(int index) ลบคาสมาชกตามตาแหนงทถกระบภายใน list
remove(Object o) คนคาสมาชกทถกพบเปนครงแรกภายใน list
Linked List Method
Linked List Example
import java.util.*;
class MyLinkedList {
public static void main(String[] args) {
LinkedList listIT = new LinkedList();
David Joe Sean
David
David Michael
David Michael Sean
Joe Sean
listIT.add("David");
listIT.add("Michael");
listIT.add("Sean");
listIT.set(1, “Joe");
listIT.remove(0);
System.out.println(listIT);}
}
Illustration/example
Operation List’s contents Return value
1. Initialiaze(List) <empty> -
2. Add(0,A,List) A -
3. Add(0,B,List) B A -
4. Add(1,C,List) B C A -
5. Set(1,N,List) B N A -
6. Add(1,D,List) B D N A -
7. Remove(A,List) B D N A
8. Set(3,I,List) B D N I -
9. Remove(D,List) B N I D
10. Remove(N,List) B I N
Interface: Map
map บางครงอาจถกอางถงในรป
ของ dictionary
Map เปนออปเจคทใชสาหรบการ
แปลง keys ใหเปน values
Maps เกบคา key ทไมซ ากนแต
values ซ ากนได
Hashtables เปนตวอยางการใช
งานทสบทอดมาจาก Maps
public interface Map {// Basic OperationsObject put(Object key, Object value);Object get(Object key);Object remove(Object key);boolean containsKey(Object key);boolean containsValue(Object value);int size();boolean isEmpty();
void putAll(Map t);void clear();
public Set keySet();public Collection values();public Set entrySet();
// Interface for entrySet elementspublic interface Entry {
Object getKey();Object getValue();Object setValue(Object value);
}}
Map interface
Map
clear()containsKey()containsValue()entrySet()get()keySet()put()size()values()
SortedMap
comparator()firstKey()headMap()lastKey()subMap()tailMap()
sorted
HashMap
LinkedHasMap
ordered access
HashTable
no nulls
TreeMap
random access
<<Interface>>
<<Interface>>
สรปเมธอดทใชใน Map interface
clear() ลบทก ๆ สมาชกออกจาก map
containKey(k) คนคา true ในกรณท map ประกอบดวย mapping สาหรบ key k
containsValue(v) คนคา true ในกรณท map มการ maps keys ตงแตหนงหรอมากกวาไปยงคา v
entrySet() คนคา Set view ของการ mappings ทถกจดเกบไวใน map
Map interface Method
เมธอดดงตอไปน กาหนดให k เปนออปเจค และใชสาหรบนาเสนอ key
สวน v เปนออปเจคทใชนาเสนอ value และ m ใชนาเสนอ Map
สรปเมธอดทใชใน Map interface
get(k) คนคา true ในกรณทมการmaps คา key k
isEmpty() คนคา true ในกรณท map ไมมการแปลงคา key-value
keySet() คนคา Set view ของคยทอยภายใน map
put(k,v) เพมคา v พรอมกบคย k ภายใน map
putAll(m) สาเนาคาจาก map m ไปยง map ทเรยกใช
remove(k) ลบคา mapping สาหรบคย k จาก map ปจจบน
values() คนคา Collection view ของคาทอยภายใน map
Map interface Method
ประกอบไปดวย 3 มมมอง
มมมองแบบ Entry set ขอมลทงหมดทเขาส map เชน
Set entrySet()
มมมองแบบ key set กลมของ keys ทงหมดภายใน map ทถกกาหนดคา
เนองจาก keys มลกษณะ unique เชน
Set keySet()
มมมองจาก value collection เปนกลมของทก ๆ values ภายใน map ม
ลกษณะเปน collection เนองจาก keys ทแตกตางกนสามารถ map ลงใน
คาเดยวกนได เชน
Collection values()
Interface: Map
import java.util.*;public class MapDemo {
public static void main(String args[]) {Map<String, String> m = new HashMap<String, String>();m.put("1", "C#");m.put("2", "Java");m.put("3", "Php");
System.out.println(" Size of Map = " m.size());System.out.println("The keys of this Map : " +m.keySet());System.out.println("The values of this Map : "+ m.entrySet());
}}
output :Size of Map = 3The keys of this Map : [3, 2, 1]The values of this Map : [3=Php, 2=Java, 1=C#]
Map Example
The class Hashtable
Hashtable ใชสาหรบเกบขอมลเปนลกษณะ
คลาดบ <key,value>
ในคลาส Hashtable จะใช Hash code ของ key ทา
หนาทเปนดชนในการคนหาคาของ value
คลาส Hashtable สามารถใชงานแบบ Multi-
Thread ได (Thread-Safe)
Dictionary
Map
Hashtable
Hashing Concept
เปนวธการจดเกบและคนหาขอมลอกแบบหนงทประกอบไปดวย
ฟงกชนสาหรบการ hash (h)
อะเรยทมขนาดเทากบ N
Collision เกดขนในกรณท 2 keys ถก map ลงในอะเรยในตาแหนงเดยวกน
ฟงกชน hash (h) แปลงคา keys ทมชนดขอมลทกาหนดไวใหอยในรปของ
คา integer ตงแต {0, N-1}
ตวอยางเชน:
h(x) = x mod N
mod : ฟงกชนทใชหาคาเศษของ Key Value
Hashing Function
กาหนดให ความจในการจดเกบขอมลทได ไมเกน 20
เรคคอรด
จากขอกาหนดเลอก N สาหรบการ mode = 19
3211 2134 1532 1123 1143 1135 2432 7213 8812 5321
3211 : 02134 : 61532 : 121123 : 21143 : 31135 : 142432 : 07213 : 128812 : 155321 : 1
h(x) = x mod N
0 32111 53212 11233 1143456 2134789101112 15321314 113515 881216171819
Key: Value
Hash Table: Example
.
.
.
.
0123
9996999799989999
045-34-0002
045-35-9996
กาหนดให Item(name, ssn) เมอ
ssn เปนตวเลข 9 หลก
Hash table N = 10000.
Hash function: เฉพาะตวเลข 4
หลกสดทายของ x
การจดเกบคา HashTable จะม
ลกษณะดงตอไปน
Example use of a Hashtable
import java.util.*;
public class HashtableUser {public static void main(String[] args) {
Hashtable table = new Hashtable();table.put(“ABC", “abc");table.put(“XYZ", “xyz");table.put(“MNO", “mnos");System.out.println("two -> " + table.get(“XYZ"));System.out.println("deux -> " + table.get(“xyz"));
}}
Key Value
ABC abc
XYZ xyz
MNO mno
two -> xyzdeux -> null
การเพมคาเขาส Hashtable
table.put(key, value);
การรบคาจาก Hashtable
value = table.get(key);
Hashtable (1.5)
import java.util.*;class HashtableDemoGen {
public static void main(String args[]) {Hashtable<String,String> hashtable = new Hashtable<String,String>();hashtable.put("apple", "red");hashtable.put("strawberry", "red");hashtable.put("lime", "green");hashtable.put("banana", "yellow");hashtable.put("orange", "orange");
for (Enumeration<String> e = hashtable.keys() ; e.hasMoreElements() ;) {String k = e.nextElement();String v = hashtable.get(k);System.out.println("key = " + k + "; value = " + v);
}
System.out.print("\nThe color of an apple is: ");String v = hashtable.get("apple");System.out.println(v);
}}
key = banana; value = yellowkey = apple; value = redkey = orange; value = orangekey = lime; value = greenkey = strawberry; value = red
The color of an apple is: red
Upcasting Review
class Shape {private String name;public Shape(String aName) { name=aName; } public String getName() { return name; }public double calculateArea() { return 0.0; }
} // End Shape class
class Circle extends Shape {private double radius;public Circle(String aName) {
super(aName); radius = 1.0;}public Circle(String aName, double radius) {super(aName); this.radius = radius;
}public double calculateArea() {
return (double)3.14 * radius*radius; }
public void testCast() {System.out.println(“Can Cast Object”);
}}
Add more methodIn subclass
Upcasting Reviewclass Run {
public static void main(String argv[]) {Shape c1 = new Circle("Circle C1“);Shape c2 = new Circle("CircleC2",3.0);
System.out.println("The area of " + c1.getName( )+ " is " + c1.calculateArea( ) + " sq. cm.“);
System.out.println("Thearea of " + c2.getName( )+ " is " + c2.calculateArea( ) + " sq. cm.“);
c1.testCast();
}
Error and need downcasting
Conversion of Reference types : DownCasting
สวนในทางกลบกนการแปลง Reference
ออปเจคจาก SuperClass ตามลาดบชน
ของคลาสใหเปน Reference ออปเจคของ
SubClass ได
แต Reference ดงกลาวจะไมสามารถ
เรยกใชเมธอดทปรากฏอยภายใน
Subclass ได กรณนจะถกเรยกวา
downcasting
downcasting ตองการการ cast ท
ถกตอง มฉะนนจะกอใหเกดปญหา
กบการทางานของคอมไพเลอรได
SubClass
SuperClass
SuperClass sup = new SubClass();
SubClass sub = (SubClass) sup; // Need Casting otherwise Error
Understanding DownCasting
class Run {
public static void main(String argv[]) {Shape c1 = new Circle("Circle C1“);Shape c2 = new Circle("Circle C2", 3.0);
System.out.println("The area of " + c1.getName( )
+ " is " + c1.calculateArea( ) + " sq. cm.“);System.out.println("Thearea of " + c2.getName( )
+ " is " + c2.calculateArea( ) + " sq. cm.“);
Circle c3 = (Circle) c1;
c1.testCast(); // ……Ok …works after Downcasting
} // End main
SubClass
SuperClass
SuperClass sup = new SubClass();
SubClass sub = (SubClass) sup; // Need Casting otherwise Error
Power of Collection
public class CollectionDemo {public static void main(String[] args) {
Set<String> obj = new HashSet<String>();obj.add("Aron");obj.add("Harry");obj.add("Steve");obj.add("Aron");for (String demo: obj) {System.out.println(""+demo);
}
System.out.println("Finish!!!!");List<String> list = new ArrayList<String>(obj);list.add("Steve");for (String temp: list) {System.out.println(""+temp);
}
}
}
HarrySteveAronFinish!!!!HarrySteveAronSteve