01/10/2018, 00:58

Mọi người giúp em vấn đề về ArrayList trong Java với

Mọi người cho e hỏi giả sử giờ mà em có 1 bài như thế này thì phải xử lý thế nào ?

Lơp cha: có mã sản phầm . Có phương thức nhập xuât. ,Mã , lớp con kế thừa lớp cha , !
Vậy làm sao để dừng nhập khi đã tồn tại mã trong List !
Em cảm ơn !

Quân viết 03:07 ngày 01/10/2018

b1. nhập mã.
b2. check mã tồn tại trong list. Nếu mã tồn tại chuyển đến b5.
b3. insert mã vào list.
b4. quay về bước 1.
b5. return.

Cụ thể cách cài đặt cụ thể phụ thuộc vào các class mà bạn đã tạo. Nhưng phải đảm bảo được thuật toán trên.

anon52681320 viết 03:05 ngày 01/10/2018

Em có 2 cách để giải quyết chỗ này:

  • Một là dùng Map để chứa mã sản phẩm và sản phẩm, khi check tồn tại key mã sản phẩm thì bỏ qua việc nhập.
  • Còn nếu bắt buộc phải dùng ArrayList thì em cho kế thừa lại method equals(Object obj), với điều kiện check là phải !- null, cùng Class, cùng mã sản phẩm. Lúc này dùng method contains nó sẽ compare với mã sản phẩm thay vì compare 2 object cùng giá trị.

Cách 2 sẽ có độ phức tạp là O(n), còn cách 1 sẽ là O(1), tốc độ nhanh hơn nhiều.

Cương Nguyễn viết 03:10 ngày 01/10/2018

Bổ xung thêm cách 2 của bạn, nếu đã implement equals() thì phải thêm hashcode() nữa . nếu không sẽ sai.

anon52681320 viết 03:02 ngày 01/10/2018

Sẽ là chính xác cho việc phải override lại method hashCode() nếu cái collection mình đang dùng là những hashtable collections, chẳng hạn như HashMap, HashTable hay HashSet.
Khi những collection này add hay put vào một element mới, nó sẽ gọi hashCode của object để sắp xếp vào bộ nhớ trong của nó, và đương nhiên nó cũng sẽ được dùng để lookup giá trị (contains() method), và tiếp tục sử dụng equals để lấy ra chính xác.
Còn đối với ArrayList thì nó chỉ duyệt qua toàn bộ elements trong list và sử dụng method equals để kiểm tra việc so sánh.

Bạn có thể kiểm tra lại lần nữa tại đây. Link here
Cám ơn bạn đã góp ý, việc sử dụng 2 method này cũng cực kỳ quan trọng trong việc sử dụng Collections.

public static void main(String[] args) {
    List<Product> list = new ArrayList();
    list.add(new Product("abc", "abc Name"));
    Product test = new Product("abc", "def Name");
    if (!list.contains(test)) {
        list.add(test);
    }
    System.out.println(list.size());
}

public static class Product {

    public Product(String productId, String productName) {
        this.productId = productId;
        this.productName = productName;
    }

    private String productId;
    private String productName;

    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (obj instanceof Product) {
            Product b = (Product) obj;
            return b.productId.equals(this.productId);
        } else {
            return false;
        }
    }
}
Bài liên quan
0