遍历

js数组,在遍历中删除元素

别等时光非礼了梦想. 提交于 2020-01-01 15:32:38
/** * 有效的方式 - 改变下标,控制遍历 */ for (var i = 0; i < arr.length; i++) {   if (...) {     arr.splice(i, 1); // 将使后面的元素依次前移,数组长度减1     i--; // 如果不减,将漏掉一个元素   } } /** * 无效的方式 - for .. in 无法控制遍历 */ for (var i in arr) {   if (...) {     arr.splice(i, 1); // 将使后面的元素依次前移,数组长度减1     i--; // 没有效果,怎么都会漏掉一个元素   } } 来源: https://www.cnblogs.com/ywjy/p/4834972.html

遍历集合元素的两种方法

南笙酒味 提交于 2020-01-01 15:19:17
方法1:使用Iterator接口遍历集合元素 Iterator接口也是java集合框架的成员,但它与Collection系列,Map系列的集合不一样,Collection系列,Map系列的集合主要用于盛装其他对象,而Iterator则主要用于遍历(即迭代访问)Collection集合中的元素,Iterator对象也被称为迭代器。 Iterator接口定义了三个方法: ①boolean hasNext():如果被迭代的集合还没有被遍历完(即是否还有下一个元素),有则返回true。 ②Object next():返回集合里下一个元素。 ③void remove():删除几个里上一次next方法返回的元素,即删除当前元素。 示例如下: 例子1: package day0210; import java.util.Collection; import java.util.ArrayList; import java.util.Iterator; public class TestIter3 { public static void main(String args[]) { Collection<String> c1 = new ArrayList<String>(); c1.add("你好~"); c1.add("我很好~"); c1.add("他很好~"); c1.add("她很好~"

java的集合框架最全详解

不想你离开。 提交于 2020-01-01 15:13:07
java的集合框架最全详解(图) 前言: 数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作的方法。 在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类)。所有抽象出来的数据结构和操作(算法)统称为Java集合框架(JavaCollectionFramework)。 Java程序员在具体应用时,不必考虑数据结构和算法实现细节,只需要用这些类创建出来一些对象,然后直接应用就可以了,这样就大大提高了编程效率。 1. 先说Set和List: 1.1. Set子接口:无序,不允许重复。List子接口:有序,可以有重复元素。具体区别是 Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。<对应类有 HashSet,TreeSet> List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。<相应类有 ArrayList,LinkedList,Vector> Set和List具体子类: 2.2. < 实例比较> HashSet:以哈希表的形式存放元素,插入删除速度很快。 ArrayList:动态数组,LinkedList:链表、队列、堆栈。

leetcode 61 旋转链表

江枫思渺然 提交于 2020-01-01 07:27:55
### 题目 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出: 4->5->1->2->3->NULL 解释: 向右旋转 1 步: 5->1->2->3->4->NULL 向右旋转 2 步: 4->5->1->2->3->NULL 示例 2: 输入: 0->1->2->NULL, k = 4 输出: 2->0->1->NULL 解释: 向右旋转 1 步: 2->0->1->NULL 向右旋转 2 步: 1->2->0->NULL 向右旋转 3 步: 0->1->2->NULL 向右旋转 4 步: 2->0->1->NULL ### 思路 思路是首先找到去除多余的旋转次数,因为旋转节点总数次链表不变,所以直接让k求余num(链表节点总数),然后找出旋转之后链表之中应该为新的头部的那个节点,将指向它的那个节点指向NULL,然后开始往后遍历,达到原链表尾部,让尾部指向原来的头节点。 假设有输入: 1->2->3->4->5->NULL, k = 2 链表的长度为5,2对5取余结果为2,然后开始从原链表首部开始往后遍历,p_pre指向head,p指向head->next,开始往后运行. --num为4,不等于k,所以需要往后继续遍历,p_pre指向2,p指向3. --num为3

使用jQuery操作DOM

99封情书 提交于 2019-12-31 23:43:00
一、样式操作   设置样式  设置单个:css(name,value)    设置多个:css({name1:value1,name2:value2,.....})  无参数时获取样式   追加样式  addClass(className)   移除样式  removeClass(className)   切换样式  toggleClass(className) 二、内容操作   html()    解析HTML语句。获取时能获取到<>的文本显示。带参数时,文本按HTML解析后的样式显示   text()    不解析HTML语句。获取时只获取文本,<>内容被忽略。带参数时,文本原样显示,即“<标签名>文本</标签名>”   val()     获取或者设置元素的value属性值   contains()  获取涵盖某些文本的元素标签    三、节点操作   节点本身的操作     查找节点  使用选择器获取元素     创建节点       $(element)  以DOM元素来创建jQuery对象  $(document)       $(selector)  使用jQuery选择器匹配元素    $("li")       $(html)    使用HTML字符串创建    var $newNode=$("<li><li>"); var $newNode=$("<li>你好!

Python-day4 总结

安稳与你 提交于 2019-12-30 04:56:26
字符串加强 转义字符 什么是转义符: 定义:\就是转义符,转义符可以将有意义的字符转成无意义的字符. 也可以将无意义的字符转换为有意义的字符 (PS:无意义的字符就是一个普普通通的字符,例如: t n) 什么是转义字符: 定义:通过\可以将无意义的字符转换为具有指定功能的字符. \n: 代码换行 \t: 代表制表符(tab键) \: 代表\字符 字符串内容 定义: 1.字符串里面存储 字符类型 的 不可变的 序列 容器 2.字符串中的每一个字母或者数字以及符号被称为字符串中的值(字符) 访问字符: 语法: 字符 = 字符串[索引] while遍历字符 语法: 索引= 0; 长度 = len(字符串) while 索引 < 长度: 元素 = 字符串[索引] 索引+=1 for in 专业遍历 定义: for只能够通过从头到尾 依次 从 字符串 中取出 每⼀个字符并执⾏相同的操作 语法: for 字符 in 字符串: print(字符) 字符串常见操作 去除左右两边空格 语法: string.strip() 去除两边的空格 string.lstrip() 去除左边的空格 l==>left(左) string.rstrip() 去除右边的空格 r==>right(右) 默认的情况下strip去除空格, 但是也可以指定去除两边的字符 语法: string.rstrip(“要去除的字符”)

01迷宫的总结

馋奶兔 提交于 2019-12-30 03:04:07
首先,大家先看一下题吧: 01迷宫 大体的思路:广搜。 细节:首先,我要把每次广搜的结果储存起来,然后每一次不一样的广搜(是之前从来没有遍历过的)全部储存为这一次遍历的编号。如果询问的点是以前广搜过的,那么就输出那一次广搜的结果。如果没有遍历过,那么就进行一次广搜。 代码如下: # include <iostream> # include <cstdio> # include <cstring> # include <algorithm> # include <iomanip> # include <string> # include <math.h> # include <cmath> # include <time.h> # include <cmath> # include <stack> # include <queue> //#include<windows.h> //#include <bits/stdc++.h> using namespace std ; /* 输入: 输出: */ int cnt ; //每一次广搜的计数器 int n , m ; //n行,n列,m个询问 char a [ 1001 ] [ 1001 ] ; //初始地图 int sx , sy ; //起始坐标(因为每一次都不一样) int k = 1 ; //当前遍历的编号 int g [

学习java(9)集合概述

南楼画角 提交于 2019-12-29 22:48:46
一、集合概述: 1、java的集合类是一些常用的数据结构,例如:队列、栈、链表…… 2、java集合就像一种“容器”,用于存储数量不等的对象,并按照规范实现一些常用的操作和算法。程序员在使用java的集合类是,不必考虑数据结构和算法的具体实现细节,根据需要直接使用这些集合类并调用相应的方法即可,从而提高了开发效率。 二、java集合框架: 1、在5.0之前,java集合会丢失容器中所有对象的数据类型。将所有对象都当成object类进行处理,从JDK5.0增加泛型以后,java集合完全支持泛型,可以记住容器中对象的数据类型从而可以编写更简洁、健壮的代码。 2、在java.util.concurrent包下提供了一些多线程的集合类。 3、Java的集合类主要由两个接口派生而出:Collection和Map接口。 三、java中的集合分为三大类: 1、set集合:将一个对象添加到set集合石,set集合无法记住添加顺序,因此set集合中的元素不能重复,否则系统无法识别到该元素,访问set集合中的元素也只能根据元素本身进行访问。 2、list集合:与数组类似,list集合可以记住每次添加元素的顺序,因此可以根据元素的索引访问list集合中的元素,list集合中的元素可以重复且长度是可变的。 3、map集合:每个元素都是有key/value键值对组成

Es6 Generator函数

自闭症网瘾萝莉.ら 提交于 2019-12-29 22:18:03
/* 一、generator函数的定义 1.Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同 2.形式上,Generator 函数是一个普通函数,但是有两个特征。一是,function关键字与函数名之间有一个星号;二是,函数体内部使用yield表达式,定义不同的内部状态 */ //定义一个generator函数 其内部有3种状态 var helloGenerator = function *() { var next1 = yield 'hello'; yield 'world' + next1; return 'ending'; } //调用generator 函数和普通函数一样,直接加上双括号 () 但是跟普通函数的区别是generator不会立即执行, 返回的也不是函数的结果,而是内部的一个指针。 var newGenerator = helloGenerator(); //generator 函数是分段执行的 会从头部直到遇到下一个yield 表达式的时候停止下来。 console.log(newGenerator.next('hahh')); //Object {value: "hello", done: false} console.log(newGenerator.next()); // {value: "worldhahh"

ES6 Generator(生成器) 函数

你。 提交于 2019-12-29 22:17:50
ES6 新引入了 Generator 函数,可以通过 yield 关键字,把函数的执行流挂起,为改变执行流程提供了可能,从而为异步编程提供解决方案。 基本用法 Generator 函数组成 Generator 有两个区分于普通函数的部分: 一是在 function 后面,函数名之前有个 * ; 函数内部有 yield 表达式。 其中 * 用来表示函数为 Generator 函数,yield 用来定义函数内部的状态。 function* func(){ console.log("one"); yield '1'; console.log("two"); yield '2'; console.log("three"); return '3'; } 执行机制 调用 Generator 函数和调用普通函数一样,在函数名后面加上()即可,但是 Generator 函数不会像普通函数一样立即执行,而是返回一个指向内部状态对象的指针,所以要调用遍历器对象Iterator 的 next 方法,指针就会从函数头部或者上一次停下来的地方开始执行。 var f=new func();f.next(); // one // {value: "1", done: false} f.next(); // two // {value: "2", done: false} f.next(); // three /