遍历

ES6-数组的扩展

早过忘川 提交于 2020-03-28 22:59:19
扩展运算符 扩展运算符 ... 和rest功能相反,用来将一个数组转换为用逗号分隔的参数序列 function add(x, y) { return x + y; } const numbers = [4, 38]; add(...numbers) // 42 1、Array.from() Array.from() 方法可以将两类对象转化成真正的数组 类数组对象:常见的类数组对象主要是DOM操作返回的NodeList集合和函数内部的arguments对象 可遍历对象:部署了Iterator接口的数据结构 Array.of() Array.of() 方法用于将一组值,转换成数组;用来弥补 Array() 不足 Array.of(3, 11, 8) // [3,11,8] Array.of(3) // [3] Array.of(3).length // 1 Array() // [] Array(3) // [, , ,] Array(3, 11, 8) // [3, 11, 8] 只有当Array拥有至少两个参数时才会返回一个数组。 2、find()和findIndex() find() 方法用于找出第一个符合条件的数组成员,并返回该成员;参数应该是一个回调函数。 findIndex() 方法返回数组中第一个符合条件的成员的位置(index)如果没有则返回 -1 3

python实现二叉树和它的七种遍历

时间秒杀一切 提交于 2020-03-28 18:37:16
介绍: 树是数据结构中非常重要的一种,主要的用途是用来提高查找效率,对于要重复查找的情况效果更佳,如二叉排序树、FP-树。另外可以用来提高编码效率,如哈弗曼树。 代码: 用python实现树的构造和几种遍历算法,虽然不难,不过还是把代码作了一下整理总结。实现功能: 树的构造 递归实现先序遍历、中序遍历、后序遍历 堆栈实现先序遍历、中序遍历、后序遍历 队列实现层次遍历 #coding=utf-8 class Node(object): """节点类""" def __init__(self, elem=-1, lchild=None, rchild=None): self.elem = elem self.lchild = lchild self.rchild = rchild class Tree(object): """树类""" def __init__(self): self.root = Node() self.myQueue = [] def add(self, elem): """为树添加节点""" node = Node(elem) if self.root.elem == -1: # 如果树是空的,则对根节点赋值 self.root = node self.myQueue.append(self.root) else: treeNode = self.myQueue

java遍历hashMap、hashSet、Hashtable

