首页
学习
活动
专区
圈层
工具
发布

分支和循环(2)

如:if(month >= 3 && month 5) 表达式中&&的左操作数是 month >= 3 ,右操作数是 month ,当左操作数 month >= 3 的 结果是0的时候,即使不判断 month...所以,对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏。 对于 || 操作符是怎么样呢?...如果找不到对应的值, 就执⾏ default 分⽀。 注: switch 后的 expression 必须是整型表达式 。 case 后的值,必须是整形常量表达式。...5.3 switch语句中的default 在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,⽐如 switch 后的表达式中的值⽆法匹 配代码中的 case 语句的时候,这时候要不就不做处理...的结果不是 value1 ,也不是 value2 的时候,就会执⾏ default ⼦句。

98310

面试必备之HashMap底层设计与实现详解

答:“HashMap是通过key计算出Hash值,然后将这个Hash值映射到对象的引用上,get的时候先计算key的hash值,然后找到对象”。这个时候已经显得不自信了。...大体意思是说选择31是因为它是一个奇素数,如果它做乘法溢出的时候,信息会丢失,而且当和2做乘法的时候相当于移位,在使用它的时候优点还是不清楚,但是它已经成为了传统的选择,31的一个很好的特性就是做乘法的时候可以被移位和减法代替的时候有更好的性能体现...这样导致的结果就是只要是低位是一样的,高位无论是什么,最后结果是一样的,如果这样依赖,hash碰撞始终在一个数组上,导致这个数组开始的链表无限长,那么在查询的时候就速度很慢,又怎么算得上高性能的啊。...当你查找一个key的hash存在的时候,进入了循环,恰恰这个时候,另外一个线程将这个Entry删除了,那么你就一直因为找不到Entry而出现死循环,最后导致的结果就是代码效率很低,CPU特别高。...9、HashMap的reSize()解析 当HashMap的大小超过临界值的时候,就需要扩充HashMap的容量了。

