hash算法打散存储文件
1.首先,为防止一个目录下面出现太多文件,所以使用hash算法打散存储
举例代码:
int hashcode = filename.hashCode();//得到hashCode
int dir1 = hashcode & 0xf; //得到名为1到16的下及文件夹
int dir2 = (hashcode & 0xf0) >> 4; //得到名为1到16的下下及文件夹
String dir = savePath + "\\" + dir1 + "\\" + dir2; //得到文件路径
从这段代码可以看出,如果一定要研究它的规律,那就要说说hashCode()方法,"直接定址”与“解决冲突”是哈希表的两大特点,
不同的对象hashCode是有可能会相同的,并且hashCode方法是可以自己重写的,想让它有规律可以重写.重写我不会.就不瞎说了.
如果只是使用hash算法打散存储,进行存取文件时,不用考虑hashCode,因为只要知道文件的名称,存和取所产生的dir1和dir2是一样的,文件的路径就可以确定.
备注:
对于hashCode()来说,无论何时,对同一个对象调用hashCode()都应该产生同样的值。
哈希表的优点,就是把数据的存储和查找消耗的时间大大降低,用空间换时间,所以消耗适当大的内存,产生适当相同的hashCode再使用equals比较,来最快的查
找才是它的目的
hash算法打散存储文件的更多相关文章
- Memcached Hash算法
本文来自网易云社区 作者:吕宗胜 Hash算法 1. Memcached Hash介绍 我们在前面的文章中已经介绍过了Memcached的内存管理方式,LRU的策略.由于Memcached的数据存储方 ...
- 暴雪的hash算法[翻译]
原文来自:http://sfsrealm.hopto.org/inside_mopaq/chapter2.htm#hashes 促进历史进步的大多数契机都是在解决特定问题的过程中产生的,本文讨论一下M ...
- 对一致性Hash算法,Java代码实现的深入研究
一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...
- 一致性hash算法详解
转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT) ...
- 一致性hash算法简介
一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简单哈希 ...
- 分布式缓存技术memcached学习(四)—— 一致性hash算法原理
分布式一致性hash算法简介 当你看到“分布式一致性hash算法”这个词时,第一时间可能会问,什么是分布式,什么是一致性,hash又是什么.在分析分布式一致性hash算法原理之前,我们先来了解一下这几 ...
- 一致性 hash 算法( consistent hashing )a
一致性 hash 算法( consistent hashing ) 张亮 consistent hashing 算法早在 1997 年就在论文 Consistent hashing and rando ...
- 暴雪HASH算法(转)
暴雪公司有个经典的字符串的hash公式 先提一个简单的问题,假如有一个庞大的字符串数组,然后给你一个单独的字符串,让你从这个数组中查找是否有这个字符串并找到它,你会怎么做? 有一个方法最简单,老老实实 ...
- hash算法总结收集
hash算法的意义在于提供了一种快速存取数据的方法,它用一种算法建立键值与真实值之间的对应关系,(每一个真实值只能有一个键值,但是一个键值可以对应多个真实值),这样可以快速在数组等条件中里面存取数据. ...
随机推荐
- MapReduce源码分析之LocatedFileStatusFetcher
LocatedFileStatusFetcher是MapReduce中一个针对给定输入路径数组,使用配置的线程数目来获取数据块位置的实用类.它的主要作用就是利用多线程技术,每个线程对应一个任务,每个任 ...
- Memcached 常用的方法
Memcache常用方法 Memcache::add — 添加一个值,如果已经存在,则返回false Memcache::addServer — 添加一个可供使用的服务器地址 Memcache::cl ...
- centos7.0 activemq的安装
1:下载地址http://activemq.apache.org/activemq-590-release.html 2:wget http://archive.apache.org/dist/act ...
- share(发包方面)
share(发包方面) 接收所有map发过来的包,这个是GS线程驱动的 { for (;;) { //... if(!itMap.second->RecvData(Pkt)) break; if ...
- Python 字符串拼接、格式化输出、深浅复制
拼接:"+"号(同类型可拼接) >>>li = [1,2] >>>li + li [1,2,1,2] >>>li*2 [1,2 ...
- mysql时间相减的问题
MySQL中时间不能直接相减,如果日.分.时不同,相减结果是错误的 mysql> select t1,t2,t2-t1 from mytest; +--------------------- ...
- 九度OJ 1181:遍历链表 (链表、排序)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2733 解决:1181 题目描述: 建立一个升序链表并遍历输出. 输入: 输入的每个案例中第一行包括1个整数:n(1<=n<=1 ...
- 京东android面试题(2018 顶级互联网公司面试题系列)
以下来自于北京的一个兄弟的面试题 1.静态内部类和非静态内部类有什么区别 2.谈谈你对java多态的理解 3.如何开启线程,run和runnable有什么区别 4.线程池的好处 5.说一下你知 ...
- 【python】-- 模块、os、sys、time/datetime、random、logging、re
模块 模块,用一堆代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个 ...
- Linux学习路线指南
转载的,感觉写的挺好的,我自己知识复制了下,忘记了转载地址,抱歉! Linux学习路线指南 很多同学接触Linux不多,对Linux平台的开发更是一无所知.而现在的趋势越来越表明,作为一个优秀的软件开 ...