30/09/2018, 18:53

Hỏi cách sắp xếp theo thuộc tính là String khi thêm đối tượng vào HashSet

Em muốn sắp xếp các đối tượng thêm vào hs dựa trên thuộc tính name vậy ở phương thức hashCode() em phải viết như thế nào???

public class test {
	
	    public static void main(String args[])
	    {
	    	HashSet hs =new HashSet();
		     hs.add(new State("dfh", 5));
		     hs.add(new State("fgh", 7));
		     hs.add(new State("hkh", 4));
		     hs.add(new State("we", 9));
		     hs.add(new State("jfgh", 1));
		      
		     for(Iterator i=hs.iterator();i.hasNext();)
		     {
		          System.out.println(i.next());
		     }
	    }
}
public class State
{
	private String name;
	private int population;
	
	public State(String name, int population)
	{
		super();
		this.name = name;
		this.population = population;
	}	

	public String getName()
	{
		return this.name;
	}
	
	public int getPopulation()
	{
		return this.population;
	}
	public String toString()
	{
		return getName() + " - " + getPopulation();
	}

	@Override
	public int hashCode() {
		/*String s = name.substring(0, 1);
		return Integer.parseInt(s);*/
	}
}
Interns viết 20:59 ngày 30/09/2018

anh @CuongNguyen giúp em với

Đỗ Trung Quân viết 21:08 ngày 30/09/2018

HashSet doesn’t sort elements, in fact it displays them in random order. While dealing with HashSet we may come across a situation where we need to sort it explicitly. we need to write a logic to sort them when required. In this article we are going to see an example where we are sorting a HashSet using two different methods.

/* Program to Sort a HashSet using two different 
 * methods. 
 * Method 1:By using List interface
 * Method 2:By using TreeSet
 */
import java.util.Collections;
import java.util.ArrayList;
import java.util.List;
import java.util.HashSet;
import java.util.TreeSet;

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

       HashSet<String> fruits = new HashSet<String>();
           
       fruits.add("Orange");
       fruits.add("Apple");
       fruits.add("Banana");
       fruits.add("Guava");
       fruits.add("Pear");
           
       System.out.println("HashSet elements before sorting: "+fruits);
           
           
       // Method 1: Sorting HashSet using List interface
       List<String> fruitList = new ArrayList<String>(fruits);
       Collections.sort(fruitList);
           
       // Displaying list
       System.out.println("HashSet elements after sorting: "+fruitList);
           
       // Method 2: Sorting using TreeSet
       TreeSet<String> tset = new TreeSet<String>(fruits);
           
       System.out.println("HashSet elements after using TreeSet: "+tset);
   }

}

Output:

HashSet elements before sorting: [Pear, Guava, Apple, Banana, Orange]
HashSet elements after sorting: [Apple, Banana, Guava, Orange, Pear]
HashSet elements after using TreeSet: [Apple, Banana, Guava, Orange, Pear]

Đỗ Trung Quân viết 21:08 ngày 30/09/2018
public class SortByLastName implements Comparator<FullName>{
    public int compare(FullName n1, FullName n2) {
        return n1.getLastName().compareTo(n2.getLastName());
    }
}

TreeSet<FullName> names = new TreeSet<FullName>(new SortByLastName());

Em đọc không hiểu có thể hỏi tiếp

Interns viết 21:05 ngày 30/09/2018

// Method 1: Sorting HashSet using List interface
List<String> fruitList = new ArrayList<String>(fruits);
Collections.sort(fruitList);
[/quote][quote=“qtd, post:3, topic:17183”]
// Method 2: Sorting using TreeSet
TreeSet<String> tset = new TreeSet<String>(fruits);

Cái này trong không thú vị lắm nếu dùng thế này thì ngay từ đầu ta dùng List hoặc TreeSet lưu trữ luôn thì dễ dàng hơn nhiều!

Cái em cần là ta vẫn dùng HashSet để lưu trữ nhưng nó lưu trữ các phần tử dựa vào HashCode mà HashCode lại trả về kiểu int nên ta chỉ sắp xếp được các thuộc tính có kiểu int ví dụ là:

@Override
	public int hashCode() {
		return population; // population là 1 thuộc tính kiểu int
	}

Còn sắp xếp theo thuộc tính là kiểu String, em không biết viết thế nào??

Ở trên em đã hỏi rõ rồi đó anh, anh đọc kỹ lại sẽ hiểu ý em muốn hỏi gì đấy

Đỗ Trung Quân viết 20:59 ngày 30/09/2018

Ở trên em đã hỏi rõ rồi đó anh, anh đọc kỹ lại sẽ hiểu ý em muốn hỏi gì đấy

Em đọc kỹ cái rep1 của anh? Anh đã nói là trong hashset không sort các phần tử bên trong nó. Mà đặc biệt là hashcode sinh ra chỉ để trả về giá trị chứ không sort. Muốn sort em phải implement comperator hoặc sử dụng gói collections như ví dụ 1 hoặc 2

Interns viết 21:07 ngày 30/09/2018

Em hiểu rồi. Em cảm ơn anh nhe!

Bài liên quan
0