遍历

java并发:CopyOnWriteArrayList简单理解

杀马特。学长 韩版系。学妹 提交于 2020-01-16 01:22:35
Java集合的快速失败机制 “fail-fast” "fail-fast"是java集合的一种错误检测机制,当多个线程对集合进行结构上的改变的操作时,有可能会产生 fail-fast 机制。 例如:假设存在两个线程(线程1、线程2),线程1通过Iterator在遍历集合A中的元素,在某个时候线程2修改了集合A的结构(是结构上面的修改,而不是简单的修改集合元素的内容),那么这个时候程序就会抛出 ConcurrentModificationException 异常,从而产生fail-fast机制。 原因:迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCount 变量。集合在被遍历期间如果内容发生变化,就会改变modCount的值。每当迭代器使用hashNext()/next()遍历下一个元素之前,都会检测modCount变量是否为expectedmodCount值,是的话就返回遍历;否则抛出异常,终止遍历。 CopyOnWriteArrayList 传统的List在多线程同时读写的时候会抛出java.util.ConcurrentModificationException, Vector是线程安全的,但是由于使用了synchronized同步锁,导致同一时间内只有一个线程能访问,效率较低。 而CopyOnWriteArrayList是使用CopyOnWrite

递归思想遍历目录下的所有文件名称

妖精的绣舞 提交于 2020-01-15 22:18:51
package demo01; import java.io.File; public class Demo02 { public static void main(String[] args) { findFiles("输入要遍历的目录"); } public static void findFiles(String path) { if (path == null) { return; } File f = new File(path); File[] files = f.listFiles(); if (files == null) { return; } for (File file : files) { if (file.isFile()) { System.out.println(file.getName()); }else if(file.isDirectory()){ findFiles(file.getPath()); }else { System.out.println("error"); } } } } 来源: CSDN 作者: xiaoyaGrace 链接: https://blog.csdn.net/xiaoyaGrace/article/details/103990699

【LeetCode】94. 二叉树中序遍历

我的梦境 提交于 2020-01-15 17:04:43
问题描述 Given a binary tree, return the inorder traversal of its nodes' values. Follow up: Recursive solution is trivial, could you do it iteratively? 给定一个二叉树,返回其节点值的顺序遍历。 后续工作:递归解决方案很简单,可以迭代地解决吗? 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] Python 实现 实现一:递归。由于递归调用对内存的使用较多,容易造成栈溢出,实际应用中不建议使用。 class Solution(object): def inorderTraversal(self, root): """ :type root: TreeNode :rtype: List[int] """ # Recursively. ret = [] if root == None: return [] if root.left != None: ret += self.inorderTraversal(root.left) ret.append(root.val) if root.right != None: ret += self.inorderTraversal(root.right) return ret

集合的遍历

