Top Banner

of 47

Java Object Oriented Programming 09

Oct 17, 2015

Download

Documents

Futaro Kun

Collection
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • Kiu d liu Collections

    Bi 9 - Kiu d liu Collection

  • 2

    Ni dung

    Kiu Collections

    Giao din

    Thc thi

    Cc thut ton

    Lp vt cha Set v Map

    Bi 9 - Kiu d liu Collection

  • 3

    Kiu Collections

    Mt collection, hay cn gi l container, l mt i tng dng nhm

    nhiu phn t trong mt n v duy nht.

    Cc collection c s dng lu tr, truy xut v thao tc d liu.

    V d: mt tp hp cc qun bi, cc th mc th, mt danh b in

    thoi,

    http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html

    Bi 9 - Kiu d liu Collection

  • 4

    Collection framework

    Mt collection framework l mt kin trc thng nht

    biu din v thao tc vi cc d liu kiu collection.

    Ba thnh phn ca mt collection framework:

    Giao din: cc kiu d liu tru tng dng biu

    din cc collection.

    Thc thi: cc thc thi c th ca cc giao din ca collection.

    Thut ton: Cc phng thc h tr nh sp xp, tm

    kim, cc i tng thc thi cc giao din ca collection.

    Bi 9 - Kiu d liu Collection

  • 5

    Java collection framework

    Lm gim cng vic lp trnh,

    Tng tc v cht lng chng trnh,

    Cho php kh nng tng tc gia cc API khng lin quan,

    Lm gim cng sc tm hiu v s dng cc API mi,

    Lm gim vic thit k cc API mi,

    Thc y ti s dng phn mm.

    Bi 9 - Kiu d liu Collection

  • 6

    Ni dung

    Kiu Collections

    Giao din

    Thc thi

    Cc thut ton

    Lp vt cha Set v Map

    Bi 9 - Kiu d liu Collection

  • 7

    Giao din

    Cc giao din li ca collection ng gi nhiu kiu khc nhau ca collection.

    Cc giao din ny cho php cc collection c thao tc mt cch c lp

    vi cc thc thi ca chng.

    Collection

    Set List

    SortedSet

    Queue

    Map

    SortedMap

    Bi 9 - Kiu d liu Collection

  • 8

    Giao din

    Tt c cc giao din ca Java collection framework l:

    public interface Collection

    Chng ta nn xc nh kiu E ca cc i tng cha trong collection.

    E c th l mt trong cc kiu i tng:

    Integer, Double, String

    Object

    Bi 9 - Kiu d liu Collection

  • 9

    Duyt collection

    Hai cch duyt qua collection:

    Bng cu trc foreach

    Bng cc i tng Iterator

    Cu trc foreach

    for (Object o : collection)

    do something

    Cc i tng Iterator

    Collection c;

    Iterator iter = c.iterator();

    while (iter.hasNext()) { E e = iter.next(); ...}

    Bi 9 - Kiu d liu Collection

  • 10

    Ni dung

    Kiu Collections

    Giao din

    Thc thi

    Cc thut ton

    Lp vt cha Set v Map

    Bi 9 - Kiu d liu Collection

  • 11

    Thc thi

    Cc thc thi thng dng ca collection

    HashSet, TreeSet

    ArrayList, LinkedList

    PriorityQueue

    HashMap, TreeMap

    Bn nn c ti liu v cc lp ny trong API Documentation ny bit

    y cc chc nng ca chng.

    Packages: java.util.*

    Bi 9 - Kiu d liu Collection

  • 12

    V d: List

    // create a list of odd numbers

    List odds = new ArrayList();

    for (int i = 1; i < 50; i = i + 2) {

    odds.add(i);

    }

    // print the list: first way

    for (Integer i : odds) {

    System.out.println(i);

    }

    // print the list: second way

    Iterator iter = odds.iterator();

    int i;

    while (iter.hasNext()) {

    i = iter.next();

    System.out.println(i);

    }

    // print the list: third way

    for (int j = 0; j < odds.size(); j++) {

    i = odds.get(j);

    System.out.println(i);

    }

    Bi 9 - Kiu d liu Collection

  • 13

    Ni dung

    Kiu Collections

    Giao din

    Thc thi

    Cc thut ton

    Lp vt cha Set v Map

    Bi 9 - Kiu d liu Collection

  • 14

    Cc thut ton

    Cc thut ton a hnh trong Collection framework ca Java c

    th ti s dng.

    Tt c cc thut ton u c vit di dng phng thc

    tnh.

    i s u tin lun l Collection hot ng.

    Nhiu thut ton lm vic trn danh sch.

    Bi 9 - Kiu d liu Collection

  • 15

    Cc thut ton

    Cc thut ton gm:

    Sp xp

    Xo trn

    X l d liu thng xuyn

    Tm kim

    Hp nht

    Vic tm kim cc gi tr cc i

    Bi 9 - Kiu d liu Collection

  • 16

    Sp xp

    Cc thut ton sp xp sp xp li danh sch cc phn t ca n tng dn theo mt quan h th t no .

    Cc th t t nhin:

    Xu k t

    S

    K t

    Ngy thng

    i tng ?

    Bi 9 - Kiu d liu Collection

  • 17

    Sp xp

    Giao din Comparable quy nh quan h th t cho mt lp.

    Cc i tng ca mt lp c th c sp xp t ng nu

    lp thc thi giao din Comparable.

    Cc lp quan trng ca Java platform m thc thi giao din

    Comparable bao gm:

    Boolean, Byte, Character, Short, Integer, Long, Float, Double,

    BigInteger, BigDouble.

    String, Data, File, CollationKey

    Bi 9 - Kiu d liu Collection

  • 18

    Sp xp

    Nu ta c gng sp xp mt danh sch m cc phn t ca n

    khng thc thi Comparable, phng thc sp xp s nm mt

    i tng thuc lp ClassCastException.

    Giao din Comparable:

    public interface Comparable {

    public int compareTo(T o);

    }

    Tr li mt gi tr ln hn, nh hn hay bng 0 ty thuc i tng ang xt ln hn, nh hn hay bng

    vi i tng c so snh.

    Bi 9 - Kiu d liu Collection

  • 19

    Sp xp

    Example: Name.java, NameSort.java

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

    Name nameArray[] = {

    new Name("John", "Smith"),

    new Name("Karl", "Ng"),

    new Name("Jeff", "Smith"),

    new Name("Tom", "Rich")

    };

    List names = Arrays.asList(nameArray);

    Collections.sort(names);

    System.out.println(names);

    }

    }

    Bi 9 - Kiu d liu Collection

  • 20

    Sp xp

    Nu cc i tng m chng ta cn phi sp xp khng thc thi

    Comparable, chng ta c th quy nh mt Comparator c dng

    sp xp.

    Giao din Comparator:

    public interface Comparator {

    int compare(T o1, T o2);

    }

    Bi 9 - Kiu d liu Collection

  • 21

    Sp xp

    Gi s ta c mt lp Employee nh sau:

    public class Employee implements

    public Name name() { ...

    public int number() { ...

    public Date hireDate() { ...

    ...

    }

    Bi 9 - Kiu d liu Collection

  • 22

    Sp xp

    ng nhin, chng ti c th sp xp danh sch cc nhn vin theo tn ca h.

    Nu cn chng ta cng c th sp xp danh sch ny theo th

    t v thm nin?

    Bi 9 - Kiu d liu Collection

  • 23

    Sp xp

    public class EmpSort {

    static final Comparator SENIORITY_ORDER =

    new Comparator() {

    public int compare(Employee e1, Employee e2) {

    int dateCmp = e2.hireDate().compareTo(e1.hireDate());

    if (dateCmp != 0)

    return dateCmp;

    return (e1.number() < e2.number() ? -1 :

    (e1.number() == e2.number() ? 0 : 1));

    }

    };

    // Employee database

    static final Collection employees = ... ;

    public static void main(String[] args) {

    List e = new ArrayList(employees);

    Collections.sort(e, SENIORITY_ORDER);

    System.out.println(e);

    }

    }

    Ta so snh cc gi tr numbers khi m hai gi

    tr ngy thng bng nhau

    Bi 9 - Kiu d liu Collection

  • 24

    Xo trn

    Thut ton xo trn l ngc li ca thut ton sp xp

    Sp xp li mt danh sch da trn u vo t mt ngun ngu

    nhin m tt c cc hon v c th xy ra vi kh nng ngang nhau.

    Rt hu ch trong vic thc hin cc tr chi may ri (th, xc sc

    ...)

    Bi 9 - Kiu d liu Collection

  • 25

    Xo trn

    public class Shuffle {

    public static void main(String[] args) {

    List list = new ArrayList();

    for (String a : args)

    list.add(a);

    Collections.shuffle(list, new Random());

    System.out.println(list);

    }

    }

    public class Shuffle {

    public static void main(String[] args){

    List list = Arrays.asList(args);

    Collections.shuffle(list);

    System.out.println(list);

    }

    }

    Dng mt ngun ngu

    nhin mc nh.

    Bi 9 - Kiu d liu Collection

  • 26

    Thao tc d liu

    Collection cung cp 5 thut ton thc hin cc thao tc d

    liu trn cc i tng ca lp List:

    reverse

    fill

    copy

    swap

    addAll

    Bi 9 - Kiu d liu Collection

  • 27

    Tm kim

    Thut ton binarySearch tm kim mt phn t trong

    mt danh sch c sp xp.

    Nu phn t c tm thy, ch s ca n c tr li, nu khng mt gi tr ch s m c tr li.

    Hai dng ca thut ton:

    Cho mt danh sch v mt phn t tm kim;

    Cho mt danh sch, mt phn t tm kim v mt

    Comparator.

    Bi 9 - Kiu d liu Collection

  • 28

    Hp nht

    Thut ton v tn sut:

    m s ln xut hin ca mt phn t trong mt collection.

    Thut ton xc nh tp ri nhau

    Xc nh xem hai collection cc tch ri nhau khng.

    Bi 9 - Kiu d liu Collection

  • 29

    Tm cc i

    Gi tr cc i:

    min ca mt collection

    max ca mt collection

    Hai dng:

    Cho mt Collection

    Cho mt Collection v mt Comparator

    c cc ti liu JDK API xem cc thut ton v cc v d c th.

    Bi 9 - Kiu d liu Collection

  • 30

    Example: Sort an Array

    String[] fruits = new String[] {"Pineapple","Apple",

    "Orange", "Banana"};

    Arrays.sort(fruits);

    int i=0;

    for(String temp: fruits){

    System.out.println("fruits " + ++i + " : " + temp);

    }

    Bi 9 - Kiu d liu Collection

  • 31

    Example: Sort an ArrayList

    List fruits = new ArrayList();

    fruits.add("Pineapple");

    fruits.add("Apple");

    fruits.add("Orange");

    fruits.add("Banana");

    Collections.sort(fruits);

    int i=0;

    for(String temp: fruits){

    System.out.println("fruits " + ++i + " : " + temp);

    }

    Bi 9 - Kiu d liu Collection

  • 32

    Sort an Object with Comparable

    public class Fruit{

    private String fruitName;

    private int quantity;

    public Fruit(String fruitName, int quantity) {

    this.fruitName = fruitName;

    this.quantity = quantity;

    }

    public String getFruitName() {

    return fruitName;

    }

    public void setFruitName(String fruitName) {

    this.fruitName = fruitName;

    }

    public int getQuantity() {

    return quantity;

    }

    public void setQuantity(int quantity) {

    this.quantity = quantity;

    }

    } Bi 9 - Kiu d liu Collection

  • 33

    Sort an Object with Comparable

    public class SortFruitObject{

    static void showList(Fruit[] fruits){

    int i=0;

    for(Fruit temp: fruits){

    System.out.println("fruits " + ++i + " : " + temp.getFruitName()

    + ", Quantity : " + temp.getQuantity());

    }

    }

    public static void main(String args[]){

    Fruit[] fruits = new Fruit[4];

    Fruit pineappale = new Fruit("Pineapple",70);

    Fruit apple = new Fruit("Apple",100);

    Fruit orange = new Fruit("Orange",80);

    fruits[0]=pineappale;

    fruits[1]=apple;

    fruits[2]=orange;

    Arrays.sort(fruits);

    showList(fruits);

    }

    }

    }

    Fruit cannot be cast to

    java.lang.Comparable

    Bi 9 - Kiu d liu Collection

  • 34

    Sort an Object with Comparable

    public class Fruit implements Comparable {

    private String fruitName;

    private int quantity;

    public Fruit(String fruitName, int quantity) {

    public String getFruitName() {

    public void setFruitName(String fruitName) {

    public int getQuantity() {

    public void setQuantity(int quantity) {

    //override the compareTo() method

    public int compareTo(Fruit compareFruit) {

    int compareQuantity = ((Fruit) compareFruit).getQuantity();

    return this.quantity - compareQuantity;

    }

    }

    Bi 9 - Kiu d liu Collection

  • 35

    Sort an Object with Comparator

    public class Fruit implements Comparable {

    private String fruitName;

    private int quantity;

    public Fruit(String fruitName, int quantity) {

    public String getFruitName() {

    public void setFruitName(String fruitName) {

    public int getQuantity() {

    public void setQuantity(int quantity) {

    public int compareTo(Fruit compareFruit) {

    public static Comparator FruitNameComparator

    = new Comparator() {

    public int compare(Fruit fruit1, Fruit fruit2) {

    String fruitName1 = fruit1.getFruitName().toUpperCase();

    String fruitName2 = fruit2.getFruitName().toUpperCase();

    return fruitName1.compareTo(fruitName2);

    }

    };

    } Bi 9 - Kiu d liu Collection

  • 36

    Sort an Object with Comparator

    public class SortFruitObject{

    static void showList(Fruit[] fruits){

    int i=0;

    for(Fruit temp: fruits){

    System.out.println("fruits " + ++i + " : " + temp.getFruitName()

    + ", Quantity : " + temp.getQuantity());

    }

    }

    public static void main(String args[]){

    Fruit[] fruits = new Fruit[4];

    Fruit pineappale = new Fruit("Pineapple",70);

    Fruit apple = new Fruit("Apple",100);

    Fruit orange = new Fruit("Orange",80);

    fruits[0]=pineappale;

    fruits[1]=apple;

    fruits[2]=orange;

    Arrays.sort(fruits);

    showList(fruits);

    Arrays.sort(fruits, Fruit.FruitNameComparator);

    showList(fruits;)

    }

    }

    fruits 1 : Apple, Quantity : 100

    fruits 2 : Orange, Quantity : 80

    fruits 3 : Pineapple, Quantity : 70

    fruits 1 : Pineapple, Quantity : 70

    fruits 2 : Orange, Quantity : 80

    fruits 3 : Apple, Quantity : 100

    Bi 9 - Kiu d liu Collection

  • 37

    Ni dung

    Kiu Collections

    Giao din

    Thc thi

    Cc thut ton

    Lp vt cha Set v Map

    Bi 9 - Kiu d liu Collection

  • 38

    Tm cc ch trong vn bn

    Cc ch (token, word) l mt dy k t lin nhau, ngn cch bi k t

    trng.

    V d:

    Dng Tom likes Jerry gm 3 ch: Tom, likes, Jerry.

    Dng Hc sinh hc sinh hc gm 5 ch:

    C 3 ch khc nhau l Hc, sinh, hc.

    Nu khng phn bit hoa thng th ch c 2 ch khc nhau.

    Bi 9 - Kiu d liu Collection

  • 39

    Tm cc ch trong vn bn

    Cho trc mt tp vn bn ting Anh hoc ting Vit, ta xt hai bi ton sau:

    Lit k cc ch khc nhau trong vn bn

    m tn s cc ch khc nhau trong vn bn

    Bi 9 - Kiu d liu Collection

  • 40

    Tm cc ch trong vn bn

    gii bi ton 1, ta dng kiu vt cha tp hp:

    Giao din Set

    Ci t ca Set l HashSet

    gii bi ton 2, ta dng kiu vt cha nh x:

    Giao din Map

    Ci t ca Map l HashMap

    Bi 9 - Kiu d liu Collection

  • 41

    Cc giao din trong th vin

    Th vin cc lp vt cha c nhiu giao din cho php thao tc vi nhiu

    kiu d liu thng dng:

    Set, Map, List, Queue

    Collection

    Set List

    SortedSet

    Queue

    Map

    SortedMap

    Bi 9 - Kiu d liu Collection

  • 42

    Reader reader = null;

    BufferedReader bufferedReader = null; try { // open a reader using UTF-8 encoding so that we can

    // read Vietnamese text reader = new InputStreamReader(new FileInputStream(fileName), "UTF-8"); bufferedReader = new BufferedReader(reader);

    c tp vn bn

    S dng bng m UTF-8

    c tp

    Bi 9 - Kiu d liu Collection

  • 43

    String line = null; // read the input file, line by line while ((line = bufferedReader.readLine()) != null) { // split the line into tokens String[] tokens = line.split(Constants.DELIMITERS); // add tokens to the set for (String token : tokens) { tokenSet.add(token);

    }

    }

    public static final String DELIMITERS = "[\\s,\\.\\(\\)]+";

    c tp vn bn

    Biu thc chnh quy ch nh cc k t

    trng, du phy, du chm, m ngoc,

    ng ngoc

    Bi 9 - Kiu d liu Collection

  • 44

    Nu thay HashSet bng TreeSet th ta c tp c sp xp theo th t t nhin ca phn t

    Cc phn t l String s c sp theo th t t in

    private Set tokenSet;

    tokenSet = new HashSet();

    public void print() {

    System.out.println("There are " + tokenSet.size() + " different tokens."); for (String token : tokenSet) {

    System.out.println(token);

    }

    }

    S dng Set

    Bi 9 - Kiu d liu Collection

  • 45

    Mi nh x c cp phn t: Key Value Trong bi ton 2, Key l token, Value l mt s nguyn m s ln token xut hin Key, Value u phi l cc kiu i tng (khng th l kiu d liu c s)

    Key = String

    Value = Integer

    private Map tokenCounter;

    tokenCounter = new HashMap();

    S dng Map

    Bi 9 - Kiu d liu Collection

  • 46

    // add tokens to the counter

    for (String token : tokens) { Integer count = tokenCounter.get(token); if (count != null) { tokenCounter.put(token, count + 1); } else { tokenCounter.put(token, 1);

    }

    }

    S dng phng thc get(Key) ly Value gn vi Key.

    Nu khng c Key th hm get tr v null

    Java 5+ t ng chuyn i gia i v new Integer(i) vi i l mt s nguyn

    S dng Map

    Bi 9 - Kiu d liu Collection

  • 47

    /**

    * Prints the token counter to the standard console. */ public void print() { System.out.println("There are " + tokenCounter.keySet().size() + " different tokens."); for (String token : tokenCounter.keySet()) { System.out.println(token + " --> " + tokenCounter.get(token)); } }

    Nu thay HashMap bng TreeMap th tp kha c sp xp theo th t t nhin.

    S dng Map

    Bi 9 - Kiu d liu Collection