集合运算

学习JDK1.8集合源码之--ArrayDeque

谁说我不能喝 提交于 2020-01-26 11:14:52
1. ArrayDeque简介   ArrayDeque是基于数组实现的一种双端队列,既可以当成普通的队列用(先进先出),也可以当成栈来用(后进先出),故ArrayDeque完全可以代替Stack,ArrayDeque是非线程安全的,Stack是线程安全的。   ArrayDeque虽然是基于数组实现的,但很容易被数组这种数据结构所迷惑。因为数组是从0开始到length-1位置结束的,但ArrayDeque的实现实际上是一种循环结构的队列,首尾位置完全靠head和tail两个首尾指针来决定的,正常理解的情况下head的值应该比tail小,但是这里会出现head比tail大的情况。所以这里我们不能以正常数组的角度去看待,我可以把这个数组看成一个环形结构的首尾相连的结构,即数组最后一位的下一位就是第一位(不要习惯性把0当成头部,length-1当成尾部),数据都存储在head右边及tail的左边,不知道有没有说清楚~~   除此之外,ArrayDeque对队列的容量有特殊的要求,必须是2^n(这里和HashMap类似),由于2^31超出int的最大值,故ArrayDeque的最大容量为2^30。ArrayDeque不允许存储null值,原因是需要通过取出的元素是否为null来判断队列是否为空。   关于更多关于ArrayDeque的讲解,这篇文章讲的很好: 【源】ArrayDeque

Python核心编程第二版(中文).pdf 目录整理

夙愿已清 提交于 2020-01-25 23:43:39
python核心编程目录 Chapter1:欢迎来到python世界!- 页码:7 1.1什么是python 1.2起源 :罗萨姆1989底创建python 1.3特点 1.3.1高级 1.3.2面向对象 1.3.3可升级 1.3.4可扩展 1.3.5可移植性:python使用C写的。 1.3.6易学 1.3.7易读 1.3.8易维护 1.3.9健壮性 1.3.10高效的快速原型开发工具 1.3.11内存管理器 :内存管理由python解释器负责,开发仅仅致力于开发计划中的应用程序。 1.3.12解释性和(字节)编译性:无需编译,当执行py文件,会生成.pyc或.pyo文件 1.4下载和安装python 1.5运行python 1.5.1命令行的交互式解释器 1.5.2从命令行启动脚本 1.5.3集成开发环境 1.5.4其他的集成开发环境和执行环境 1.6python文档 1.7比较python(python与其他语言的比较) Chapter2:Python起步- 页码:31 注:语句和表达式的区别 语句是使用关键词来组成命令,告诉解释器要做什么。 表达式没有关键词,可以使算术表达式,也可以是使用括号调用的函数。 2.1程序输出,print语句及“Hello World” :print是关键字 Print ‘%s is number %d!’%(‘python’,1)

结对编程

不问归期 提交于 2020-01-25 10:41:38
作业 结对编程 一 结对成员 陈颖锋 201421122113 许鸿洋 201421122114 项目开发的coding.net 地址:https://coding.net/u/ricardoCYF/p/zuoye3/git 二 项目描述 一个小组中的两个同学选取比较优秀的 作业1 (两个人的都独立完成了), 把它作为本次作业的基础,然后再修改。 结对编程实现上述功能 ,同样的,在程序正式开发之前,请先预估下PSP每个环节的消耗时间,并在过程中统计实际耗时,最后提交PSP表格。依然注意,这个主要是给你们自己看的,不必造假数据。 在 两人合作的过程中, 请看下面的内容 满足 代码风格规范 和 代码设计规范 (参考书第4章4.1-4.3内容) http://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html 请重视这点,在开发时两个人要有口头上的沟通:“好的,我们一起在开发中遵守一起认可的编码规范” 请把你们约定的编码规范文档也提交到git 给人提意见的方式——送一个汉堡包 http://www.cnblogs.com/xinz/archive/2011/08/22/2148776.html 理解 领航员和驾驶员两种角色关系,并在结对编程中两个人轮流做对方的角色。两人都必须参与本次作业的编码工作,并在git提交日志上体现这点。 三

STL综合 容器常用集合 —— hyl天梦

