算法6-5:哈希表应用之集合

能够通过哈希表实现高效的集合操作。

接口

一个集合对象能够包括了下面接口:

public interface Set<Key extends Comparable<Key>> {
    public void add(Key key);
    public boolean contains(Key key);
    public void remove(Key key);
    public int size();
    public Iterator<Key> iterator();
}

黑名单过滤应用

代码

import java.util.Set;
import java.util.LinkedHashSet;

public class BlackList {
    public static void main(String[] argv) {
        String[] urls = new String[]{"baidu.com", "abc.com", "porn.com", "youtube.com", "facebook.com"};
        String[] blacklist = new String[]{"porn.com", "youtube.com", "facebook.com"};

        // 建立黑名单集合
        Set<String> black = new LinkedHashSet<String>();
        for(String b : blacklist) {
            black.add(b);
        }

        // 过滤非法站点
        for(String url : urls) {
            if(!black.contains(url)) {
                System.out.println(url);
            }
        }
    }
}

输出结果:

baidu.com
abc.com
porn.com is blocked
youtube.com is blocked
facebook.com is blocked

从输出结果中能够看出,一些非法站点被过滤了。

时间: 2024-10-17 15:12:10

算法6-5:哈希表应用之集合的相关文章

算法6-4:哈希表现状

战争故事 非常久非常久以前,以前发生过非常多关于哈希函数的战争故事. 那些战争的基本原理就是通过精心构造造成大量的哈希冲突从而占用大量的CPU资源. 被攻击的软件例有下面样例: 带有漏洞的server:攻击者精心构造哈系冲突.仅仅须要56K的网速就能让server死机,从而达到DOS攻击的目的. Perl 5.8.0:攻击者精心构造哈系冲突插入到关联数组中 Linux 2.4.20 内核:攻击者精心构造文件名称,造成大量哈系冲突从而让系统性能骤降. 攻击原理 在Java中的String对象非常e

数据结构与算法07 之哈希表

哈希表也称为散列表,是根据关键字值(key value)而直接进行访问的数据结构.也就是说,它通过把关键字值映射到一个位置来访问记录,以加快查找的速度.这个映射函数称为哈希函数(也称为散列函数),映射过程称为哈希化,存放记录的数组叫做散列表.比如我们可以用下面的方法将关键字映射成数组的下标:arrayIndex = hugeNumber % arraySize. 哈希化之后难免会产生一个问题,那就是对不同的关键字,可能得到同一个散列地址,即同一个数组下标,这种现象称为冲突,那么我们该如何去处理冲

算法练习--二分搜索哈希表-JS 实现

1. 以哈希KEY的值建立二叉哈希表 2. 根据传入的哈希值使用二分法搜索 具体实现如下: function binarySearchTable(comp){ this.comp = comp; this.kv = new Array(); } binarySearchTable.prototype.add = function(k,v){ if(this.kv.length == 0 || this.comp(this.kv[0].key,k) >= 0){ this.kv.splice(0,

哈希表,队列集合,栈集合,自定义函数

1  1)哈希表 定义:(不规定长度,不规定类型,不规定键的类型) Hashtable  ht=new hashtable(); (点击小灯泡用using system.collection) 2)赋值: (1): ht['a']=1; ht[0]="b"; ht["b"]='c'; (2) : ht.Add(1,d);               :相当于ht[1]=d 哈希表遍历 : 1)        foreach(var x in ht.keys ) {

算法设计7—哈希表1

哈希表详解

最近在做负荷分担的优化,将数据流均匀分到八条流中,学习点哈希算法 什么是哈希表?     哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数,存放记录的数组叫做散列表.说白了哈希表的原理其实就是通过空间换取时间的做法..     哈希表的做法其实很简单,就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长

哈希表知识点总结

一.基本原理: 假设我们使用一个下标范围比较大的数组来存储元素.设计一个函数(哈希函数,也叫做散列函数),使得每个元素的关键字经过函数运算得到一个函数值(即数组下标),于是用这个数组单元来存储这个元素.通过函数值即数组下标就可以查找数据元素了. 直接定址"与"解决冲突"是哈希表的两大特点. 二.优点: 把数据的存储和查找消耗的时间大大降低,几乎可以看成是常数时间:而代价仅仅是消耗比较多的内存.然而在当前可利用内存越来越多的情况下,用空间换时间的做法是值得的. 三.构造方法:

简单的哈希表实现 C语言

简单的哈希表实现 简单的哈希表实现 原理 哈希表和节点数据结构的定义 初始化和释放哈希表 哈希散列算法 辅助函数strDup 哈希表的插入和修改 哈希表中查找 哈希表元素的移除 哈希表打印 测试一下 这是一个简单的哈希表的实现,用c语言做的. 原理 先说一下原理. 先是有一个bucket数组,也就是所谓的桶. 哈希表的特点就是数据与其在表中的位置存在相关性,也就是有关系的,通过数据应该可以计算出其位置. 这个哈希表是用于存储一些键值对(key -- value)关系的数据,其key也就是其在表中

浅谈算法和数据结构: 十一 哈希表

在前面的系列文章中,依次介绍了基于无序列表的顺序查找,基于有序数组的二分查找,平衡查找树,以及红黑树,下图是他们在平均以及最差情况下的时间复杂度: 可以看到在时间复杂度上,红黑树在平均情况下插入,查找以及删除上都达到了lgN的时间复杂度. 那么有没有查找效率更高的数据结构呢,答案就是本文接下来要介绍了散列表,也叫哈希表(Hash Table) 什么是哈希表 哈希表就是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值. 哈希的思路很简单