馋奶兔 提交于 2020-03-28 16:48:55
一.遍历HashMap Map<Integer, String> map = new HashMap<Integer, String>(); 方法一:效率高 for(Entry<Integer, String> entry:map.entrySet()){   System.out.println(entry.getKey()+"="+entry.getValue()); } 方法二: for (Integer key : map.keySet()) {   String value = map.get(key); (这样取value会导致效率低,不建议。)   System.out.println(value); } 还可以单独遍历value for (Integer value : map.values()) {   System.out.println("Value = " + value); } 方法三:(好处:可以在遍历时调用iterator.remove()来删除entries) Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator(); while (entries.hasNext()) {   Map.Entry<Integer, Integer> entry =

JVM之GCRoots详解

倾然丶 夕夏残阳落幕 提交于 2020-03-27 10:54:29
JVM之GCRoots详解 目录 面试题引子 什么是垃圾 判断对象是否可以被回收之引用计数法 判断对象是否可以被回收之枚举根节点可达性分析 Java中可以作为GC Roots的对象 1. 面试题引子 一面:GC Roots如何确定?哪些对象可以作为GC Roots? 2. 什么是垃圾 1.简单说就是内存中已经不再被使用到的空间就是垃圾 3. 判断对象是否可以被回收之引用计数法 Java中,引用和对象是有关联的。如果要操作对象则必须用引用进行。 因此,很显然一个简单的办法是通过引用计数来判断一个对象是否可以回收。简单说,给对象中添加一个引用计数器,每当有一个地方引用它,计数器值加1,每当有一个引用失效时,计数器值减1。 任何时刻计数器值为零的对象就是不可能再被使用的,那么这个对象就是可回收对象。 那为什么主流的Java虚拟机里面都没有选用这种算法呢?其中最主要的原因是它很难解决对象之间相互循环引用的问题。 4. 判断对象是否可以被回收之枚举根节点可达性分析 为了解决引用计数法的循环引用问题,Java使用了可达性分析的方法。 所谓"GCroots,或者说tracingGC的“根集合”就是一组必须活跃的引用。 基本思路就是通过一系列名为”GCRoots”的对象作为起始点,从这个被称为GC Roots的对象开始向下搜索,如果一个对象到GCRoots没有任何引用链相连时,则说明此对象不可用

jQuery中$.each()方法的使用

左心房为你撑大大i 提交于 2020-03-27 03:42:08
$.each()是对数组,json和dom结构等的遍历,说一下他的使用方法吧。 1、遍历一维数组 var arr1=['aa','bb','cc','dd']; $.each(arr1,function(i,val){ //两个参数,第一个参数表示遍历的数组的下标,第二个参数表示下标对应的值 console.log(i+'```````'+val); 输出的结果为: 0```````aa1```````bb 2```````cc3```````dd 2、遍历二维数组 var arr2=[['aaa','bbb'],['ccc','ddd'],['eee','fff']]; $.each(arr2,function(i,item){ //两个参数,第一个参数表示下标,第二个参数表示一维数组中的每一个数组 console.log(i+'````'+item); 输出的结果为: 0````aaa,bbb1````ccc,ddd2````eee,fff 此时可以对输出的一维数组进行遍历 $.each(item,function(i,val){ //遍历二维数组 console.log(i+'`````'+val); }) 输出的结果为: 0````aaa,bbb 0`````aaa 1`````bbb1````ccc,ddd 0`````ccc 1`````ddd2````eee,fff

react单组件 渲染页面

时光总嘲笑我的痴心妄想 提交于 2020-03-26 19:31:10
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <script src="../node_modules/react/umd/react.development.js"></script> <script src="../node_modules/react-dom/umd/react-dom.development.js"></script> <script src="../node_modules/babel-standalone/babel.js"></script> </head> <body> <div id="app"></div> <script src="./db.js"></script> <script type="text/babel"> class Item extends React.Component{ constructor(props){ super(props); };

3. Longest Substring Without Repeating Characters

我的梦境 提交于 2020-03-26 01:06:24
题目描述 题目思路: 这道题要求的是最长的子串而不是最长的子序列,在LeetCode上也给了提示 Note that the answer must be a substring, "pwke" is a subsequence and not a substring. 先不考虑代码的问题,比如有一个字符串“abcabcbb”,要求找出其最长子串,可以一个一个字符的遍历,a,b,c,然后又出现了a,就把一开始已经遍历到的a去掉,变成b,c,a。然后遍历到b,就把已经遍历过的b去掉,变成c,a,b。重复这个过程,最终可以找到最长子串。 从上面的过程中可以看到,我们需要记录之前已经出现过的字符,可以统计字符出现的个数,但是这道题目,字符出现的顺序很重要,所以可以使用Hashmap来建立字符和位置之间的映射(一开始我也没有想到用Hashmap,是从网上查找资料才明白的)。之前我们手动找子串的过程实际是一个滑动窗口的过程,窗口内都是没有重复出现的字符,由于窗口在不断的向右滑动,因此只需要关心每一个字符最后出现的位置即可,并把这个位置和字符建立映射。 为了确定窗口的大小,就必须有一个left指针来指向窗口的前一个位置。然后i向右滑动,i - left就是当前窗口的大小(也是当前能找到的最长子串的长度)。 当窗口向右滑动,i++。遇到新的元素s[i],先判断该元素在Hashmap中有没有

剑指Offer——替换空格

橙三吉。 提交于 2020-03-25 19:37:47
题目描述: 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 分析: 如果从前往后替换空格,那么每遇到一个空格就需要将还没遍历到的字符后移,总的移动步数将会很多。 所以我们考虑先求出替换空格之后的字符串的长度,再从后往前遍历进行替换,将会大大减少替换的次数,也不会覆盖还没遍历的字符。 代码: 1 class Solution { 2 public: 3 void replaceSpace(char *str, int length) { 4 int oldLength = strlen(str); // 没替换前的字符串长度 5 int newLength = oldLength; 6 for(int i = 0; i < oldLength; i++) { // 求出替换空格后的字符串长度 7 if(str[i] == ' ') 8 newLength += 2; 9 } 10 if(newLength > length) return; // 新长度超过限制的最长长度,则无法替换 11 while(oldLength >= 0 && newLength > oldLength) { // 从后往前替换空格 12 if(str[oldLength] == ' ') { 13

为你的博文构建目录

自作多情 提交于 2020-03-25 15:04:12
1. 写在前面 这要从前几天看 Hibernate的用户手册 说起。 这份手册确实挺长,而且还是全英文,对于刚过四级的我来说,看着确实有些“吃力”。这种“吃力”表现在,我经常看着看着就忘了自己看到哪了,对于前面看过的内容的印象特别模糊,于是我就在思考为什么会这样。 是有许多不认识的单词或不懂的语法吗?应该不是。事实上,一般技术文档除了一些专业术语外基本都是一些常见词汇,除了一些约定的或者是有典故的句子外基本上也没有比较复杂的语法; 是文章内容专业太强了吗?好像也不是,我一路读过来并没有感到有无法理解的地方。事实上,就我自己在学习过程中看到过的一些技术或项目的官方文档与相关的一些中文博客对比来看,往往这些“官方文档”讲解的更加简单,内容更加丰富。 是文章太长了吗?这个好像有点关系。本来自己目前刚过四级的英语水平还是在9年义务教育加3年高中教育的煎熬中获得的,这导致对英语产生了天然的排斥心理。看简短的英文文章还好,因为自己知道再坚持坚持就看完了;但是当看到一大段一大段,需要拉动滚动条好一会才能见底的英语文章时,我的内心是复杂的。 最后想了想,我觉得最关键的原因还是不会用英语去思考。就是说不能直接去领会一句话的意思,必须要将一句话在脑袋中翻译成中文才能去思考它传达的意思。再加上我翻译的速度还慢,虽然每句话在读的时候确实是明白了它的意思,但是当遇到较长文章的文章时

java.util.ConcurrentModificationException

我的未来我决定 提交于 2020-03-25 04:37:36
[这篇博文,多亏cnblogs的管理员GG帮忙恢复,才得以重见天日,特在此拜谢!] 在使用set/map时,一个可爱的小bug :java.util.ConcurrentModificationException 【错误场景1】:set容器,边遍历,边add/remove元素 Set<String> set = new HashSet<String>(); for (int i = 0; i < 10000; i++) { set.add(Integer.toString(i)); } for (String str : set) { //或使用iterator来循环,JDK5.0以上,这样的遍历底层也都是iterator实现。 set.add("xxx"); //报错 // set.remove(str); //报错 } 【错误场景2】:map容器,边遍历,边remove元素 Map<String, String> map = new HashMap<String, String>(); for (int i = 0; i < 100; i++) { map.put(Integer.toString(i), Integer.toString(i)); } for (String str : map.keySet()) {//或使用iterator来循环 map.remove