set集合比較特殊,他的方法基本上和collection介面的方法一致,並且他沒有根據索引得到對應值的get(int index)方法. 更重要的是set集合不能放置重複的元素.她是怎麼判斷的呢?那麼,我們首先要讓物件具有比較性
一,儲存的自定義物件實現介面 comparable
複寫public int compareto()方法. 返回0表示二者相等. 如果返回大於0的整數(一般寫1),則認為該物件大於比較的物件.如果返回小於0的整數(一般是-1),則認為該物件小於比較的物件.
下面我們定義乙個類person,如果物件的年齡相等,我們就認為這兩個物件相等
public
static
void
main(string args)
private
static
void
testtreeset()
system.out.println("size = "+treeset.size());
}static class person implements comparable
public string getname()
public
void
setname(string name)
public
intgetage()
public
void
setage(int age)
@override
public
inthashcode()
@override
public
boolean
equals(object obj) else
return b;
}@override
public string tostring()
@override
public
intcompareto(person o)
if (this.age > o.getage())
return -1;
}}
執行結果為:
person [name=tom, age=20]
person [name=jim, age=21]
size = 2
由此分析,在操作treeset.add(new person(「jim」, 20));的時候認為他是乙個相同的物件,那麼就無法再放入了
二,儲存的自定義物件實現介面 comparable
public
static
void
main(string args)
private
static
void
testtreeset()
if (o1.getage() > o2.getage())
return -1;
}});
treeset.add(new person("tom", 20));
treeset.add(new person("jim", 21));
treeset.add(new person("jim", 20));
iteratorit = treeset.iterator();
while (it.hasnext())
system.out.println("size = "+treeset.size());
}static class person
public string getname()
public
void
setname(string name)
public
intgetage()
public
void
setage(int age)
@override
public string tostring()
}
結果是:
person [name=tom, age=20]
person [name=jim, age=21]
size = 2
存入了兩個結果.
treeset.add(new person(「jim」, 20)); jim的年齡和tom相同被認為是一樣的物件
去除Set集合中的重複元素
去除 set 集合的重複元素的方法與 equals hashcode 方法有關 class person public class test1當你這樣輸出的時候,有可能會存在相同的元素存在 set 集合中,是因為你沒有重寫 equals hashcode 方法 class person public...
217 存在重複元素(set)
給定乙個整數陣列,判斷是否存在重複元素。如果任意一值在陣列 現至少兩次,函式返回 true 如果陣列中每個元素都不相同,則返回 false 示例 1 輸入 1,2,3,1 輸出 true 示例 2 輸入 1,2,3,4 輸出 false 示例 3 輸入 1,1,1,3,3,4,3,2,4,2 輸出 ...
判斷陣列中的重複元素
問題,有乙個n 1個元素的陣列,包含1到n的n個數,外加乙個重複元素,將這個重複元素找出。方法一 使用置換法,由於下標是從0開始,如果nums i i 1,說明元素是放在正確的位置,繼續判斷。如果nums i nums nums i 1 說明nums i 就是重複元素,是要求找到的,否則就轉換num...