心已入冬 提交于 2020-01-24 10:35:11
STL 标准模板库 容器 用法集结 NO.1 stack 栈 注:取自 https://www.cnblogs.com/aiguona/p/7200837.html 库 #include<stack> 定义方式 stack<_template> s;//参数也是数据类型,这是栈的定义方式 常用操作 s.empty()//如果栈为空返回true,否则返回false s.size()//返回栈中元素的个数 s.pop()//删除栈顶元素 但不返回 其值 s.top()//返回栈顶的元素,但不删除该元素 s.push(X)//在栈顶压入新元素 ,参数X为要压入的元素 For exanple: #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <stack> using namespace std; int main() { stack<char> s; s.push(a); cout << s.top() <<endl; s.push(b); cout << s.top(); s,pop(); cout << s.top(); return 0; } NO.2 queue 队列 注:取自 https://www.cnblogs.com/aiguona/p

Python之三元运算、集合、函数

余生颓废 提交于 2020-01-24 03:20:53
一、三元运算符 三元运算符就是在赋值变量的时候,可以直接加判断,然后赋值 格式:[on_true] if [expression] else [on_false] res = 值1 if 条件 else 值2 1.举例说明: a =1 b = 2 c= a if a>1 else b #如果a大于1的话,c=a,否则c=b 如果不用三元运算符,就用if-else条件判断,如下: a = 1 b = 2 if a >1: c = a else: c = b 2.三元运算符也可以用在列表和字典中 例:1-10的数字,打印出其中的偶数 三元运算: ss = [i for i in range(1,11) if i%2==0 ] #循环1-11间的值(不包括11),如果值能被2整除(即取偶数),就写到ss这个list中 print(ss) #最终打印结果 [2, 4, 6, 8, 10] if-else条件判断 s = [] for i in range(1,11): if i %2==0: s.append(i) print(s) 二、集合 集合:set持有一系列元素,和list很像,也是一种数据类型,但是set的元素没有重复,而且是无序的 特点:set不包含重复的元素(天生去重)且无序 2.集合的定义 a.定义一个列表,通过强制转换来定义集合 nums = [1,1,2,3,5,6

2.列表字符串字典元组集合

帅比萌擦擦* 提交于 2020-01-23 21:56:16
list: 增:list.append("str") 追加str到list最后 插入:list.insert(num,"str") 在list的num位置插入str 修改:list[num] = "str" 把list的第num位置改为str 把另一个列表元素添加进来: list.extend(list2) #list = [list[0],list[1],...list[-1],list2[0],list2[1]] 删: (1)list.remove("str") 删除list列表中str的元素 (2)del list[num] 删除list列表中位置为num的元素 (3)list.pop() 弹出list的最后一个元素,并把最后一个元素返回,这时可以用一个变量接收,如: str = list.pop() list弹出最后一个元素,并赋值给str 如果带下标,如list.pop(num) list弹出num位置的元素,并返回 (4)list.clear() 清空list中所有内容 查 num = list.index("str") list查找一个值为str的元素,并将下标返回,用于查找已知元素的位置 str = list[num] 把list中num位置的元素返回,查找用于已知位置的元素的值 统计 num = list.count("str")

HashMap以及源码详解

