黑马程序员技术交流社区
标题:
【上海校区】java集合(3) Set
[打印本页]
作者:
不二晨
时间:
2018-8-2 15:02
标题:
【上海校区】java集合(3) Set
Set和Collection相比并没有提供更多处理数据的方法,Set中的对象是无序的,可以说Set就是Collection
需要指出的是Set中不允许有相同的元素(说明:Set中不是 == 来判断两个元素是否相等的(以前的博文有说明过 == 是比较物理地址的),Set是通过equals()方法和hashCode()来判断的,即equals()返回true,同时hashCode()返回值相同时将两个对象判定为同一个对象)
HashSet是Set类的主要实现类,以下代码说明了Set如何判定两个对象是否相同
//当向HashSet中存入A,B对象时,只有这连个对象的equals返回为true
// 和hashCode一样的时候,HashCode才会把它们当成一个对象
package Set;
import java.util.HashSet;
class
A
{
public boolean equals(Object obj){
return
true
;
}
}
class
B
{
public int hashCode(){
return
2
;
}
}
class
C
{
public int hashCode(){
return
3
;
}
public boolean equals(Object obj){
return
true
;
}
}
public
class
HashSetTest
{
public static void main(String args[]){
HashSet books =
new
HashSet();
books.
add
(
new
A());
books.
add
(
new
A());
books.
add
(
new
B());
books.
add
(
new
B());
books.
add
(
new
C());
books.
add
(
new
C());
System.
out
.println(books);
}
}
//输出结果为
// [Set.B@2, Set.B@2, Set.C@3, Set.A@13b6d03, Set.A@f5f2bb7]
最后介绍一下LinkedHashSet类,LinkedHashSet类就是使用链表来维护集合元素的顺序~~也没啥好特殊的
一下为代码实例
//LinkedHashSet就是普通的hashset加上链式结构存储
package Set;
import java.util.LinkedHashSet;
public
class
LinkedHashSetTest
{
public static void main(String args[]){
LinkedHashSet books =
new
LinkedHashSet();
books.
add
(
"java1"
);
books.
add
(
"java2"
);
System.
out
.println(books);
// 输出 [java1, java2]
books.
remove
(
"java1"
);
books.
add
(
"java1"
);
System.
out
.println(books);
// 输出 [java2, java1]
}
}
作者:
不二晨
时间:
2018-8-2 17:29
奈斯,棒棒哒
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2