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

[Support] Lỗi ArrayList<> .contains

Discussion in 'Xây dựng ứng dụng server-client desktop' started by giant26, 26/1/12.

  1. giant26

    giant26 Member

    Em có đối tượng Người có các thuộc tính (Tên, tuổi, giới tính)
    Khi khai báo:
    Code:
         ArrayList<Nguoi> arrNguoi = new ArrayList<Nguoi>();
    		Nguoi n1 = new Nguoi();
    		n1.setTen("abc");
    		n1.setTuoi(22);
    		n1.setGioiTinh("male");
    
    		Nguoi n2 = new Nguoi();
    		n2.setTen("abc");
    		n2.setTuoi(22);
    		n2.setGioiTinh("male");
    
    		for(int i = 0 ; i<2; i++){	
    			System.out.println("contains = " + arrNguoi.contains(n1));
    			//lần 1: false, lần 2 đối tượng n1 đã được gán
                            // bằng n2(có cùng thuộc tính y chang n1)
                            // -> tại sao cũng false, phải là true mới đúng?
    			if(!arrNguoi.contains(n1)){
    				arrNguoi.add(n1);
                            }
    			n1= n2;
    		}
    Kết quả trong arrNguoi có 2 Nguoi giống nhau.
    Em làm với đối tượng Interger thì được, còn với đối tượng Nguoi thì hàm contains bị sai? Mong các anh hướng dẫn :)
     
  2. JackV

    JackV Administrator Staff Member

    Ðề: [Support] Lỗi ArrayList<> .contains

    Post class Nguoi lên đi bạn
    class Người phải override lại phương thức equals và hashcode để so sánh giá trị mà bạn muốn.
     
  3. giant26

    giant26 Member

    Ðề: [Support] Lỗi ArrayList<> .contains

    Cảm ơn anh, vậy là em chưa override rồi :)
    Code:
    public class Nguoi implements Serializable, Comparable<Nguoi>{
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	private String ten;
    	private int tuoi;
    	private boolean gioiTinh;
    	/**
    	 * @return the ten
    	 */
    	public String getTen() {
    		return ten;
    	}
    	/**
    	 * @param ten the ten to set
    	 */
    	public void setTen(String ten) {
    		this.ten = ten;
    	}
    	/**
    	 * @return the tuoi
    	 */
    	public int getTuoi() {
    		return tuoi;
    	}
    	/**
    	 * @param tuoi the tuoi to set
    	 */
    	public void setTuoi(int tuoi) {
    		this.tuoi = tuoi;
    	}
    	/**
    	 * @return the gioiTinh
    	 */
    	public boolean isGioiTinh() {
    		return gioiTinh;
    	}
    	/**
    	 * @param gioiTinh the gioiTinh to set
    	 */
    	public void setGioiTinh(boolean gioiTinh) {
    		this.gioiTinh = gioiTinh;
    	}
    	@Override
    	public int compareTo(Nguoi o) {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    	
    }
    Em cứ nghĩ Tết hông còn ai trên diễn đàn :D cảm ơn BQT, chúc BQT ăn Tết vui vẻ và dồi dào sức khỏe :)
     
    mai220111 likes this.
  4. JackV

    JackV Administrator Staff Member

    Ðề: [Support] Lỗi ArrayList<> .contains

    :D bạn có thể khai báo như thế này
    PHP:
    public class Nguoi {

        private 
    String ten;
        private 
    int tuoi;
        private 
    boolean gioiTinh;

        public 
    Nguoi(String tenint tuoiboolean gioiTinh) {
            
    this.ten ten;
            
    this.tuoi tuoi;
            
    this.gioiTinh gioiTinh;
        }

        @
    Override
        
    public boolean equals(Object obj) {
            if (
    obj == null) {
                return 
    false;
            }
            if (
    getClass() != obj.getClass()) {
                return 
    false;
            }
            final 
    Nguoi other = (Nguoiobj;
            if ((
    this.ten == null) ? (other.ten != null) : !this.ten.equals(other.ten)) {
                return 
    false;
            }
            if (
    this.tuoi != other.tuoi) {
                return 
    false;
            }
            if (
    this.gioiTinh != other.gioiTinh) {
                return 
    false;
            }
            return 
    true;
        }

        @
    Override
        
    public int hashCode() {
            
    int hash 7;
            return 
    hash;
        }
        
        
    }
    Mình thường hiện thực cái Comparable<Nguoi> khi sử dụng Collections.sort danh sách các đối tượng theo giá trị của trường nào đó.
     
    mai220111 likes this.
  5. giant26

    giant26 Member

    Ðề: [Support] Lỗi ArrayList<> .contains

    Cảm ơn anh rất nhiều, cái hash = 7 trong hashCode có nghĩa và dùng để dùng trong trường hợp nào vậy anh (nếu chỉ dùng contains thì override equals là đủ)
     
  6. JackV

    JackV Administrator Staff Member

Chia sẻ trang này

Loading...