Toggle Theme Editor
Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Charcoal

Hỏi về cách sử dụng các hàm có trong ArrayList

Discussion in 'Trao đổi về thuật toán' started by Nguyễn Quang Thái, 5/1/18.

  1. Hiện tại em có 1 bài tập như sau:
    Tạo 1 lớp có tên là Phone chứa những phương thức trừu tượng sa
    abstract void insertPhone(String name,String phone)
    abstract void removePhone(String name)
    tạo 1 lớp PhoneBook Kế thừa lớp Phone với các Phương thức
    tạo 1 ArrayList có tên là listBook để chứa dữ liệu
    void insertPhone(String name, String Phone)
    - Thêm vào listBook các dữ liệu tương ứng

    hàm reoverPhone(String name)
    kiểm tra name có trong listBook không nếu có thì xóa người tương ứng trong listBook đi
    em làm như sau ạ
    ở lớp Phone
    Code:
    package testlist;
    
    /**
     *
     * @author admin
     */
    abstract  class Phone {
        String name;
        String numberPhone;
    
        public Phone() {
        }
    
        public Phone(String name, String numberPhone) {
            this.name = name;
            this.numberPhone = numberPhone;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getNumberPhone() {
            return numberPhone;
        }
    
        public void setNumberPhone(String numberPhone) {
            this.numberPhone = numberPhone;
        }
        abstract void insertPhone(String name,String Phone);
        abstract void removePhone(String name);
    }
    }
    
    
    ở lớp PhoneBook
    Code:
    package testlist;
    
    import java.util.ArrayList;
    
    /**
     *
     * @author admin
     */
    public class PhoneBook extends Phone{
        ArrayList <Phone> listBook= new ArrayList<Phone>();
        @Override
        void insertPhone(String name, String Phone) {
           Phone Phone1=new PhoneBook();
           Phone1.setName(name);
           Phone1.setNumberPhone(Phone);
           //Phone1= (Phone)Phone1;
           listBook.add(Phone1);
            System.out.println(this.listBook.size());
          
            
        //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
    
        @Override
        void removePhone(String name) {
            for(int i=0;i<this.listBook.size();i++)
            {
                if(this.listBook.get(i).getName().equals(name))
                    this.listBook.remove(i);
            }
            System.out.println(this.listBook.size());
        }
    }
    
    nếu để như vậy thì nó vẫn chạy được nhưng ko được hay lắm có vẻ giống với 1 chương trình chạy trên mảng quá
    vậy có cách nào làm nổi bật tiện ích của Danh sách không ạ
    em cám ơn
     
  2. JackV

    JackV Administrator Staff Member

    Sau khi bạn hiện thực cái phương thức để so sánh là equals thì bạn có thể sử dụng nhiều phương thức hỗ trợ kiểm tra xem phần tử đó có chưa contains(Object o), xác định vị trí phần tử indexOf(Object o), ...
    Xem thử cái ví dụ này nhé

    PhoneList.java
    PHP:
    package p60930;

    import java.util.ArrayList;

    /**
     *
     * @author Thành Nhân <JackV at congdongjava.com>
     */
    public abstract class PhoneList extends ArrayList {

        abstract 
    void insertPhone(String nameString Phone);

        abstract 
    void removePhone(String name);
    }
    PhoneBook.java
    PHP:
    package p60930;

    /**
     *
     * @author Thành Nhân <JackV at congdongjava.com>
     */
    public class PhoneBook extends PhoneList {

        @
    Override
        void insertPhone
    (String nameString Phone) {
            
    Phone p = new Phone(namePhone);
            if (
    contains(p)) {
                
    System.out.println(p.toString()+ " with named " p.getName() + " is exists");
            } else {
                
    add(p);
                
    System.out.println(p.toString() + " is added, total: " size());
            }
        }

        @
    Override
        void removePhone
    (String name) {
            
    Phone p = new Phone(name"");// chỉ cần có name để so sánh
            
    int index indexOf(p);
            if (
    index != -1) {
                
    remove(index);//remove(p) thì k cần index
                
    System.out.println(p.toString() + " is removed");
            } else {
                
    System.out.println("The phone with the name " name "is not exists");
            }
        }
    }
    Phone.java
    PHP:
    package p60930;

    import java.util.Objects;

    /**
     *
     * @author Thành Nhân <JackV at congdongjava.com>
     */

    public class Phone {

        
    String name;
        
    String numberPhone;

        public 
    Phone() {
        }

        public 
    Phone(String nameString numberPhone) {
            
    this.name name;
            
    this.numberPhone numberPhone;
        }

        public 
    String getName() {
            return 
    name;
        }

        public 
    void setName(String name) {
            
    this.name name;
        }

        public 
    String getNumberPhone() {
            return 
    numberPhone;
        }

        public 
    void setNumberPhone(String numberPhone) {
            
    this.numberPhone numberPhone;
        }

        @
    Override
        
    public boolean equals(Object obj) {
            if (
    obj == null) {
                return 
    false;
            }
            if (
    getClass() != obj.getClass()) {
                return 
    false;
            }
            final 
    Phone other = (Phoneobj;
            if (!
    Objects.equals(this.nameother.name)) {
                return 
    false;
            }
            return 
    true;
        }

        @
    Override
        
    public int hashCode() {
            
    int hash 7;
            
    hash 59 hash Objects.hashCode(this.name);
            return 
    hash;
        }

        @
    Override
        
    public String toString() {
            return 
    "Phone{" "name=" name ", numberPhone=" numberPhone '}';
        }
     
     
    }
    Main class NewMain.java
    PHP:
    package p60930;

    /**
     *
     * @author Thành Nhân <JackV at congdongjava.com>
     */
    public class NewMain {

        
    /**
         * @param args the command line arguments
         */
        
    public static void main(String[] args) {
            
    PhoneBook phoneBook = new PhoneBook();
            
    phoneBook.insertPhone("ABC""000000");
            
    phoneBook.insertPhone("NKH""111111");
            
    phoneBook.insertPhone("ABC""222222");
            
    phoneBook.insertPhone("ADT""333333");
            
    phoneBook.insertPhone("TTC""444444");
            
    phoneBook.insertPhone("NKH""555555");

            
    phoneBook.removePhone("NKH");
            
    System.out.println("The final phone book's item count is: " phoneBook.size());
        }
    }
    RUN:
    Code:
    run:
    Phone{name=ABC, numberPhone=000000} is added, total: 1
    Phone{name=NKH, numberPhone=111111} is added, total: 2
    Phone{name=ABC, numberPhone=222222} with named ABC is exists
    Phone{name=ADT, numberPhone=333333} is added, total: 3
    Phone{name=TTC, numberPhone=444444} is added, total: 4
    Phone{name=NKH, numberPhone=555555} with named NKH is exists
    Phone{name=NKH, numberPhone=} is removed
    The final phone book's item count is: 3
    BUILD SUCCESSFUL (total time: 0 seconds)
    
    Vậy nhé, có gì k hiểu thì trao đổi.
     
    Last edited: 6/1/18
    Đức Việt likes this.
  3. JackV

    JackV Administrator Staff Member

    @Đức Việt
    Kiểu 2 dùng interface sẽ viết như thế này
    PhoneList.java
    PHP:
    package p60930i;

    /**
     *
     * @author Thành Nhân <JackV at congdongjava.com>
     */
    public interface PhoneList {

        
    void insertPhone(String nameString Phone);

        
    void removePhone(String name);
    }
    PhoneBook.java
    PHP:
    package p60930i;

    import java.util.ArrayList;

    /**
     *
     * @author Thành Nhân <JackV at congdongjava.com>
     */
    public class PhoneBook extends ArrayList implements PhoneList {

        @
    Override
        
    public void insertPhone(String nameString Phone) {
            
    Phone p = new Phone(namePhone);
            if (
    contains(p)) {
                
    System.out.println(p.toString() + " with named " p.getName() + " is exists");
            } else {
                
    add(p);
                
    System.out.println(p.toString() + " is added, total: " size());
            }
        }

        @
    Override
        
    public void removePhone(String name) {
            
    Phone p = new Phone(name"");// chỉ cần có name để so sánh
            
    int index indexOf(p);
            if (
    index != -1) {
                
    System.out.println(p.toString() + " is removed");
                
    remove(index);//remove(p) thì k cần index
            
    } else {
                
    System.out.println("The phone with the name " name "is not exists");
            }
        }
    }
    Phone.java
    PHP:
    package p60930i;

    import java.util.Objects;

    /**
     *
     * @author Thành Nhân <JackV at congdongjava.com>
     */

    public class Phone {

        
    String name;
        
    String numberPhone;

        public 
    Phone() {
        }

        public 
    Phone(String nameString numberPhone) {
            
    this.name name;
            
    this.numberPhone numberPhone;
        }

        public 
    String getName() {
            return 
    name;
        }

        public 
    void setName(String name) {
            
    this.name name;
        }

        public 
    String getNumberPhone() {
            return 
    numberPhone;
        }

        public 
    void setNumberPhone(String numberPhone) {
            
    this.numberPhone numberPhone;
        }

        @
    Override
        
    public boolean equals(Object obj) {
            if (
    obj == null) {
                return 
    false;
            }
            if (
    getClass() != obj.getClass()) {
                return 
    false;
            }
            final 
    Phone other = (Phoneobj;
            if (!
    Objects.equals(this.nameother.name)) {
                return 
    false;
            }
            return 
    true;
        }

        @
    Override
        
    public int hashCode() {
            
    int hash 7;
            
    hash 59 hash Objects.hashCode(this.name);
            return 
    hash;
        }

        @
    Override
        
    public String toString() {
            return 
    "Phone{" "name=" name ", numberPhone=" numberPhone '}';
        }
     
     
    }
    NewMain.java
    PHP:
    package p60930i;

    /**
     *
     * @author Thành Nhân <JackV at congdongjava.com>
     */
    public class NewMain {

        
    /**
         * @param args the command line arguments
         */
        
    public static void main(String[] args) {
            
    PhoneBook phoneBook = new PhoneBook();
            
    phoneBook.insertPhone("ABC""000000");
            
    phoneBook.insertPhone("NKH""111111");
            
    phoneBook.insertPhone("ABC""222222");
            
    phoneBook.insertPhone("ADT""333333");
            
    phoneBook.insertPhone("TTC""444444");
            
    phoneBook.insertPhone("NKH""555555");

            
    phoneBook.removePhone("NKH");
            
    System.out.println("The .final. phone book's item count is: " phoneBook.size());
        }
    }
    Run:
    Code:
    run:
    Phone{name=ABC, numberPhone=000000} is added, total: 1
    Phone{name=NKH, numberPhone=111111} is added, total: 2
    Phone{name=ABC, numberPhone=222222} with named ABC is exists
    Phone{name=ADT, numberPhone=333333} is added, total: 3
    Phone{name=TTC, numberPhone=444444} is added, total: 4
    Phone{name=NKH, numberPhone=555555} with named NKH is exists
    Phone{name=NKH, numberPhone=} is removed
    The .final. phone book's item count is: 3
    BUILD SUCCESSFUL (total time: 0 seconds)
    
     
    Last edited: 6/1/18
  4. Cám ơn anh đã trả lời nhưng vì Phone là 1 lớp abstract(theo đề bài) nên sẽ không có Phone phone = new Phone() được
    và trong lớp Phone có 2 phương thức là insertPhone và lớp removePhone
    đề bài cũng nói rõ là lớp PhoneBook kế thừa lớp Phone mà anh
     
  5. JackV

    JackV Administrator Staff Member

    2 cái cấu trúc đó là ví dụ cho bạn hiểu thôi vì
    - Phone được xác định là duy nhất bởi số phone chứ k phải tên như đề bài (remove by name), nếu chỉ xác định trùng nhau theo tên thì 1 số phone có nhiều tên vậy thì lúc tìm kiếm số phone thì k biết số nào.
    - Bạn phải đọc hiểu cái câu
    rồi đọc code mới xem cách viết thế nào để viết lại cho cái của bạn, nếu k dc thì post lên, học là như vậy.

    ===
    Đề bài chưa xác định trường hợp 1 số điện thoại nhập cho nhiều name.
    Theo đề bài thì không thể có name trùng nhau, ....
    ...
    ...
    Lần sau bạn nên post kèm đề bài. Còn sức mạnh của arrays list nó nằm ở tất cả các phương thức mà nó cung cấp, xem thêm https://www.google.com/search?q=javaapi+arrayslist
     
    Last edited: 7/1/18

Chia sẻ trang này

Loading...