遍历

小白学Java:奇怪的RandomAccess

谁说我不能喝 提交于 2020-01-20 21:15:38
目录 小白学Java:奇怪的RandomAccess RandomAccess是个啥 forLoop与Iterator的区别 判断是否为RandomAccess 小白学Java:奇怪的RandomAccess 我们之前在分析那三个集合源码的时候,曾经说到:ArrayList和Vector继承了 RandomAccess 接口,但是LinkedList并没有,我们还知道继承了这个接口,就意味着其中元素支持 快速随机访问(fast random access) 。 RandomAccess是个啥 出于好奇,我特意去查看了RandomAccess的官方文档,让我觉得异常惊讶的是!这个接口中啥也没有!是真的奇怪!(事实上和它类似的还有 Cloneable 和 java.io.Serializable ,这俩之后会探讨)只留下一串冰冷的英文。 Marker interface used by List implementations to indicate that they support fast (generally constant time) random access . The primary purpose of this interface is to allow generic algorithms to alter their behavior to provide

二叉树层序遍历

旧街凉风 提交于 2020-01-20 21:01:01
题目描述: 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 3 / 9 20 / 15 7 该二叉树层序遍历的结果是 [ [3], [9,20],[15,7]] 解题思路: 使用队列,这个题与普通的层序遍历稍有不同,最后返回的结果是list的集合,每一个list是一层的遍历(从左到右) 普通的层序遍历(一个list)只需要使用队列,进出进出即可, 每出一个node将其值添加到list中,直到队列变为空。 而现在,我们需要知道每一层有多少个node,具体实现看一下代码。 import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; /** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) { /

nginx发布一个遍历目录

泄露秘密 提交于 2020-01-20 18:22:49
location /filelist/centos6/ { root /opt/static/; autoindex_localtime on; autoindex on; } autoindex_localtime on表示使用服务器上时区。这个默认是off的,有可能导致你发布的内容时间是其他时区的。 autoindex on表示本虚拟目录开启遍历。 来源: 51CTO 作者: 朱科强 链接: https://blog.51cto.com/zhukeqiang/2465646

150行代码打造.net core生产力工具,你值得拥有

妖精的绣舞 提交于 2020-01-20 16:45:45
你是否在初学 .net core时,被依赖注入所折磨? 你是否在开发过程中,为了注入依赖而不停的在Startup中增加注入代码,而感到麻烦? 你是否考虑过或寻找过能轻松实现自动注入的组件? 如果有,那请欢迎继续往下看。 或许你是被我这标题给吸引过来的,请不要怀疑自己的眼睛,如果你真的遇到过以上的问题,那我相信我的分享能帮助到你。 再次声明,我不是标题党。 闲话少说,此组件已经在我们公司内部使用半年有余,虽然代码不多,但也确确实实为公司同事解决些许麻烦事。为了响应公司开源的号召,所以决定将此组件开源。 在没有此工具之前,相信大多数使用core的程序员都是使用如下方式注入依赖的: services.AddTransient<IStudentRepository, StudentRepository>(); services.AddTransient<IGroupRepository, GroupRepository>(); services.AddTransient<ISchoolRepository, SchoolRepository>(); ..... ..... ..... ..... 此处省略若干行 但在项目的开发过程中,需要依赖注入的类存在频繁变动的情况,而时常会出现写了实体以及对应的接口后,而忘记添加注入代码情况。此情况不但增加了开发人员的重复而无意义的工作量

java之网络爬虫介绍(非原创)

吃可爱长大的小学妹 提交于 2020-01-20 08:57:13
文章大纲 一、网络爬虫基本介绍 二、java常见爬虫框架介绍 三、WebCollector实战 四、项目源码下载 五、参考文章 一、网络爬虫基本介绍 1. 什么是网络爬虫   网络爬虫(又被称为网页蜘蛛,网络机器人,在社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。 2. 常见问题介绍 爬虫可以爬取ajax信息么?   网页上有一些异步加载的数据,爬取这些数据有两种方法:使用模拟浏览器(问题1中描述过了),或者分析ajax的http请求,自己生成ajax请求的url,获取返回的数据。如果是自己生成ajax请求,使用开源爬虫的意义在哪里?其实是要用开源爬虫的线程池和URL管理功能(比如断点爬取)。   如果我已经可以生成我所需要的ajax请求(列表),如何用这些爬虫来对这些请求进行爬取?   爬虫往往都是设计成广度遍历或者深度遍历的模式,去遍历静态或者动态页面。爬取ajax信息属于deep web(深网)的范畴,虽然大多数爬虫都不直接支持。但是也可以通过一些方法来完成。比如WebCollector使用广度遍历来遍历网站。爬虫的第一轮爬取就是爬取种子集合(seeds)中的所有url。简单来说,就是将生成的ajax请求作为种子,放入爬虫。用爬虫对这些种子,进行深度为1的广度遍历

61. 序列化二叉树

廉价感情. 提交于 2020-01-20 07:07:50
文章目录 题目描述 1. 层序遍历 代码实现 复杂度分析 2. 先序遍历 代码实现 复杂度分析 题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。 二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。 1. 层序遍历 代码实现 /** * @Classname Solution * @Description 基于层序遍历 * @Date 2019/12/29 8:31 * @Author SonnSei */ public class Solution { public static String Serialize ( TreeNode root ) { if ( root == null ) return "#!" ; StringBuilder ret = new StringBuilder ( ) ; Queue < TreeNode > queue = new LinkedList < > ( ) ; queue . add ( root )

数据结构之二分搜索树(六)

元气小坏坏 提交于 2020-01-20 00:28:26
二分搜索树是二叉树的一种。 二叉树就是有左右节点,有唯一根节点的树类数据结构。二叉树具有天然递归结构,每个父亲节点的左右子树也是二叉树 class Node{   E e;   Node left;   Node right; } 上图是一个满二分搜索树,但用的时候不一定是满的, 符合条件就行。所以存储的元素必须具有可比较性(对于对象,可以自定义比较规则)。继承Comparable接口 二分搜索树新增节点 //添加一个节点 public void add(E e) { root = add(root,e); } private Node add(BST<E>.Node node, E e) { // TODO Auto-generated method stub if(node == null) { node = new Node(e); return node; }else{ if(e.compareTo(node.e)<0) { node.left = add(node.left,e); }else if(e.compareTo(node.e)>0) { node.right = add(node.right,e); } } return node; } 二分搜索数的遍历 1.前序遍历 //前序遍历,传入根节点,然后通过左右节点和递归思想进行遍历 public void

PHP数组遍历与实现原理

我的未来我决定 提交于 2020-01-20 00:06:14
一维数组遍历(普通) 一、for与foreach遍历结果顺序一致 $arr = array('max','xiaoli','xiaowang','laosan'); //for遍历 for($i=0;$i<count($arr);$i++){ echo $arr[$i];//max xiaoli xiaowang laosan } //foreach遍历 foreach($arr as $item){ echo $item;//max xiaoli xiaowang laosan } 二、for与foreach遍历结果不一致 $arr = array(); $arr[]='max'; $arr[2] ='xiaoli'; $arr[]='xiaowang'; $arr[1]='laosan'; //for遍历 for($i=0;$i<count($arr);$i++){ echo $arr[$i];//max laosan xiaoli xiaowang } //foreach遍历 foreach($arr as $item){ echo $item;//max xiaoli xiaowang laosan } 一维数组遍历(关联) $arr = array( 'name'=>'max', 'age'=>18, 'address'=>'北京' ); //for遍历 for($i=0

C#写算法之树

主宰稳场 提交于 2020-01-19 23:01:23
在数据结构中,树的定义如下: 树(tree)是n(n>=0)个节点的有限集,当n=0时,称为空树。在任意一个非空树中,有如下特点: 1.有且仅有一个特定的称为根的节点。 2.当n>1时,其余节点可分为m(m>0)个互不相交的有限集,每一个集合本身又是一个树,并称为根的子树。 树有以下概念: 根节点、父节点、兄弟节点、孩子节点。 树的最大层级数,被称为树的高度或深度。 二叉树 : 二叉树(binary tree)是树的一种特殊形式。二叉,指的是这种树的每个节点最多有2个孩子节点。这里最多有2个,也可能只有1个,或者没有孩子节点。 二叉树的两个特殊概念 :满二叉树和完全二叉树。 满二叉树:(每一个分支都是满的),所有非叶子节点都存在左右孩子,并且所有叶子节点都在同一层级上。 完全二叉树:对于一个有n个节点的二叉树,按层级顺序编号,则所有节点的编号为从1到n。如果这个树所有节点和同样深度的满二叉树的编号为从1到n的节点位置相同。则这个二叉树为完全二叉树。 二叉树可以用 链式存储 和 数组 两种物理存储结构来表达。 链式存储 : 二叉树的一个节点最多指向左右两个孩子节点,所以二叉树一个节点包含3部分; 1.存储数据的data变量 2.指向左孩子的left指针 3.指向右孩子的right指针 使用数组存储 : 使用数组存储时,会按照层级顺序把二叉树的节点放到数组中对应的位置上

从尾到头打印链表

只愿长相守 提交于 2020-01-19 17:35:26
从尾到头打印链表 题目描述 输入一个链表,按链表 从尾到头 的顺序返回一个ArrayList 看到这道题,很多人的第一反应是从头到尾的输出将会比较简单,于是我们很自然的想把链表中连接节点的指针反转过来,改变链表的方向,然后就可以从头到尾输出了。但该方法会改变原有链表的结构,是否允许在打印链表的时候修改链表的结构?这取决于面试官的要求。 思路分析 思路一:使用栈 遍历的顺序时从头到尾,可输出的顺序确是从尾到头。* 也就是说: 第一个遍历的节点最后一个输出;而最后一个遍历的节点第一个输出 ; ​ 这就是典型的 先进后出 。 ​ 我们可以使用 栈 这种顺序; ​ 每经过一个节点的时候,把该节点放入栈中。 ​ 当遍历完整个链表后,再从 栈顶开始逐个输出节点的值 ,此时输出节点的顺序已经反转股哟开了* /** * @param listNode * @return * 使用栈 :数据结构 * 遍历的顺序时从头到尾,可输出的顺序确是从尾到头。 * 也就是说:第一个遍历的节点最后一个输出;而最后一个遍历的节点第一个输出; * 这就是典型的先进后出。我们可以使用 栈 这种顺序 * 每经过一个节点的时候,把该节点放入栈中。当遍历完整个链表后,再从栈顶开始逐个输出节点的值,此时输出节点的顺序已经反转股哟开了 * */ public static ArrayList < Integer >