1. 程式人生 > >Java中的equals方法和自定義比較器

Java中的equals方法和自定義比較器

class Student
{
	private String name;
	private int age;

	Student(String name,int age)
	{
		this.name = name;
		this.age = age;
	}
	
	public String getName()
	{
		return name;
	}
	public int getAge()
	{
		return age;
	}
}

//自定義比較器:先按名字來排序,如果名字相同再按年齡
class Mycompare implements Comparator
{
	public int compare(Object o1,Object o2)
	{
		Student s1 = (Student)o1;
		Student s2 = (Student)o2;

		int num = s1.getName().compareTo(s2.getName());
		if (num == 0)
			return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
		return num;
	}
}
class Test 
{
	public static void main(String[] args) 
	{
		TreeSet<Student> ts = new TreeSet<Student>(new Mycompare());

		ts.add(new Student("lisi02",22));
		ts.add(new Student("lisi02",21));
		ts.add(new Student("lisi007",20));
		ts.add(new Student("lisi09",19));
		ts.add(new Student("lisi06",18));
		ts.add(new Student("lisi06",18));
		ts.add(new Student("lisi007",29));
				
		for (Iterator<Student> it = ts.iterator();it.hasNext() ; )
		{
			Student stu = it.next();
			System.out.println(stu.getName()+".."+stu.getAge());
		}
	}
}

相關推薦

Javaequals方法定義比較

class Student { private String name; private int age; Student(String name,int age) { this.name = name; this.age = age; } public S

java.equals()方法==號的區別

主方法要進棧 ==號和equals()方法都是比較是否相等的方法,那它們有什麼區別和聯絡呢?  首先,==號在比較基本資料型別時比較的是值,而用==號比較兩個物件時比較的是兩個物件的地址值,實際上.equals()方法比較的就是相當於把變數進行打包,就是比較包裡面的內容: int

淺析Javaequals()方法hashCode方法

今天去面試,總覺得自己什麼都懂了,應該問題不大,當被問到“未重寫的equals()方法和hashCode()方法裡面的內容是什麼?為什麼在重寫equals()方法的同時需要重寫hashCode()方法?”時,說實話,一臉懵逼啊!!! 一、equals()方法 1、什麼時候應

Collections之sort的兩個方法(自然排序定義比較排序)

Collections是個服務於Collection的工具類(靜態的),它裡面定義了一些集合可以用到的方法。 本文演示了Collections類裡sort()的兩個方法。第一種只需傳入被排序的集合,便會為它自然排序。但有時我們需要自定義排序的方式,這是我們就得定義一個比較器

利用List的sort方法定義比較對類屬性進行排序

JDK1.8之後,List新增了sort方法,使用Comparator作為引數,呼叫者可自定義比較規則。 User user1 = new User(12, "張三"); User use

淺談JavaScript--Array陣列sort()排序方法定義比較的使用

陣列的排序的重要性不必多說,到處可見,現在來說說sort()方法的使用與自定義比較器 sort()方法:預設將陣列中的所有元素轉為字串後再排列(預設是升序),用來排列字串型別的元素 比如一個數組:

C#排序函式定義比較

在C#中,要比較兩個陣列,可以呼叫 System.Array.Sort(...)方法 List等也有Sort()方法 有兩種方式可以為自己的類提供排序; 1.類實現介面 IComparable 2.建立比較器類,該類實現介面IComparer 第二種方法的優點是,你可

java Collections.sort()實現List排序的默認方法定義方法

public get object 順序 text main 輸出 any 比較 1.java提供的默認list排序方法 主要代碼: List<String> list = new ArrayList();list.add("劉媛媛"); list.add("王

java Collections.sort()實現List排序的預設方法定義方法

1.java提供的預設list排序方法 主要程式碼: List<String> list = new ArrayList();list.add("劉媛媛"); list.add("王碩"); list.add("李明"); list.add("劉迪");

java如何創建定義異常Create Custom Exception

公司 最好 static content turn 而且 否則 系統 tms 9.創建自定義異常 Create Custom Exception (視頻下載) (全部書籍) 馬克-to-win:我們可以創建自己的異常:checked或unchecked異常都可以, 規則如

java類載入機制定義類載入

類載入順序 上圖所示的是類載入的順序,按照大的順序可以分為載入、連結、初始化 其中連結又可以分成驗證、準備、解析三個步驟 載入 1.將類的class檔案讀入到記憶體中 載入類檔案的方式有: 1. 本機檔案載入 2.jar包載入 3.網路載入 4.原始檔動態編譯載入

Javaequals方法造成空指標異常的原因

問題: 當查詢已修改的與未修改的做比較的時候,之前為null的值呼叫equals方法與其他值做比較的時候,會導致丟擲空指標異常 反思: 為了避免記憶體溢位,我們在無需類外呼叫的方法前,一般不加static關鍵字(因為靜態方法會常駐記憶體,其生存週期與整個專案的生存週期是一致的)所以,我們

java靜態方法非靜態方法的區別

靜態方法和非靜態方法主要有兩個區別: 1.在外部呼叫靜態方法時,可以使用"類名.方法名"的方式,也可以使用"物件名.方法名"的方式。而例項方法只有後面這種方式。也就是說,呼叫靜態方法可以無需建立物件。 2.靜態方法在訪問本類的成員時,只允許訪問靜態成員(即靜態成員變數和靜態方法),而

Javastatic方法普通方法的區別

在類中使用static修飾的靜態方法會隨著類的定義而被分配和裝載入記憶體中;而非靜態方法屬於物件的具體例項,只有在類的物件建立時在物件的記憶體中才有這個方法的程式碼段。 注意:非靜態方法既可以訪問靜態資料成員 又可以訪問非靜態資料成員,而靜態方法只能訪問靜

java legth方法length()方法的區別

在java中String類可以定義字串變數和字串陣列, length()用於求String字串物件的長度, String str = “na ab js”; String[] str1 = new String[]{“nihao”,“天”,“地”,“人”}; S

java普通方法構造方法的區別

普通方法:    語法:[修飾符] 返回值型別 方法名(引數){方法體}    返回值型別:void無返回值,還有基本資料型別    例:public void test(String name){System.out.println(name);} 構造方法:  

#資料結構與演算法學習筆記#劍指Offer30:把陣列排成最小的數 + 定義比較 + 測試用例(Java、C/C++)

2018.10.6 1.求全排列最小。事實上用全排列硬剛這道題確實是最直接的辦法,因為乍一眼看上去實在不好歸納數字之間的順序關係,全排列具體實現原理可以參考上述文章。 2.自定義比較器。為什麼說

java netty socket庫定義C#socket庫利用protobuf進行通訊完整例項

之前的文章講述了socket通訊的一些基本知識,已經本人自定義的C#版本的socket、和java netty 庫的二次封裝,但是沒有真正的發表測試用例。 本文只是為了講解利用protobuf 進行C# 和 java的通訊。以及完整的例項程式碼 java 程式碼 svn 地址,本人開發工具是NetBean

深入javaequals方法hashCode方法

Every Java object inherits a set of base methods from java.lang.Object that every client can use: Creational methods Object(

java註解詳解定義註解

本文首先介紹了註解的基本概念和JDK內建的標準註解,然後介紹瞭如何自定義註解,最後給出了自定義註解的例子。 一、註解的基本概念 Java 註解就像修飾符一樣,可以用於從java程式碼中抽取文件、跟蹤程式碼中的依賴性或者在編譯時做檢查。註解可以被應用在包、類、