Java中散列集的浅谈

散列表是一种众所周知的数据结构,可以快速地查找所需要的对象,在Java中散列表是通过链表数组实现,而每个列表又被称为桶(bucket)。


在Java SE8中桶满时就会变为平衡二叉树。,如果选择散列函数不当,会产生很多冲突,影响性能。尽管没有确凿证据,普遍认为装填因子(load factor)为0.75最好.Java集合类库提供了一个HashSet类,用于实现散列集。

主要方法如下:

构造方法摘要
HashSet() 
          构造一个新的空 set,其底层 HashMap 实例的默认初始容量是 16,加载因子是 0.75。
HashSet(Collection<? extends E> c) 
          构造一个包含指定 collection 中的元素的新 set。
HashSet(int initialCapacity) 
          构造一个新的空 set,其底层 HashMap 实例具有指定的初始容量和默认的加载因子(0.75)。
HashSet(int initialCapacity, float loadFactor) 
          构造一个新的空 set,其底层 HashMap 实例具有指定的初始容量和指定的加载因子。
 
方法摘要
 booleanadd(E e) 
          如果此 set 中尚未包含指定元素,则添加指定元素。
 voidclear() 
          从此 set 中移除所有元素。
 Objectclone() 
          返回此 HashSet 实例的浅表副本:并没有复制这些元素本身。
 booleancontains(Object o) 
          如果此 set 包含指定元素,则返回 true
 booleanisEmpty() 
          如果此 set 不包含任何元素,则返回 true
 Iterator<E>iterator() 
          返回对此 set 中元素进行迭代的迭代器。
 booleanremove(Object o) 
          如果指定元素存在于此 set 中,则将其移除。
 intsize() 
          返回此 set 中的元素的数量(set 的容量)。

以下是一个简单实现:

import java.util.*

public class SetTest
{
	public static void main(string[] args)
	{
		Set<String> words=new HashSet<>();//HashSet实现Set
		long totalTime=0;
		
		try(Scanner in=new Scanner(System.in))
		{
			while(in.hasNext())
			{
				String word=in.next();
				long callTime=System.currentTimeMillis();
				words.add(word)
				callTime=System.currentTimeMillis()-callTime;
				totalTime+=callTime;
				
			}
		}
		Iterator<String>iter=words.iteratir();
		for(int i=1;i<=20;i++)
			System。out.println(iter.next());
		System.out.println(words.size()+"distinct words."+totalTime+"Millseconds.");
		
	}
	
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值