HashMap是通过数组存储所有的数据,每个元素所存放数组的下标,是根据该存储元素的key的Hash值与该数组的长度减去1做与运算,如下所示: index = (length_of_array - 1)...当TreeNode中包括的元素变得比较少时,为了存储空间的占用,也会转换为Node节点单向链表的方式实现,它们之间可以互相转换的。...,数组的长值赋值给变量n n = (tab = resize()).length; //判断根据hash值与数组长度减1求与得到的下标, //从数组中获取元素并将其赋值给变量...hash值与key是否与单向链表中的某个元素的hash值与key是相同的,如果是则退出 if (e.hash == hash &&...= null) {//如果第一元素不是要找到的元,则判断其next指向是否还有元素 //有元素,判断其是否是TreeNode
程序中的所有字符串字面值(如 "abc" )都是String的实例 内部有一个char[] ?...,进行循环 如果第一个相等比较第二个,依次类推,直到不一样 如果所有的都相等,那么就比较长度了 return n1 - n2 ?...方法也进行了重写 比较的是内部的char 序列是否相等 先看是否同一个对象,否则看是否String类 然后再看长度,长度相同挨个比较 contentEquals(StringBuffer) contentEquals...n 大于 0,则模式将被最多应用 n - 1 次 数组的长度将不会大于 n,而且数组的最后一项将包含所有超出最后匹配的定界符的输入 如果 n 为非正,那么模式将被应用尽可能多的次数,而且数组可以是任何长度...concat 连接 将指定字符串连接到此字符串的结尾 如果参数字符串的长度为 0,则返回此 String 对象 否则,创建一个新的 String 对象,返回新创建的连接后的字符串 先复制一个到数组中然后再把参数的复制到那个数组中然后使用数组创建
1.3 运行shell脚本 运行shell脚本的方法有两种: 作为可执行程序运行 作为解释器参数运行 shell脚本编写如下,并将其保存为test.sh,进入存放此文件目录 #!...类似于 C 语言,数组元素的下标由 0 开始编号(上述字符串也是这样)。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。...2 获取数组长度:获取数组长度的方法与获取字符串长度的方法相同,如所示 # 取得数组元素的个数 length=${#array_name[@]} # 从头到尾取 # 或者 length=${#array_name...-ne 检测两个数是否不相等,不相等返回 true。 [ $a -ne $b ] 返回 true。 -gt 检测左边的数是否大于右边的,如果是,则返回 true。...-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。 -ge 检测左边的数是否大于等于右边的,如果是,则返回 true。
: 字符串 --> 数字 如果字符串是一个合法的数字,则直接转换为对应的数字 如果字符串是一个非法的数字,则转换为NaN 如果是一个空串或纯空格的字符串,则转换为0 布尔值 --> 数字 true...# 相等运算符 == 相等,判断左右两个值是否相等,如果相等返回true,如果不等返回false 相等会自动对两个值进行类型转换,如果对不同的类型进行比较,会将其转换为相同的类型然后再比较, 转换后相等它也会返回...我们可以将对象中共有的属性和方法统一添加到原型对象中,这样我们只需要添加一次,就可以使所有的对象都可以使用。...length获取到的是数组的最大索引+1 对于连续的数组,length获取到的就是数组中元素的个数 修改数组的长度 数组.length = 新长度 如果修改后的length大于原长度,则多出的部分会空出来...如果修改后的length小于原长度,则原数组中多出的元素会被删除 向数组的最后添加元素 数组[数组.length] = 值; # 数组的方法 # push()-数组末添加元素 用来向数组的末尾添加一个或多个元素
传参 使用方法 我们在使用脚本文件的时候可以向文件中传递一些参数,脚本则可以使用n这种方式来获取参数,n这种方式来获取参数,0代表文件名,1代表的是第一个参数,1代表的是第一个参数,2代表第二个参数,以此类推...= 赋值 a=$b 将把变量 b 的值赋给 a。 == 相等。用于比较两个数字,相同则返回 true。 [ a==b ] 返回 false。 != 不相等。用于比较两个数字,不相同则返回 true。...-ne 检测两个数是否不相等,不相等返回 true。 [ a −ne b ] 返回 true。 -gt 检测左边的数是否大于右边的,如果是,则返回 true。...-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ a −ltb ] 返回 true。 -ge 检测左边的数是否大于等于右边的,如果是,则返回 true。...= 不相等则为真 -z 字符串 字符串的长度为零则为真 -n 字符串 字符串的长度不为零则为真 文件测试 参数 说明 -e 文件名 如果文件存在则为真 -r 文件名 如果文件存在且可读则为真 -w 文件名
定义变量 第一种方法 declare -i a a=5+5 echo $a 第二种方法 let b=6+6 echo $b c (())代替 let linux中shell变量#,@,0,1...用于比较两个数字,不相同则返回 true。 [ $a != $b ] 返回 true。 关系运算符 关系运算符只支持数字,不支持字符串,除非字符串的值是数字。 echo $?...单双引号的区别跟PHP类似: * 双引号里可以有变量,单引号则原样输出; * 双引号里可以出现转义字符,单引号则原样输出; * 单引号字串中不能出现单引号。 1....数组 bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。...${#array_name[*]} #获取数组长度 echo ${#array_name[@]} #获取数组长度 echo ${#array_name[1]} #获取数组中单个元素的长度 7.
认识哈希表 哈希表是一种非常重要的数据结构,几乎所有的编程语言都直接或者间接应用这种数据结构。...虽然该方式可以保证字符的唯一性,但是如果是较长的字符(如 aaaaaaaaaa)所表示的数字就非常大,此时要求很大容量的数组,然而其中却有许多下标值指向的是无效的数据(比如不存在 zxcvvv 这样的单词...现在需要一种压缩方法,把幂的连乘方案系统中得到的巨大整数范围压缩到可接受的数组范围中。可以通过取余操作来实现。虽然取余操作得到的结构也有可能重复,但是可以通过其他方式解决。...现在需要一种方法:产生一种依赖关键字(数据)的探测序列,而不是每个关键字探测步长都一样。 这样,不同的关键字即使映射到相同的数组下标,也可以使用不同的探测序列。...前面我们在哈希表中使用的是长度为 7 的数组,由于使用的是链地址法,装填因子(loadFactor)可以大于 1,所以这个哈希表可以无限制地插入新数据。
字符串单引号:单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;双引号:双引号里可以有变量#!..."显示所有参数:$@"数组数组中可以存放多个值。...用于比较两个数字,相同则返回 true。$a == $b 返回 false。!=不相等。用于比较两个数字,不相同则返回 true。$a != $b 返回 true。#!...\$a -gt \$b -lt检测左边的数是否小于右边的,如果是,则返回 true。\$a -lt \$b -ge检测左边的数是否大于等于右边的,如果是,则返回 true。...echo "$a : 字符串为空"fi文件测试运算符操作符说明举例-b file检测文件是否是块设备文件,如果是,则返回 true。
NOTE:给出的所有元素都大于 0,若数组大 小为 0,请返回 0。 思路: (1)我们输入的是一个非递减排序的数组的一个旋转,因此原始数组的值递增或者有重复。...二叉搜索树的后序遍历 题目: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出 Yes,否则输出 No。假设输入的数组的任意两 个数字都互不相同。...思路: (1)第一种思路是,从前往后遍历每一个字符。每遍历一个字符,则将字符与后边的所有字符依次比较,判断是否含有相同字符。这 一种方法的时间复杂度为 O(n^2)。...这一种方法的时间复杂度为 O(n)。 35. 数组中的逆序对 题目: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。...数组中重复的数字 题目: 在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知 道每个数字重复了几次。
)而存在的(“拉链法”解决冲突).JDK1.8 以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(或者红黑树的边界值,默认为 8)并且当前数组的长度大于64时,此时此索引位置上的所有数据改为使用红黑树存储...所以综上所述为了提高性能和减少搜索时间,底层在阈值大于8并且数组长度大于64时,链表才转换为红黑树。具体可以参考 treeifyBin方法。...当然虽然增了红黑树作为底层数据结构,结构变得复杂了,但是阈值大于8并且数组长度大于64时,链表转换为红黑树时,效率也变的更高效。...: 链表 + 数组 + 红黑树 5.阈值(边界值) > 8 并且数组长度大于64,才将链表转换为红黑树,变为红黑树的目的是为了高效的查询。...不过理想情况下随机hashCode算法下所有bin中节点的分布频率会遵循泊松分布,我们可以看到,一个bin中链表长度达到8个元素的概率为0.00000006,几乎是不可能事件。
用于比较两个数字,不相同则返回 true。 [ $a != $b ] 返回 true。 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。...同算数运算符`==` -ne 检测两个数是否相等,不相等返回 true -gt 检测左边的数是否大于右边的,如果是,则返回 true。 -lt 检测左边的数是否小于右边的,如果是,则返回 true。...-ge 检测左边的数是否大等于右边的,如果是,则返回 true。 -le 检测左边的数是否小于等于右边的,如果是,则返回 true。 关系运算符只支持数字,不支持字符串,除非字符串的值是数字。 #!...单双引号的区别: 双引号里可以有变量,单引号则原样输出; 双引号里可以出现转义字符,单引号则原样输出; 单引号字串中不能出现单引号。 拼接字符串 #!...支持一维数组(不支持多维数组),并且没有限定数组的大小,数组元素的下标由0开始编号 获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。
Shell算数运算符 移位运算符 关系(比较)运算符 位运算符 布尔(逻辑)运算符 字符串运算符 赋值运算符 WeiyiGeek.运算符及优先级 1.整数运算 可以进行数值运算的方法有: declare...Windows批处理强大很多,无论是在循环、运算,数组作为一种特殊的数据结构在任何一种编程语言中都有它的一席之地,数组在Shell脚本中也是非常重要的组成部分,它借助索引将多个独立的数据存储为一个集合。...bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。...所有参数整体)可以获取数组中的所有元素,利用获取字符串长度的#来获取数组长度的方法与获取字符串长度的方法相同;以及可以对数组进行提取删除等等 实际案例: array_name=(1 3 5 7 9)...替达 [[]] 不能使用 -ge:大于等于(Greater or equal) # 可采用 >= 替达 (()) 不能使用 #也可以采用转义 大于与小于 来实现整数对比,由于和重定向符号冲突
这个可以应该是Sun公司的设计师想把String作为一种数据类型来使用,因此将之设置为了不可变,其他类也无法继承修改。而且设计师没有提供直接修改数组值的方法。...而我们常见的常量池有两种 静态常量池(堆中) 即.class文件中的常量池,在编译时期,编译器会优化所有的常量,将之组合。...如果此时hash算法计算出来的下标数组位有值,则比较当前新添加的元素和该值是否相同,如果相同,直接替换;如果不同,则检查当前节点是不是红黑树的节点,如果是红黑树的节点,则进行红黑树节点添加;如果不是则进行链表添加...,循环遍历链表中的值,如果出现和新添加的元素相同的key则直接替换,如果没有,则添加到尾部。...当添加的时候,发现链表的长度大于或者等于8了,则进行转换为红黑树。在转换红黑树的方法中,首先判断了一次该数组的容量是否大于64,如果大于64,则将链表转换为红黑树。 7.
ArrayList是一种以数组实现的列表,而数组的优势在于有角标,因此查询的速度较快,是一种可以动态扩容的数组。我们着重了解添加、获取、替换、删除操作。...= 0; } 默认的初始容量为10。是否需要扩容,会先计算容量。如果数组为空,则直接返回默认容量10。如果需要容量>数组长度,则进行扩容。...如果新容量比最大容量大,则采用默认的最大容量,为2^31-9。最后将数据转移到新的数组中。...: 从操作上看,我们可以知道其实际上是在操作数组,而操作完之后将其采用arrayCopy的方式放入到arrayList中。...接着查看容量是否够,不够的话,进行扩容操作,而扩容操作是在grow()方法中进行的。同时如果容量大于规定的最大容量2^31-9时,会默认为最大容量。
类似于 C 语言,数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。...# ${数组名[下标]} valuen=${array_name[n]} 使用@符号可以获取数组中的所有元素 echo ${array_name[@]} #11 12 13 14 获取数组的长度...获取数组长度的方法与获取字符串长度的方法相同,例如: # 获得数组元素的个数 length=${#array_name[@]} # 或者 length=${#array_name[*]} # 获取数组单个元素的长度...-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。 -ge 检测左边的数是否大于等于右边的,如果是,则返回 true。...文件测试运算符 文件测试运算符用于检测 Unix 文件的各种属性。 属性检测描述如下: 操作符 说明 举例 -b file 检测文件是否是块设备文件,如果是,则返回 true。
但是,以上方法想想就很复杂,操作起来也很麻烦,想到基本每种语言都带有字符串倒置的方法,我们可以先将数字转换为字符串,在调用内置方法倒置字符串。...如果是传入的x是负数,在将其转为为负数即可 所以我们可以有以下解法 方法一 class Solution: def reverse(self, x): # 对x判断为正还是为负...所以我们可以有以下解法 方法一 class Solution: def isPalindrome(self, x): # 将数字转换为字符串 x = str(x)...思路分析 这题算很简单的了,只需要一次循环即可,循环遍历所有元素,由于列表是有序的,所以直到有元素第一次大于目标值时,就已经能够知道该值不在数组中,当然,当第一次大于该值时,此时的索引也就是该值应该存在的地方...还有一种极端情况,如果上述情况都不成立,那就是目标值大于列表中最大的,也就是如果该值在列表中,其应该在列表的下一位,也就是列表的长度。
第一种思路,出现次数超过一半的数字,不管如何,必然这个数字位于数组中间的位置,因此可以采用类似于快排的划分的方法,找到位于数组中间的位置的数字,然后在顺序检索是否这个数字出现次数超过一半。...第一种方法是基于划分的方法,如果是查找第k个数字,第一次划分之后,划分的位置如果大于k,那么就在前面的子数组中进行继续划分,反之则在后面的子数组继续划分,时间复杂度O(n);第二种方法是可以适用于「海量数据...面试题33:把数组排成最小数:首先将数组中的数字全部转换为字符串存储在一个新的数组中,然后比较每两个数字串的拼接的mn和nm的大小,若mn则m更小,反之n更小,然后把更小的数放入一个新的List...面试题36:数组中的逆序对:这道题可以这么想,我们要找到数组中的逆序对,可以看做对数据进行排序,需要交换数组中的元素的次数,但是防止相同大小的元素发生交换,因此需要选择一个稳定的排序方法,记录发生交换的次数...面试题52:数组中重复的数字:对于一个长度为n的数组里所有的数字都在0到n-1的范围内。
,所有散列值相同的元素我们都放到相同槽位对应的链表中。...—— 该方法将一个二进制数第一位1后边的数字全部变成1,然后再加1,这样这个二进制数就一定是100…这样的形式。此处实现在ArrayDeque的实现中也用到了类似的方法来保证数组长度一定是2的幂次方。...jdk1.7使用的是 数组+链表,jdk1.8 当链表长度大于阈值(默认为8)并且数组长度达到64时 会转换为红黑树初始容量:HashMap 的初始容量是 0,这是一种懒加载机制,直到第一次 put 操作才会初始化数组大小...注意:链表的长度大于8 且 数组长度大于64转换为红黑树面试官追问:HashMap的jdk1.7和jdk1.8有什么区别2.4 HashMap的jdk1.7和jdk1.8有什么区别JDK1.8之前采用的是拉链法...value判断tablei 是否为treeNode,即tablei 是否是红黑树,如果是红黑树,则直接在树中插入键值对遍历tablei,链表的尾部插入数据,然后判断链表长度是否大于8,大于8的话把链表转换为红黑树
前言 我们在页面上渲染数据时,通常会根据特定规则来对数据进行一个排序,然后再将其渲染到页面展示给用户。 那么对数据进行排序有很多种方式,哪一种效率高?哪一种稳定性好?那一种占用内存小?...我们将图中的示例,放在代码中,测试排序函数是否都正确执行。...我们通过一个例子,来测试下上述代码是否都正确执行。...实现思路 找到要排序数组的最大值 以上一步找到的最大值+1为长度创建一个计数数组 遍历要排序的数组,以当前遍历的元素为索引,寻找计数数组中对应的位置将其初始化为0,如果此处位置有相同元素的话就自增 遍历计数数组...,判断当前遍历到的元素是否大于0,如果大于0就取当前遍历到的索引,替换待排序数组中的元素 接下来我们通过一个例子来讲解下上述过程,如下图所示: 实现代码 接下来我们将上述思路转换为代码
= 赋值 a=$b 将把变量 b 的值赋给 a。 == 相等。用于比较两个数字,相同则返回 true。 [ $a == $b ] 返回 false。 != 不相等。...用于比较两个数字,不相同则返回 true。 [ $a != $b ] 返回 true。...-ne 检测两个数是否相等,不相等返回 true。 [ $a -ne $b ] 返回 true。 -gt 检测左边的数是否大于右边的,如果是,则返回 true。...-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。 -ge 检测左边的数是否大于等于右边的,如果是,则返回 true。...-x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。 -s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。
领取专属 10元无门槛券
手把手带您无忧上云