十年热恋 提交于 2020-01-15 13:10:25
public static void main(String[] args) { //创建待遍历的集合 Collection c1 = new ArrayList(); c1.add("java"); c1.add("SQL"); c1.add("1999"); //关于集合的遍历 // 1.把集合转换成数组从而实现对集合的便利 //Object[] toArry() Object[] a1 = c1.toArray(); //转成对数组的遍历 // for (int i = 0; i < a1.length; i++) { // System.out.println(a1[i]); // } //增强for循环 for (Object o:a1) { System.out.println(o); } /*集合的专用遍历方法 * Iterator iterator() * 迭代器,集合的专用遍历方式 * 获取迭代器*/ Iterator t1 = c1.iterator(); //方法1.boolean hasNext()判断是否有下一个元素,如果有返回true,没有返回false //方法2.object next() 返回下一个元素 while (t1.hasNext()) { Object i1 = t1.next(); System.out.println(i1); } }

图的深度优先遍历和广度优先遍历

谁说我不能喝 提交于 2020-01-15 10:01:57
1.图的深度优先遍历:是先遍历第一个邻结点,然后以第一个邻结点为参考系,递归遍历第一个邻节点的邻节点。 2.图的广度优先遍历是先遍历一个节点所有相邻节点,再遍历第一个相邻节点的所有相邻节点,以此类推,需要借助栈来进行操作。 public class Graph { private ArrayList<String> vertexList;//存储顶点的集合 private int[][] edges;//存储图对应的临接矩阵 private int numsEdges;//边的个数 private boolean[] isVisit;//是否被访问 public static void main(String[] args) { int n = 5;//图有5个顶点 String[] Vertexs = {"A","B","C","D","E"};//顶点数组 Graph graph = new Graph(n); for(String vertex:Vertexs){ graph.insertVertex(vertex);//将顶点插入到图中 } //构建边的关系 // A-B A-C B-C B-D B-E graph.addEdge(0,1,1); graph.addEdge(0,2,1); graph.addEdge(1,2,1); graph.addEdge(1,3,1)

数组的扩展

你离开我真会死。 提交于 2020-01-15 06:15:38
1,Array.from() 用于将两类对象转为数组对象,分别为 类数组对象 和 可遍历对象 (包括es6新增的set和map结构) 1)常见的类似数组对象是DOM操作返回的Nodelist对象和函数内部的arguments对象. //NodeList对象 let ps = document.querySelectAll('p'); Array.from(ps).forEach(function(p)){ console.log(p); } //arguments对象 function foo(){ var args = Array.from(arguments); //扩展运算符也能转换为数组var args = [...arguments] // ... 类似数组对象必须有length属性.因此,任何有length属性的对象,Array.from都能将其转化为数组,如Array.from({ length:3 }) 返回[undefined, undefined, undefined] 2)可遍历对象指的是部署了Iterator接口的对象,如字符串,Set结构. //字符串 Array.from('hello') //['h','e','l','l','o'] //set结构 let nameSet = new Set(['a','b']) Array.from(nameSet

leetcode 200. 岛屿数量 golang实现

爱⌒轻易说出口 提交于 2020-01-15 01:05:40
描述 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。 示例 1: 输入: 11110 11010 11000 00000 输出: 1 示例 2: 输入: 11000 11000 00100 00011 输出: 3 思路 深度优先遍历 每次遇到=1的地方 岛屿数+1 上下左右开始遍历 将遇到的1的位置全部置为0 遇到0的地方或者遍历返回 实现 func numIslands ( grid [ ] [ ] byte ) int { var count int if len ( grid ) == 0 { return count } rows := len ( grid ) cols := len ( grid [ 0 ] ) for i := 0 ; i < rows ; i ++ { for j := 0 ; j < cols ; j ++ { if grid [ i ] [ j ] == '1' { dfs ( grid , i , j , rows , cols ) count ++ } } } return count } func dfs ( grid [ ] [ ] byte , i , j , rows , cols int ) { if

集合(List、Set)遍历和Iterator迭代器

最后都变了- 提交于 2020-01-15 00:51:42
一、Iterator迭代器 1.介绍 迭代器是一种 设计模式 ,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为 “轻量级” 对象,因为创建它的代价小。 Iterator,所有的集合类,都实现了 Iterator 接口(因为Collection 接口继承Iterator接口),这是一个用于遍历集合中元素的接口,并且只能单向移动。主要包含以下三种方法: hasNext () 是否还有下一个元素。 next () 返回下一个元素。 remove () 删除当前元素。 注意:只有Collection接口继承Iterator接口,而Map接口并没有继承Iterator,所以只有List和Set的实现类实现了Iterator接口的iterator方法,而Map的实现类是无法直接使用iterator方法,之前的章节讲了Map遍历的方式(keyset()和entryset()),是通过返回一个set集合在调用iterator方法的。 2.使用 2.1 对 JAVA 集合进行遍历删除时务必要用迭代器 public static void main ( String args [ ] ) { List < String > famous = new ArrayList < String > ( ) ; famous . add ( "liudehua

Python学习笔记(五)之Python高级特性

∥☆過路亽.° 提交于 2020-01-14 21:59:47
目录 0. 导读 1. 切片(Slice) 2.迭代(遍历) 3.列表生成器(List Comprehensions) 4.生成器(generator) 5. 迭代器 0. 导读 Python高级特性,根据我的理解来说就是一些用来简化代码操作的方法,可以用更少的代码写出功能一样的程序。常听到一句话,一个优秀的程序员,最多也只能更新和维护两万行左右的代码,超过这个值,可能就没有那么大的精力了,当然这个特性也不限制是哪种语言,Python相对其他语言来说,写出相同的程序代码量本身不需要花很多行代码去实现,如果我们能想方设法再节约一些代码行数,那可谓是锦上添花呀。例如要创建一个从1到100的列表,我们可以使用for函数来创建,但是要写好几行代码,但是可以使用高级特性来简化只要一行代码足以,即 li = list(range(1, 101)) 。那么接下来详细地来学习一下Python高级特性。 1. 切片(Slice) 切片是用来做什么的? 切片的目的是 用来取指定索引范围的操作 。平时我们去指定索引范围的操作会选择用循环来解决,但是相对于切片来说,循环就显得有些冗余。 来看一个切面操作和循环操作取指定索引范围的列表的具体实例对比. 例1.1: #!/user/bin/python #coding=utf-8 #author@ zjw if __name__ == "__main__":

python爬虫_html

筅森魡賤 提交于 2020-01-14 11:20:28
cs网络_HTML 基本格式 (图片来自中国大学mooc,图片来自中国大学mooc) 如图所示,形状如同树木。 1.大的称为“根”,小的称为“叶” 2.从根到叶成为 下行遍历 ,反之为 上行遍历 ,平行之间为 平行遍历 (这个叫法跟实际的树就不太一样了) 3.使用 目录 之后 没有出现任何信息 ,可能是此时为空节点,在完整代码中需要作出判断 4.**下行遍历:**第一个返回列表类型,后两个返回迭代类型 5.上行遍历:显然可知 6.平行遍历:后两个为迭代类型,只用用在“for…in”的结构之中 来源: CSDN 作者: luck_110 链接: https://blog.csdn.net/luker6/article/details/103966973