49820
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    基于中序有序的二叉搜索树

    二叉搜索树又称为二叉排序树,它要么是一棵空树,要么是一棵具有以下特点的树: 1.如果它的左子树不为空,那么它左子树上所有节点的值都小于根节点的值 2.如果它的右子树不为空,那么它右子树上所有节点的值都小于根节点的值...3.它的左右子树也是一棵二叉搜索树 它的结构如下: template struct BSTreeNode { //树的节点包含它的左子树和右子树指针以及这个节点中的值...false : true; } 二叉搜索树的插入 向搜索树中插入不能破坏搜索树的结构,所以不能插入和树种元素相同的值 非递归 //二叉搜索树中序遍历结果是有序的数列,不允许往其中插入相同的值,插入删除不允许破坏结构...key模型的应用场景有很多,比如查找一本书中的错别字(将词库导入树种,再将书种的每个词去树中搜索一遍,找不到是错别字),比如鉴定一个车牌是否是该停车场的用户(只要将登记的车牌导入搜索树中,当有车来的时候将该车的车牌作为...cur->_left; } delete cur; } else//被删除节点左右孩子均不为空 { //左右孩子均不为空,就需要左子树的最大值或右子树的最小值选出来当新根

    46830

    python高级编程第四讲:元类编程

    _getattr_和_getattribute_ _getattr_ 在查找不到属性的时候调用 _getattribute_是在_getattr_之前执行的魔法方法,尽量不要重写这个方法 先看一下...attr None 为什么会有一个none的出现,是因为在打印类的时候 ,程序没有给出返回值,所以就是None 再看一下加了_getattribute_的例子: from datetime import...,也就是把我们调用时传的属性值当作key 我们通过上面的方法,可以自定义一些信息,如果我们写_getattr_方法,当程序中找不到我们要调用的属性时程序会直接报错 3.数据描述符 3.1数据描述符...(value,int): raise TypeError self.values = value # 这里的value 其实就是设置的属性的值...next当迭代不出数据时,程序会报错,for循环当迭代不出数据时候,会自动停止 6.2生成器 有时候,序列或集合内的元素的个数非常巨大,如果全制造出来并放入内存,对计算机的压力是非常大的。

    64620

    脚撕LeetCode(501)Easy

    题目地址:https://leetcode-cn.com/problems/find-mode-in-binary-search-tree/ 给定一个有相同值的二叉搜索树(BST),找出 BST...假定 BST 有如下定义:结点左子树中所含结点的值小于等于当前结点的值 结点右子树中所含结点的值大于等于当前结点的值 左子树和右子树都是二叉搜索树 例如:给定 BST [1,null,2,2],...(假设由递归产生的隐式调用栈的开销不被计算在内) https://leetcode-cn.com/problems/find-mode-in-binary-search-tree/submissions...(但是很奇怪为什么官方答案优化版时间居然比普通版长,普通中序遍历只有0ms,优化版到了3ms,捉摸不透的官方) 官方的思维是:中序遍历后,相同的数字会聚集在一起(看题),所以使用了中序遍历 二、...=当前数字,且count=1 当count==maxCount的时候,讲数字加入int,当count>maxCount的时候,清空answer并将当前数字加入answer 执行结果如下:(接近双百

    36810

    【Unity游戏开发】浅谈Unity游戏开发中的单元测试

    只要产品代码不发生变化,单元测试的结果是稳定的。...其中Damage函数写了三个版本,一个是正确的,两个是返回错误结果的。在正确的函数中,当 Health 的值小于 100 的时候,会抛出一个刚才我们自定义的异常。...但是如果你会发现这个模块无法引入,VS没有自动补全这个命名空间,就算手动写上了还是提示找不到。这是为什么呢?   ...也就是说有些你在Winform、WPF等工程中用到的类库并不能完美地在Mono中使用,这也就是为什么会发生上述找不到单元测试的模块的问题。...下面让我们来看一下PlayerTestWrong的脚本如何编写,它的内容和刚才的测试代码非常相似,只不过调用了返回错误值的函数。

    3.5K20

    第二天学习_基础数据类型整理

    3. str - 字符串   字符串[索引] 可以找到对应索引的值  (索引从0开始计数)   切片:      字符串[start:end] 从start到end拿到数据, end取不到     字符串...4. split() 字符串的切割 , 切割完的结果是一个列表  (可以用在字符串转列表的地方)     5. startwith() 判断是否以xxx开头     6. find() 查找字符串中xxx...字符的位置 , 找不到返回-1     7. len() 计算并返回字符串的长度  4. list - 列表 列表用 [] 表示   创建列表的方法 a....5. dict - 字典(查询速度快)   在存储数据的时候必须使用key:value的形式进行存储   key不可以重复 , 并且要求key必须可哈希(不可变) - int/str/tuple/bool...  1. rang   2. join 列表转换成字符串  "以xxx切割".join(list)   3. while... else 必须是while条件不成立时才会走else   4. for循环的时候不要删除列表中的内容

    31120

    Go语言 nil 的作用

    = nil { // do something.... } 当出现不等于nil的时候,说明出现某些错误了,需要我们对这个错误进行一些处理,而如果等于nil说明运行正常。那什么是nil呢?...查一下词典可以知道,nil的意思是无,或者是零值。零值,zero value,是不是有点熟悉?在Go语言中,如果你声明了一个变量但是没有对它进行赋值操作,那么这个变量就会有一个类型的默认零值。...那么为nil的slice的底层结构是怎样的呢?根据官方的文档,slice有三个元素,分别是长度、容量、指向数组的指针: ? ---- 当有元素的时候: ?.../gopher", },) 或者这样传: NewGet("http://google.com", map[string]string{}) 但是前面也说了,map的零值是nil,所以当header为空的时候...interface interface并不是一个指针,它的底层实现由两部分组成,一个是类型,一个值,也就是类似于:(Type, Value)。只有当类型和值都是nil的时候,才等于nil。

    1.2K30

    理解Go语言的nil

    = nil { // do something.... } 当出现不等于nil的时候,说明出现某些错误了,需要我们对这个错误进行一些处理,而如果等于nil说明运行正常。那什么是nil呢?...查一下词典可以知道,nil的意思是无,或者是零值。零值,zero value,是不是有点熟悉?在Go语言中,如果你声明了一个变量但是没有对它进行赋值操作,那么这个变量就会有一个类型的默认零值。...那么为nil的slice的底层结构是怎样的呢?根据官方的文档,slice有三个元素,分别是长度、容量、指向数组的指针: ? slice 当有元素的时候: ?.../gopher", },) 或者这样传: NewGet("http://google.com", map[string]string{}) 但是前面也说了,map的零值是nil,所以当header为空的时候...interface interface并不是一个指针,它的底层实现由两部分组成,一个是类型,一个值,也就是类似于:(Type, Value)。只有当类型和值都是nil的时候,才等于nil。

    2K72

    面试题:重写equals方法为什么通常会重写hashcode方法?

    最近在面试的时候,当问完了HashMap的数据结构之后,通常会再多问一个问题,就是:重写equals方法时通常为什么也要重写一下hashcode方法?...对于任意不为null的引用值x和y,当且仅当x.equals(y)是true时,y.equals(x)也是true; 传递性(transitive)。...上面的示例也说明了为什么equals()相等,则hashCode()必须相等,进而当重写了equals方法,也要对hashCode()方法进行重写。...(f) (5) 如果是double值,则计算Double.doubleToLongBits(f),然后返回的结果是long,再用规则(3)去处理long,得到int (6) 如果是对象应用,如果equals...否则需要为这个域计算一个范式,比如当这个域的值为null的时候,那么hashCode 值为0 (7) 如果是数组,那么需要为每个元素当做单独的域来处理。

    90120

    django源码分析 LazySetti

    为什么要使用LazySetting? ...django项目在初始化的时候, 通过LazySetting,我们就可以在django获取某个配置的值之前,将配置的值先自定义为某个值,django再去获取该配置的值的时候,配置已经有了值,直接返回该配置的值...= 'aa' obj = A() print(obj.a) print(obj.b) 输出的结果是(先在实例属性中查找,找不到,再到类属性中查找) aa Bb 如果我们print(obj.c)则会报错...三、总结 延迟加载的方式,可以在编程中优化我们类的初始化动作,比如,我们创建了一个类有很多属性,这些属性的值都需要通过计算的方式获取,我们在初始化的时候,就要把属性的值计算出来,这些计算出来属性,我们后面有可能能会用不到...,这样的话,类的初始化就计算属性的值方式会浪费大量的计算机资源;使用延迟加载的方式,就可以很好的解决这种问题,到使用属性值的时候再获取。

    42310

    LRU Cache

    然后如果有新插入的元素或者被访问(get一个已有的值)的元素我就把它移到链表头部。 这样我们需要替换的时候,那么链表尾部的那个就是最久未被使用的那个。 但是呢?...就是更新的时候其实复杂度是O(N)。 为什么呢? 更新的情况就是调用put先在哈希表里面查找到key是已存在的,那然后我们要修改,哈希表里面我找到这个就可以直接修改。...如果在的话,就返回key对应的值;如果不在,返回-1。 那我们就可以直接调用unordered_map的find函数,根据find的返回结果判断,如果找到了,我们要返回什么呢?...当然插入的时候需要判断: 如果插入操作导致关键字数量超过 capacity ,则应该 逐出 最久未使用的关键字,然后插入新值。 另外不论是插入还是更新,都应该把插入或更新的值放到链表头部。...找不到,插入 { //如果满了需要先删除最久未使用的值 if(_capacity==_hashmap.size())

    55410

    Python爬虫之自动化测试Selenium#7

    另外,Selenium 还提供了通用方法 find_element(),它需要传入两个参数:查找方式 By 和值。...也就是说,如果我们用 find_element() 方法,只能获取匹配的第一个节点,结果是 WebElement 类型。...如果用 find_elements() 方法,则结果是列表类型,列表中的每个节点是 WebElement 类型。...这里等待的方式有两种:一种是隐式等待,一种是显式等待。 隐式等待 当使用隐式等待执行测试的时候,如果 Selenium 没有在 DOM 中找到节点,将继续等待,超出设定时间后,则抛出找不到节点的异常。...换句话说,当查找节点而节点并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是 0。

    1.4K11

    7000 字说清楚 HashMap,面试点都在里面了

    当插入数据(也就是调用 put 方法)的时候,并不是按顺序一个一个向后存储的,HashMap中定义了一套专门的索引选择算法,叫做散列计算,但散列计算存在一种情况,叫哈希碰撞,也就是两个不一样的 key...接着看图最下面的三行,演示了假设当前 HashMap的容量为 64 ,而待插入的一个 key 经过 hash 计算后得到的结果是 99 时,代入公式计算 index 的值,也就是 (64-1)& 99,...最终的计算结果是 35,也就是这个 key 会落到 table[35] 这个位置。...为什么 HashMap一定要保证容量是 2 的幂次方呢,通过二进制表示可以看出,如果有多位是 1 ,那与 hash 值进行与运算的时候,更能保证最后散列的结果均匀,这样很大程度上由 hash 的值来决定...= null && key.equals(k)))) 首先通过 hash 算法算出的值必须相等,算出的结果是 int,所以可以用 == 符号判断。

    96320

    【C++】哈希(unordered_set、unordered_map)

    在内部,unordered_map没有对按照任何特定的顺序排序, 为了能在常数范围内找到key所对应的value,unordered_map将相同哈希值的键值对放在相同的桶中。...unordered_maps实现了直接访问操作符(operator[]),它允许使用key作为参数直接访问 value。...当向该结构中: 插入元素:根据待插入元素的关键码,以此函数计算出该元素的存储位置并按此位置进行存放 搜索元素:对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置 取元素比较...当删除55后,再去找31,就找不到了,因为原本55的位置现在是空,这样就造成31在,但是找不到的情况。所以采用标记法。...当类型是可以强转的时候,就会走第一个,当类型是string的时候,就会优先走第二个。

    34910

    收集飞花令碎片——C语言数组

    ⼀维数组 创建与初始化 数组的创建 ⼀维数组创建的基本语法如下: type arr_name[常量值]; 存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的大小和数组的元素类型。...sizeof 计算数组元素个数 在遍历数组的时候,我们经常想知道数组的元素个数,那C语⾔中有办法使⽤程序计算数组元素个数吗?...0}; printf("%d\n", sizeof(arr)); return 0; } 这里输出的结果是40,计算的是数组所占内存空间的总大小,单位是字节。...请看下面的代码: int n = a + b; int arr[n]; 上⾯示例中,数组 arr 就是变⻓数组,因为它的⻓度取决于变量 n 的值,编译器没法事先确定,只有运⾏时才能知道 n 是多少。...} return 0; } 练习2:二分查找 题目:给定⼀个升序的整型数组,在这个数组中查找到指定的值n 找到了就打印n的下标, 找不到就打印:“找不到”。

    21710

    Python爬虫基础——05-高级数据类型

    查找内容 find 查找指定内容在字符串中是否存在,如果存在就返回该内容在字符串中第一次出现的开始位置索引值,如果不存在,则返回1。...# # 查找内容:find 查找指定内容在字符串中是否存在,如果存在就返回该内容在字符串中第一次出现的开始位置索引值,如果不存在,则返回1。...,而元组中的元素不可以被修改 a_tuple = (5) print(type(a_tuple)) # 输出结果为 # 当元组中只有一个数据的时候 那么他是整型数据 #...# 字典values.() 方法 获取字典中所有的value值 value是一个变量的名字 我们可以随便起 for value in person.values(): print(value...') # 调用函数 f1() # 输入两遍调用两次即可 f1() 2.11.2函数的参数: # 使用函数来计算1+2的值 def sum(): a = 1 b = 2 c =

    41920
    领券