hash函数

reduce学习笔记

ε祈祈猫儿з 提交于 2019-12-02 05:27:48
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终为一个值,是es5新增的一个数组逐项处理的方法。 语法: arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue]) callback:执行数组中每个值的函数,包含四个参数 accumulator:累计器,累计回调的返回值。如何有设置initialValue,则该值为初始值,否则以数组的第一个元素作为初始值。所以,正在没有设置initialValue的空数组上调用reduce将报错 currentValue:当前正在处理的数组元素 currentIndex:当前正在处理的数组元素的索引 - 可选 array:调用reduce方法的数组 - 可选 initialValue:初始值 - 可选 注意:reduce对于空数组是不会执行callback的 下面通过栗子来验证一下: 1、首先验证一下空数组 const arr1 = [ ] arr1 . reduce ( ( a , b , c , d ) => { console . log ( 'a: ' + a , 'b: ' + b , 'c: ' + c , 'd : d ) } ) 对于一个空数组,并且没有给初始值的情况下

Java hashCode() 方法深入理解

自作多情 提交于 2019-12-02 05:26:57
Java.lang.Object 有一个hashCode()和一个equals()方法,这两个方法在软件设计中扮演着举足轻重的角色。在一些类中覆写这两个方法以完成某些重要功能。本文描述了为什么要用hashCode(), 如何使用,以及其他的一些扩展。阅读本文需要有基本的hash算法知识以及基本的Java集合知识,本文属于菜鸟入门级讲解,大神读至此请点击右上角的X,以免浪费您的时间^_^。 WHY hashCode()? 集合Set中的元素是无序不可重复的,那判断两个元素是否重复的依据是什么呢? “比较对象是否相等当然用Object.equal()了”,某猿如是说。但是,Set中存在大量对象,后添加到集合Set中的对象元素比较次数会逐渐增多,大大降低了程序运行效率。 Java中采用哈希算法(也叫散列算法)来解决这个问题,将对象(或数据)依特定算法直接映射到一个地址上,对象的存取效率大大提高。这样一来,当含有海量元素的集合Set需要添加某元素(对象)时,先调用这个元素的hashCode(),就能一下子定位到此元素实际存储位置,如果这个位置没有元素,说明此对象时第一次存储到集合Set, 直接将此对象存储在此位置上;若此位置有对象存在,调用equal()看看这两个对象是否相等,相等就舍弃此元素不存,不等则散列到其他地址。 HOW use hashCode()?

C++哈希表头文件

别来无恙 提交于 2019-12-02 03:12:04
#ifndef _HASHTABLE_H_ #define _HASHTABLE_H_ #include <iostream> #include <cstdlib> using namespace std; typedef enum { Empty, Active, Deleted }kindofitem; typedef struct { int key; }datatype; typedef struct{ datatype data; kindofitem info; }hashitem; typedef struct{ hashitem* arr; int table_size; int current_size; }hashtable; int initiate(hashtable* hash, int size);//初始化哈希表 int find(hashtable* hash, datatype x);//查找x元素对应的关键字 int insert(hashtable* hash, datatype x);//像哈希表中插入数组元素x,及设置它对应的关键字 int deleted(hashtable* hash, datatype x);//从哈希表中删除x数据元素 void destroy(hashtable* hash);//撤销函数 /* int main(

01哈希表

五迷三道 提交于 2019-12-02 02:36:38
1. Hash Table ​ 我们都知道,二叉树、红黑树等数据结构,它们的查找都是先从根节点开始查找,从节点取出数据或者索引与查找值进行比较。 ​ 那么,有没有一种函数H,根据这个函数和查找关键字 Key,可以 直接确定查找值所在的位置 ,而不需要一个个比较。这样叫“预先知道” Key 所在的位置,直接找到数据,提升效率。即: 地址index = H(key) 说白了,hash函数功能就是根据 key 计算出应该存储地址的位置,而哈希表是基于哈希函数建立的一种查找表。 2. 哈希函数的构造方法 ​ 根据前人经验,统计出集中常用 hash 函数构造方法 2.1. 直接定制法 ​ 哈希函数为关键字的线性函数,如 H(key) = a * key + b,这种构造方法比较简单,均匀。但是有很大限制,仅限与地址大小 = 关键字集合的情况。 2.2. 数字分析法 ​ 假设关键字集合中的每个关键字 key 都是由s位数字组成(k1,k2,……,kn),分析 key 中的全体数据,并从中提取分布均匀的若干位或他们的组合构成全体。 ​ 使用举例:假设要保存的集合中 key 由 5 位不同的数字构成。并且这些数字分布均匀,我们可以提取其中一位,代表数据保存的地址。H(key) = key % 100000。 ​ 此种方法通常用于数字位数较长的情况,要求数字存在一定的规律,其次必须知道数字的分布情况

PHP7源码之array_unique函数分析

旧街凉风 提交于 2019-12-02 00:47:28
以下源码基于 PHP 7.3.8 array array_unique ( array $array [, int $sort_flags = SORT_STRING ] ) (PHP 4 >= 4.0.1, PHP 5, PHP 7) array_unique — 移除数组中重复的值 参数说明: array:输入的数组。 sort_flag:(可选)排序类型标记,用于修改排序行为,主要有以下值: SORT_REGULAR - 按照通常方法比较(不修改类型) SORT_NUMERIC - 按照数字形式比较 SORT_STRING - 按照字符串形式比较 SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。 array_unique 函数的源代码在 /ext/standard/array.c 文件中。由于 PHP_FUNCTION(array_unique){ // code... } 篇幅过长,完整代码不在这里贴出来了,可以参见 GitHub 贴出的源代码。 定义变量 zval *array; uint32_t idx; Bucket *p; struct bucketindex *arTmp, *cmpdata, *lastkept; unsigned int i; zend_long sort_type = PHP_SORT_STRING; //

Redis 系列(02)数据结构

Deadly 提交于 2019-12-02 00:10:28
目录 Redis 系列(02)数据结构 Redis 系列目录 1. String 1.1 基本操作 1.2 数据结构 1.3 Redis数据存储结构 2. Hash 2.1 基本操作 2.2 数据结构 3. List 3.1 基本操作 3.2 数据结构 4. Set 4.1 基本操作 4.2 数据结构 5. Sorted Set 5.1 基本操作 5.2 数据结构 6. hyperloglogs 7. geospatial 8. 总结 Redis 系列(02)数据结构 Redis 系列目录 1. String 1.1 基本操作 mset str 2673 jack 666 setnx str incr str incrby str 100 decr str decrby str 100 set f 2.6 incrbyfloat f 7.3 mget str jack strlen str append str good getrange str 0 8 1.2 数据结构 String 字符串类型的内部编码有三种: int,存储8个字节的长整型(long,2^63-1)。 embstr SDS(Simple Dynamic String),存储小于44 个字节的字符串。。 raw SDS,存储大于 44 个字节的字符串。 数据结构示例: 127.0.0.1:6379> set k1

Redis深度历险,全面解析Redis14个核心知识点

拥有回忆 提交于 2019-12-01 19:04:32
本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。 传送门: https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q 一、概述 二、数据类型STRING LIST SET HASH ZSET 三、数据结构字典 跳跃表 四、使用场景计数器 缓存 查找表 消息队列 会话缓存 分布式锁实现 其它 五、Redis 与 Memcached数据类型 数据持久化 分布式 内存管理机制 六、键的过期时间 七、数据淘汰策略 八、持久化RDB 持久化 AOF 持久化 九、事务 十、事件文件事件 时间事件 事件的调度与执行 十一、复制连接过程 主从链 十二、Sentinel 十三、分片 十四、一个简单的论坛系统分析文章信息 点赞功能 对文章进行排序 一、概述 Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。 键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。 Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能,使用分片来扩展写性能。 二、数据类型 What Redis data structures look

apache commons

时光毁灭记忆、已成空白 提交于 2019-12-01 13:44:32
Lang 中工具类比较多,这里介绍几个主要的:    ClassUtils : getShortClassName,这个函数应该在 java.lang.Class 类中有的,我看到很多人自己写这个函数。getAllInterfaces,convertClassNamesToClasses,isAssignable,primitivesToWrappers,isInnerClass。    NumberUtils : 关于数字以及数字和字符串转换的类 stringToInt,toDouble,createNumber,isAllZeros, int compare(float lhs, float rhs), isNumber(String str),double min(double[] array)。    RandomUtils : 用于产生随机数的。    DateFormatUtils : 日期时间格式转换,以及本地时间和 UTC 时间转换。    DateUtils: 日期工具类。isSameDay,truncate,round,modify。   基于反射机制的几个类:    CompareToBuilder: 比较,用在算法、排序、比较的地方。reflectionCompare,append。    EqualsBuilder: 通过反射机制比较

HashMap和ConcurrentHashMap的迭代器

好久不见. 提交于 2019-12-01 11:06:39
public class _01_普通map的错误 { public static void useMap(final Map<String,Integer> scores) { scores.put("WU",19); scores.put("zhang",14); try { for(final String key : scores.keySet()) { System.out.println(key + ":" + scores.get(key)); scores.put("liu",12); } }catch (Exception ex) { System.out.println("traverse key fail:" + ex); } try { for (final Integer value : scores.values()) { scores.put("liu", 13); // scores.put("zhao", 13); System.out.println(value); } }catch (Exception ex){ System.out.println("traverse value fail:" + ex); } } public static void main(String[] args) { System.out.println(

Java HashMap 和 ConcurrentHashMap

被刻印的时光 ゝ 提交于 2019-12-01 10:21:00
转自: http://www.codeceo.com/article/java-hashmap-concurrenthashmap.html 前言 Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据。 本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。 HashMap 众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 jdk1.7 和 1.8 中具体实现稍有不同。 Base 1.7 1.7 中的数据结构图: 先来看看 1.7 中的实现。 这是 HashMap 中比较核心的几个成员变量;看看分别是什么意思? 初始化桶大小,因为底层是数组,所以这是数组默认的大小。 桶最大值。 默认的负载因子(0.75) table 真正存放数据的数组。 Map 存放数量的大小。 桶大小,可在初始化时显式指定。 负载因子,可在初始化时显式指定。 重点解释下负载因子: 由于给定的 HashMap 的容量大小是固定的,比如默认初始化: public HashMap() { this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR); } public HashMap(int