HashSet and TreeSet in Java


Hôm nay mình sẻ tiếp tục các bài trong phần data structure.

Source code : Download

Bài viết đầu tiên mình đả dùng ArrayList để cho thấy việc sử dụng 1 collection in java như thế nào, và vấn đề duplicate các phần tử trong List được giải quyết hôm nay.

Để né tránh duplicate các phần tử thì việc sữ dụng SET là sự lựa chọn ok ^^!.

Sau đây có đôi chút sự khác biệt giữa HashSet và TreeSet

HashSet TreeSet Phân loại
Implement từ interface SET. Implement từ interface SortedSet và SortedSet implement interface SET Implement
Default chưa được sắp xếp. Sắp xếp dựa trên việc implement Comparable or implement Comparator. Defaul được sắp xếp Sort
No-Duplicate các phần tử No-Duplicate các phần tử Duplicate
So sánh các phần tử để phân biệt duplicate dựa trên Hashcode – Equal So sánh và sắp xếp dựa trên Comparator or Comparable (*) Yếu tố tác động duplicate and sort

 

chúng ta tạo sử dụng lại class Person.java của bài 1

package thaihoanghai.set;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Person implements Comparable<Person>{
	private String id;
	private String name;
	private String address;
	private int age;
	private Date birthDay;

	public Person() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Person(String id, String name, String address, int age, Date birthDay) {
		super();
		this.id = id;
		this.name = name;
		this.address = address;
		this.age = age;
		this.birthDay = birthDay;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Date getBirthDay() {
		return birthDay;
	}
	public void setBirthDay(Date birthDay) {
		this.birthDay = birthDay;
	}

	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Person other = (Person) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}
	@Override
	public String toString() {
		return this.id +" - "+this.name;
	}

	public String getMyDate(Date mydate){
		String result = new SimpleDateFormat("dd/MM/yyyy").format(mydate);
		return result;
	}

	/**
	 * Note this method when we implement interface comparable , we must override method compareTo
	 * At here we sort by Name's person
	 */
	@Override
	public int compareTo(Person obj) {
		return this.name.compareTo(obj.name);
	}

}

Chúng ta tạo 1 class TestSet.java như sau :

package thaihoanghai.set;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

public class TestSet {
	List<Person> personList = new ArrayList<Person>();

	@SuppressWarnings("deprecation")
	public TestSet() {
		personList.add(new Person("ID003", "Ducky", "A24/3/2", 19, new Date("10/10/1990")));
		personList.add(new Person("ID003", "Justina", "A24/3/2", 18, new Date("10/10/1993")));
		personList.add(new Person("ID001", "Kobee", "D24/3/2", 20, new Date("10/10/1991")));
		personList.add(new Person("ID001", "Jenny", "B24/3/2", 21, new Date("10/10/1990")));

	}

	public void sortPersonByName(){
		System.out.println("Before-------------------------------");
		System.out.println(personList);
		//Collections.sort(personList);

		System.out.println("\n\n\nAfter-------------------------------");
		System.out.println("Using HashSet..........................");
		// NOTE -------^^! =]] =]] =]]............................
		Set<Person> personSet = new HashSet<Person>();
		personSet.addAll(personList);
		System.out.println(personSet);

		System.out.println("\n\n\nAfter-------------------------------");
		System.out.println("Using TreeSet.........................");
		Set<Person> personTreeSet = new TreeSet<Person>(new Comparator<Person>() {
			@Override
			public int compare(Person p1, Person p2) {			
				return p1.getId().compareTo(p2.getId());
			}
		});
		personTreeSet.addAll(personList);
		System.out.println(personTreeSet);

	}

	public static void main(String[] args) {
		TestSet test = new TestSet();
		test.sortPersonByName();
	}
}

Sau đây là kết qua sau khi chạy:

d1

 

Hy vọng hữu ích cho các bạn

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: