键值

java基础进阶篇(六)_HashTable------【java源码栈】

被刻印的时光 ゝ 提交于 2020-03-05 18:30:25
一.概述   前面介绍了HashMap的结构和原理,这里介绍个类似HashMap的结构Hashtable。   HashTable 官方解释是HashMap的轻量级实现, 和 HashMap 一样,Hashtable 也是一个 散列表 ,它存储的内容是 键值对(key-value)映射 。   所以我们结合HashMap来介绍HashTable, 比较下两者的区别。   HashTable 使用的很少, 它支持线程安全, 通过内部方法加上 synchronized 实现, 因此同步锁的密度太大了, 在实际情况中笔者用的很少, 所以关于方法就不像HashMap 详细介绍了.后面会单独准备一章解决HashMap的线程同步问题. 二.和HashMap的比较 1.不同点 1).接口    Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。   HashMap继承AbstractMap,实现了Map, Cloneable, Serializable接口。 2).线程安全    Hashtable 线程安全,支持多线程并发, 内部方法使用synchronized 关键字约束同步代码块.   HashMap 线程不安全,需要开发人员额外解决. 后面章节会专门解释并发情况下数组和集合的处理. 3).初始容量和扩容   

python06 字典 集合 字符串

不羁岁月 提交于 2020-03-04 12:37:09
字典 基本概念 字典是无序的对象集合,使用键-值储存,具有极快的查找速度。键必须使用不可变类型。 同一个字典中键必须是唯一的。 字典的每个键值用冒号:分割。每个键值对之键用逗号,分割。整个字典包括在花括号{}中。 dic={key1:value1,key2:value2} 常用方法 keys() 返回字典中键的列表。 values() 返回字典中值的列表。 items() 返回tuples的列表,每个tuple(元组)由字典的键和相应的值组成。 clear()删除字典的所有条目。 copy() 返回字典高层结构的一个拷贝,但不复制嵌入结构,而只复制对那些结构的引用。 updata(x) 用字典x中的键值对更新字典内容。 get(x[,y]) 返回键x。若未找到该键,返回none。若提供y,则未找到x时返回y。 字典的键一般是唯一的,如果重复最后的一个键值对会替换前面的值,值不需要唯一。 创建方式 创建字典: 1.基础语法方式 字典中值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。 dict={‘A’:‘2341’,‘Cvxc’:‘46’} 2.创建字典:dict函数 使用dict函数。通过其他映射,比如字典或者键值序列对创建字典。 items= [(‘dfs’, ‘sdf’),(‘age’,12)] 列表中有两个元组 d=dict(items)

大数据下大批量随机键值的查询

a 夏天 提交于 2020-03-03 17:54:36
【摘要】 键值查询是很常见的查询场景,在数据表上建有索引后,即使表中数据记录数巨大(几亿甚至几十亿行),用键值查询出单条记录也会很快,因为建立索引后的复杂度只有 logN 次,10 亿行数据也只要比较 30 次(10 亿约等于 2^30),在现代计算机上也只需要数十毫秒而已。 不过,如果需要查询的键值很多,比如多达几千甚至几万的时候,如果每次都独立查找,那读取和比较也会累积到几万甚至几十万次,时间延迟由此也会涨到几十分钟甚至小时级别,这时候简单地使用数据库索引对于用户体验必然是难以容忍的了。 视频地址: http://player.youku.com/embed/XNDM2NjY4MDY5Ng== PDF 下载 来源: oschina 链接: https://my.oschina.net/u/3949403/blog/3186714

Redis 配置

北战南征 提交于 2020-03-03 15:49:52
Redis 配置 数据持久化 1)配置文件默认配置 save 900 1 # 超过900秒有1个键值对操作,会自动调用save完成数据持久化 save 300 10 # 超过300秒有10个键值对操作,会自动调用save完成数据持久化 save 60 10000 # 超过60秒有10000个键值对操作,会自动调用save完成数据持久化 2)安全机制 当redis服务不可控宕机,会默认调用一下save完成数据持久化(如果数据量过大,也可能存在部分数据丢失) 3)主动持久化 >: save # 连入数据库时,主动调用save完成数据持久化 注:数据持久化默认保存文件 dump.rdb,保存路径默认为启动redis服务的当前路径 Redis 相关配置 """ 1)绑定的ip地址,多个ip用空格隔开 bind 127.0.0.1 2)端口,默认6379,一般不做修改 port 6379 3)是否以守护进程启动,默认为no,一般改为yes代表后台启动(windows系统不支持) daemonize no 4)定义日志级别,默认值为notice,有如下4种取值: debug(记录大量日志信息,适用于开发、测试阶段) verbose(较多日志信息) notice(适量日志信息,使用于生产环境) warning(仅有部分重要、关键信息才会被记录) loglevel notice 5

201521123037 《Java程序设计》第8周学习总结

淺唱寂寞╮ 提交于 2020-03-02 20:53:02
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容。 1.2 选做:收集你认为有用的代码片段 1、 String[] list1=str.split(" "); for(int i=0;i<list1.length;i++){ if(!list1[i].equals("")) list11.add(list1[i]); } 2、 ArrayList<Map.Entry<String, Integer>> list=new ArrayList<Map.Entry<String, Integer>>(treemap.entrySet()); Collections.sort(list,new Comparator<Map.Entry<String, Integer>>(){...}; 3、 Set<String> set=treemap.keySet(); java.util.Iterator<String> it=set.iterator(); while(it.hasNext()){ String s=it.next(); System.out.println(s+"="+treemap.get(s)); } 4、 public static <T extends Comparable> T max(List<T> list){ return

【spark】示例:二次排序

大兔子大兔子 提交于 2020-03-02 11:46:32
我们有这样一个文件 首先我们的思路是把输入文件数据转化成键值对的形式进行比较不就好了嘛! 但是你要明白这一点,我们平时所使用的键值对是不具有比较意义的,也就说他们没法拿来直接比较。 我们可以通过sortByKey,sortBy(pair._2)来进行单列的排序,但是没法进行两列的同时排序。 那么我们该如何做呢? 我们可以自定义一个键值对的比较类来实现比较, 类似于JAVA中自定义类实现可比较性实现comparable接口。 我们需要继承Ordered和Serializable特质来实现自定义的比较类。 1.读取数据创建rdd 2.根据要求来定义比较类   任务要求,先根据key进行排序,相同再根据value进行排序。   我们可以把键值对当成一个数据有两个数字,先通过第一个数字比大小,再通过第二个数字比大小。   (1)我们定义两个Int参数的比较类   (2)继承Ordered 和 Serializable 接口 实现 compare 方法实现可以比较 class UDFSort (val first:Int,val second:Int) extends Ordered[UDFSort] with Serializable { override def compare(that: UDFSort): Int = { if(this.first - that.first != 0

Redis常用命令入门1:字符串类型命令

寵の児 提交于 2020-03-02 08:28:24
Redis总共有五种数据类型,在学习的时候,一定要开一个redis-cli程序,边看边练,提高效率。 一、最简单的命令 1、获得符合规则的键名列表 keys * 这里的*号,是指列出所有的键,同时*号也可以替换成其他支持glob风格通配符格式,具体规则如下: ?:匹配一个字符 *:匹配任意个(包括0个)字符 []:匹配括号间多大任一个字符,可以使用“-”表示范围,如[a-z] \x:匹配字符x,用于转义,如需匹配问号,需要\?才能匹配 这里说明一下,redis命令是不区分大小写的,还有就是keys命令是需要遍历Redis中所有的键的,当键很多时,很耗费性能的。所以在生产环境中要尽可能的不用。 例: redis 127.0.0.1:6379> set name "joan" OK redis 127.0.0.1:6379> get name "joan" redis 127.0.0.1:6379> set aaa 1 OK redis 127.0.0.1:6379> set bbb 2 OK redis 127.0.0.1:6379> keys * 1) "aaa" 2) "name" 3) "bbb" 2、判断键是否存在 exists foo 如果存在返回证书类型1,否则返回0 例: redis 127.0.0.1:6379> exists name (integer) 1

sqlserver中聚集索引和非聚集索引

送分小仙女□ 提交于 2020-03-01 04:13:58
微软官网上的解释: 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。 索引包含由表或视图中的一列或多列生成的键。 这些键存储在一个结构(B 树)中,使 SQL Server 可以快速有效地查找与键值关联的行。 表或视图可以包含以下类型的索引: 聚集 聚集索引根据数据行的键值在表或视图中排序和存储这些数据行。 索引定义中包含聚集索引列。 每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。 只有当表包含聚集索引时,表中的数据行才按排序顺序存储。 如果表具有聚集索引,则该表称为聚集表。 如果表没有聚集索引,则其数据行存储在一个称为堆的无序结构中。 非聚集 非聚集索引具有独立于数据行的结构。 非聚集索引包含非聚集索引键值,并且每个键值项都有指向包含该键值的数据行的指针。 从非聚集索引中的索引行指向数据行的指针称为行定位器。 行定位器的结构取决于数据页是存储在堆中还是聚集表中。 对于堆,行定位器是指向行的指针。 对于聚集表,行定位器是聚集索引键。 可以向非聚集索引的叶级添加非键列以跳过现有的索引键限制,并执行完整范围内的索引查询。 聚集索引和非聚集索引都可以是唯一的。 这意味着任何两行都不能有相同的索引键值。 另外,索引也可以不是唯一的,即多行可以共享同一键值。 实际上,可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引

STL中各类容器的API map

北城余情 提交于 2020-02-28 21:57:53
所有关联容器头提供一个insert,用以插入元素(键值对) 支持双向迭代器。 Map API map 的底层元素时指:(key,映射值)组成的pair对 映射值可以是任意的合法类型 其类型在map<key_type,X>::value_type 中定义 若typedef typename map<key_type,T>::value_type VALUE_TYPE; 构造函数: std::map<key_type,T>() 默认构造 增加元素: .insert(VALUE_TYPE(key,映射值)) .insert(std::pair<key_type,T>(key,映射值)) .insert(std::make_pair<key_type,T>(key,映射值)) 删除元素 .erase(指定迭代子位置的键值对) 改 排 查找元素: .find(key) 按关键字查找,找到返回key所在位置‘元素’(键值对)的迭代子。否则返回.end() 是否支持随机存取? 是 T& operator[](const KeyType&index) const T& operator[](const KeyType&index)const; 对于map,operator[]的过程如下: 当index对应的键不存在时,则生产一个元素(键值对)用于存放 元素的值(value==second)。

WebAPi添加常用扩展方法及思维发散

て烟熏妆下的殇ゞ 提交于 2020-02-28 14:45:34
前言 在WebAPi中我们通常需要得到请求信息中的查询字符串或者请求头中数据再或者是Cookie中的数据,如果需要大量获取,此时我们应该想到封装一个扩展类来添加扩展方法,从而实现简便快捷的获取。 WebAPi常用扩展方法 (1)获取所有键值对 /// <summary> /// 获取所有键值 /// </summary> /// <param name="request"></param> /// <returns></returns> public static Dictionary<string, string> GetQueryStrings(this HttpRequestMessage request) { return request.GetQueryNameValuePairs().ToDictionary(k => k.Key, v => v.Value, StringComparer.OrdinalIgnoreCase); } (2)获取单个key对应value /// <summary> /// 获取单个键值 /// </summary> /// <param name="request"></param> /// <param name="key"></param> /// <returns></returns> public static string