Java学习——Set使用方法以及HashSet和TreeSet的区别,深入理解HashSet如何判断元素是否重复

java学习——Set使用方法以及HashSet和TreeSet的区别

Set为无序集合(无序是指存入元素的先后顺序与输出元素的先后顺序不一致),不允许添加重复元素。Set是个接口,不能直接实例化对象,即Set s=new Set()是错误的

Set的实现类常用的有:HashSet和TreeSet。

1.HashSet和TreeSet的区别:

(1)HashSet是用哈希表(散列表结构)实现的。
HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,根据该值来找到对象的存储位置。然后和该位置上所有的元素进行equals比较,如果该位置没有其他元素或者比较的结果都为false就存进去,否则就不存。即元素是按照哈希值来找存储位置,所有无序,而且可以保证无重复元素
注意:若向HashSet中存储自定义对象时,需要重写hashCode()和equals()方法(不重写的话不会报错,但运行结果和想象不一样,见下面代码)。

深入理解HashSet集合对象如何判断数据元素是否重复:
判断待存对象hashCode值是否与集合中已有元素对象hashCode值相同,如果hashCode不同则表示不重复,不用执行equals()方法; 如果相同则再调用equals方法进行检查,equals返回false表示不重复,否则表示重复。
注意:Java中的hashCode值是由对象的地址所确定的,每一个地址对应一个值。Object类中的equals方法中比较的也是对象的地址值。

(2)TreeSet是用二叉树实现的。
TreeSet可以对Set集合中的元素进行排序,TreeSet中数据是自动排好序的。
TreeSet支持两种排序方式,自然排序和定制排序,其中自然排序为默认的排序方式。
若元素自身不具备比较功能,则需要实现Comparator接口,并覆盖其compare方法。

2.Set示例代码(使用HashSet实现)

下面代码中,集合中存放的不是自定义的存储对象,所以不需要重写HashCode()和equals()。

package demo;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

public class SetTest {
   

	public static void main(String[] args) {
   
		
		//声明一个Set集合对象sd,里面存放的全是Date类型的对象,
		Set<Date> sd;
		sd=new HashSet<Date>();
		
		//输出当前的时间,运行结果为1565836065039
		System.out.println(new Date().getTime());
		
		//创建几个时间对象
		Date a=new Date(1565836065039L);
		Date b=new Date(1565835065039L);
		Date c=new Date(1565834065039L);
		
		//向集合中添加元素,add()方法返回值为boolean类型,若添加成功,返回true;否则为false
		sd.add(a);
		sd.add(b);
		sd.add(c);
		
		//Set中元素不能重复,从下面b1的值以及遍历的输出结果中可以看出。
		
		boolean b1=sd.add(a);
		System.out.
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值