天涯浪子 提交于 2020-01-23 10:28:30
HashMap实现接口以及继承类 实现了Map,Cloneable,Serializable接口,继承自AbstractMap类。 允许 null 值和 null 键,无序,不允许重复的集合 HashMap底层结构 HashMap底层接口是哈希表,也就是所谓的散列表。 简单介绍一下散列表,散列表的出现是为了解决链表和数组的缺陷,链表增删快,查询慢,数组查询快,增删慢。而散列表基于数组和列表进行演变,使得查询和增删的速度都非常快。 散列表的结构如下。 hashMap中的散列表是用数组+链表+红黑树去实现的 。 好的散列方式,会把数据散列到不同的位置,哪怕散列到同一个位置(这就是所谓的 哈希冲突 ),我们可以把它链起来变成链表(Java采用 链地址法 ),只要这个链表足够的短,我们就可以最快的查询数据,因为遍历两三个节点的时间非常短,近似于O(1)。 当链表足够长( 链表长度 >= 8)并且,节点足够多(节点数 >= 64)的时候,我们就把当前的链表变成红黑树。 (为什么节点 >=8 才变成红黑树,<=6变成链表? 因为根据泊松分布,当节点树大于等于 8 的时候,红黑树查询会比链表查询要快,而当节点数小于等于 6 的时候,会链表查询回避红黑树要快。7的时候是相当。) HashMap常用方法以及源码解析 简单介绍以下变量以及初始值: HashMap的最大容量(MAXIMUM

生成函数入门笔记

早过忘川 提交于 2020-01-22 10:45:01
详见pdf。 感悟: 生成函数中的x并不是未知数, 利用的是x的系数 , 2 x 3 2x^3 2 x 3 通常表示得到大小为3的方案数为2。 生成函数符合 方案数的相乘和相加 ,并常用ntt/fft加速 生成函数可转化成一些 简化形式 (如 1 / ( 1 − x ) 1/(1-x) 1 / ( 1 − x ) ),并参与生成函数和序列的运算,可以通过 广义二项式定理 重新拆分为系数形式。 关于pdf: p11:A和N集合生成的序列即为从所有元素中任选一个,seq则可以选择多个集合并到一起,故选择方案数:选择一个集合为一,两个集合也为一,三个,四个…故有p12中的生成序列的方程 而关于A与N的大小 A中选一个,大小都为1,而有选“0”,“1”两种不同方案,故A=2x N中选一个,而每一个元素的大小等于每一个数,所以大小为一的方案为选“1”,大小为二的方案为选“2”…故有N=…的方程 最后带入A和N,易得最后的方程。 来源: CSDN 作者: xagadrd 链接: https://blog.csdn.net/qq_42725189/article/details/104067431

一些整理的面试题(三)

不羁岁月 提交于 2020-01-22 05:48:24
文章目录 1.try-catch-finally异常捕获语句的执行流程? 2.throw和throws的区别? 3.java集合框架是什么?说出一些集合框架的优点? 4.集合框架的泛型有什么优点? 5.java集合框架的基础接口有哪些? 6.为何Map接口不继承Collection接口? 7.iterator是什么? 8.如何将字符串转换为int? 9.为什么在java中存储密码要使用char[],而不使用String? 10.如何将字符串转换成时间Date? 1.try-catch-finally异常捕获语句的执行流程? try中是可能发生异常的程序段; catch中是捕获异常后对应的异常处理方法 finally无论是否捕获异常,都会执行finally块内的内容 2.throw和throws的区别? throw用来抛出异常,在方法体内 throws用来声明方法可能会抛出什么异常,在方法名后; 3.java集合框架是什么?说出一些集合框架的优点? 集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。 优点: 使用核心集合类降低开发成本,而非实现我们自己的集合框架 随着使用经过严格测试的集合框架类,代码质量会得到提高 通过使用JDK附带的集合类,可以降低代码的维护成本 复用性和可操作性 4

Spring Boot整合Redis

会有一股神秘感。 提交于 2020-01-21 21:27:00
目录 1.spring-data-redis项目简介 1.1 spring-data-redis项目的设计 1.2 RedisTemplate 1.3 Spring对Redis数据类型操作的封装 1.4 SessionCallback和RedisCallback 2.Spring Boot中配置和使用Redis 2.1 配置Redis 2.2 操作Redis数据类型 2.2.1 字符串和散列的操作 2.2.2 列表操作 2.2.3 集合操作 2.3 Redis的特殊用法 2.3.1 Redis事务 2.3.2 Redis流水线 2.3.3 Redis发布订阅 2.3.4 使用Lua脚本 在现今互联网应用中,NoSql已经广泛应用,在互联网中起到加速系统的作用。有两种NoSQL使用最为广泛,那就是Redis和MongoDB。 Redis是一种运行在内存的数据库,支持7种数据类型的存储。Redis的运行速度很快,大约是关系数据库几倍到几十倍的速度。如果我们将常用的数据存储在Redis中,用来代替关系数据库的查询访问,网站性能将可以得到大幅提高。在现实中,查询数据要远远大于更新数据,一般一个正常的网站查询和更新的比例大约是1:9到3:7,在查询比例较大的网站使用Redis可以数倍地提升网站的性能。 Redis自身数据类型比较少,命令功能也比较有限,运算能力一直不强,所以在Redis2