首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ArrayList在foreach删除倒数第二个元素不抛并发修改异常的问题

接着把list的元素个数增加到7试试,这时候可以发现规律是,只有删除倒数第二个元素的时候不会抛出异常,删除其他元素都会抛出异常。 好吧,规律知道了,可以从代码的角度来揭开谜底了。...: iterator.hasNext()  //判断是否有下个元素 item = iterator.next()  //下个元素是什么,并赋值给上面例子中的item变量 hasNext()方法的代码如下...中抛出的,抛出原因是modCount !...比如删除倒数第二个元素的时候,cursor指向最后一个元素的,而此时删掉了倒数第二个元素后,cursor和size()正好相等了,所以hasNext()返回false,遍历结束,这样就成功的删除了倒数第二个元素了...破除迷信,foreach循环遍历的时候不能删除元素不是绝对,倒数第二个元素是可以安全删除的~~(当然以上的思路都是建立在list没有被多线程共享的情况下)

1.7K30

【Leetcode】移除链表元素 链表的中间节点 链表中倒数第k个节点

【Leetcode203】移除链表元素 1.链接 移除链表元素 2.题目再现 A.双指针法 1.创建一个指针 cur=head 和一个指针 pre=NULL; 2.用cur->val 与...【Leetcode876】链表的中间节点 1.链接:链表的中间节点 2.题目再现 3.解法:快慢指针 1.定义一个快指针 fast 和一个慢指针 slow 都初始化为 head; 2.遍历链表,快指针一次走...; //fast 走2步 } slow=slow->next; //slow 走1步 } return slow; //返回慢指针 } 三.链表中倒数第...k个节点 1.链接:链表中倒数第k个节点 2.题目再现 3.解法 :快慢指针 1.定义一个快指针 fast 和一个慢指针 slow 都初始化为 head; 2.因为倒数第k个节点和尾节点的差为 k-...1 ,所以我们先让快指针先走 k-1 步; 或者因为尾节点所指向的NULL 和倒数第k个节点相差k,也可以先让快指针走k步; 这个时候慢指针不动; 3.快指针走完后,快指针和慢指针依次走,每次只走

12310
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    一日一技:包含元组的列表,对第一个元素升序第二个元素降序

    9, 3, 7, 4] a.sort() b = [2, 3, 1, 9, 3, 7, 4] c = sorted(b, reverse=True) 运行效果如下图所示: 我们也知道,Python中的元组是可以比较大小的...它的比较方法就是先对第一个元素比较,如果第一个元素相等,再比较第二个元素。...因此对包含元组的列表也可以这样排序,例如: d = [(6, 5), (1, 3), (4, 7), (6, 4), (1, 8), (7, 9)] d.sort() 但现在问题来了,如果要对这个列表排序...,但是需要对元组中的第一个元素升序,第二个元素降序,应该怎么办呢?...例如对如下列表进行排序,按元组第一个元素升序,第二个元素降序: [(6, 'apple'), (1, 'google'), (4, 'future'), (6, 'zero'), (1, 'stand'

    88810

    Python-数据解析-lxml库-下

    3个常用的方法,可以满足大部分搜索和查询需求,并且这3个方法的参数都是 XPath 语句。 find() 方法: 返回匹配到的第一个子元素。...findall() 方法: 以列表的形式返回所有匹配的子元素。 iterfind() 方法: 返回一个所有匹配元素的迭代器。 从文档树的根节点开始,搜索符合要求的节点。...① 获取任意位置的 li 节点 可以直接使用 “//” 从任意位置选取节点 li,路径表达式: //li 通过 lxml.etree 模块的 xpath() 方法,将 hello.html 文件中与该路径表达式匹配到的列表返回...class 属性 result = html.xpath("//li/@class") print(result) ③ 获取倒数第二个元素的内容 从任意位置开始选取倒数第二个 标签,再向下选取标签...使用第一个路径表达式 from lxml import etree html = etree.parse("hello.html") # 获取倒数第二个元素的内容 result = html.xpath

    66420

    Python知识点笔记-列表list、元组tuple和dict类型

    知识点主要范围:列表list、元组tuple和dict类型 列表list和元组tuple 列表list用[]包围起来,里面可以是各种类型的组合; L[-1]表示列表L的倒数第一个元素,-2表示倒数第二个元素...; L.append()把新元素放在列表L的末尾; L.insert(x, a)把a元素插在x位置之前; L.pop()可以删掉列表L最后的元素并返回这个元素,里面可以有参数指明位置; 元组tuple(...如果包含变量元素,变量改变了tuple也是不变的,就是在创建时取当时变量的值; range(x,y) 大于等于x,小于y的列表; 切片L[0:3]表示0,1,2位置的值,前后可以省略,代表第一个和最后一个...; L[::2]表示每两个元素取一个值,每隔一个元素取一个值; 倒序切片,L[-3:-1]取倒数第三个和第二个的值; 集合是指包含一组元素的数据结构,str和unicode也是有序集合; zip()可以把两个...value; len()计算集合的大小; 判断a是否为d的key,两种方法:if a in d或者d.get(a); 无序集合dict的特点:查找速度快,10个和10万个一样快。

    64810

    python3-列表增删改查合并排序

    print(names[3])         #访问列表中第4个值 print(names[1:3])       #访问列表中从第2个到第3个的值 print(names[-1])        ...#访问列表中的最后一个值 print(names[:-2])       #访问列表中的所有值,但是把倒数第二个及后面的所有值都去掉 print(names[-3:])       #访问列表中倒数第一个到倒数第三个的值...,也可以根据需求把这个步长给改了 print(names.index("james"))         #查找列表中james这个元素的下标 print(len(names))                  ...#把第三个位置的元素改成liming #删 names.remove("liming")                              #把元素liming从列表中删除 del names...#直接删除列表 names.pop()           #默认删除列表末尾的元素,当然也可以直接指定元素的下标去弹出一个指定的元素,并让你等够接着使用它 #每当你使用pop时,被弹出的元素就不再在列表中了

    48310

    python学习笔记2.4-数据结构之列表和元组

    0,最后一个元素的下标为-1,一次向前减一,即倒数第二个元素下标为-2 a = [i for i in range(10)] a[-1] # 最后一个元素,打印出来为9 a[-2] # 倒数第二个元素...a = [i for i in range(1,10,2)] print(a[1:3]) # 打印元素3和5 print(a[1:-1]) # 第二个到倒数第二个 print(a[1:]) # 第二个以后的全部元素...例如上例中的+和操作、以及索引或者切片操作,都不会修改原list的值。...-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 list.remove(obj) 移除列表中某个值的第一个匹配项 list.reverse() 反向列表中元素 list.sort...'y']) #当元组中的元素为可修改的对象,比如list和dict时,这里的list和dict能够修改。

    79190

    Redis 列表(Lists) 复习

    介绍 Redis中的Lists相当于双向列表,实现原理是一个双向链表(其底层是一个快速列表),即可以支持反向查找和遍历,更方便操作。...(LRANGE) LRANGE key start stop 下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推...也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。...7) "6" 通过索引获取列表中的元素(LINDEX) 也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。...你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

    34540

    Xpath的常用定位方法及轴定位

    ,可以使用xpath中的last()方法,定位到最后一个 //标签名[last()] //span/ul//li[last()] 如果我们要定位到倒数第二个,可以在last() 后面加上 -1,代表倒数第二个...//标签名[@元素名称='元素值' and @元素名称='元素值'] //input[@id='kw' and @class='s_ipt'] xpath表达式-or xpath 中 or的表达式和...and很像,指的是当你元素满足其中一个条件的时候,就可以定位到,如图,在百度搜索框中,我们故意将@class=’s_t’元素写错,内容中并没有这个元素, // 标签名[@元素名称='元素值' or @...元素名称='元素值'] //input[@id='kw' or @class='s_t'] 非查找控件 如图,如果我们想要查找元素值不等于某个值的内容,可以使用!...::* 查找books1所有的同级元素都查找出来,“*”表示所有 //div[3]/table/tbody/tr[1]/td[1]/following-sibling::td[2] 查找td[1]下同级节点下的第二个节点

    1.7K10

    冒泡排序算法

    ),之后倒数第二个和倒数第三个数字比较,小的上浮(交换),直至第二个数字和第一个数字比较,小的上浮,那么经过一趟排序之后,此时的第一个元素就是最小的 第二趟: 经过第一趟之后,第一个就是最小的数字,因此第二趟就不比较第一个和第二个数字了...从最后一个元素和倒数第二个元素比较,小的上浮,直至第三个元素和第二个元素比较,小的上浮,那么此时的第二个就是仅次于第一个的小的元素 第三趟:和前面一样的比较,不过就是不用比较第二个和第三个元素了,因为经过第一趟和第二趟之后...,数组中的第一个和第二个元素已经是最小的两个了。...,较大的下沉,直至倒数第二个和最后一个比较,大的下沉,那么此时的最后一个数就是最大的 第二趟: 从第一个元素和第二个元素进行比较,较大的下沉,然后第二个和第三个比较,直至倒数第三个和倒数第二个比较,大的下沉...因为经过第一趟之后,最后一个元素已经是最大的,因此不需要比较了 第三趟: 经过第二趟之后,倒数第二个仅次于最后一个元素小的元素了,因此在第三趟中只需要比较到倒数第四个和倒数第三个元素的大小即可,大的下沉

    55830

    如何删除给定单向链表的倒数第N个元素

    删除,要想删除某一元素,是需要知道这个指定元素的前一元素才行,那我们其实要找到的倒数N+1个元素....以如下队列为例,如果要删除倒数第2个元素,就要找到倒数第3个元素,也就是倒数第N+1个元素,那改如何做呢? 首先一定需要一个指针遍历到队列尾部的,那怎么记录这个指针已经遍历过的元素呢?...按这个思路,首先需要一个正常的指针一直遍历到队列尾部,称之为快指针; 再需要一个比这个快指针慢N个元素的第二个指针,称之为慢指针....两个指针按照同样的速度同时移动,当快指针到达结尾的时候,慢指针也就到达了倒数第N+1个元素的位置. 再细分下,如果要删除的目标元素正好和链表长度相同呢?...那是没有前一个元素的,看来边界值需要稍做处理下,遍历的count值和N值相同时,需要直接删除首元素,不再查找前一元素 附上代码: public class DeleteNElementFromBottom

    67310

    python 3 列表操作

    ', 'java'] #列表的切片,切片的索引是从0开始的 print(subject[0]) # 0 号索引,也就是列表的第一个元素 print(subject[1])   print(subject...[2]) print(subject[3]) print(subject[1:3])# 读取列表的第二个元素至第四个元素,第四个元素取不到,有头无尾 print(subject[-1])#读取列表的最后一个元素...print(subject[-2]) # 读取列表的倒数第二个元素 print(subject[-3:]) #读取列表的倒数第三个元素至最后一个元素 #打印显示 Liunx python web java..., 'web'] #查找某个名称的索引 print(subject.index("python")) 2  #统计元素的个数  创建列表 subject = ['Liunx', 'windows', '...浅copy 只copy 一层,嵌套部分的不会被copy ,只是copy 了里面的内存地址,当subject[0] ="GNU liunx 相当于重新开辟了一块内存地址,所以subject3[0] 读取的元素内容还是

    56010

    第二章(1.5)Python基础知识(数据类型)

    Pyhton 四种常用数据类型 一、list(列表) list是一种有序的集合,可以随时添加和删除其中的元素 用len()函数可以获得list元素的个数 列表操作包含以下函数: cmp(list1...[-1]):移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 list.remove(obj):移除列表中某个值的第一个匹配项 list.reverse():反向列表中元素 list.sort...2] '123' 读取列表中第三个元素 L[-2] '1' 读取列表中倒数第二个元素 L[1:] ['1', '12'] 从第二个元素开始截取列表 二、tuple(元组) tuple和list非常类似,...dict不会出现重复的key d = {'1':95,'2':75,'3':85} d['1']95 dict有以下几个特点: ① 查找和插入的速度极快,不会随着key的增加而变慢; ② 需要占用大量的内存...而list相反: ③ 查找和插入的时间随着元素的增加而增加; ④ 占用空间小,浪费内存很少。 ⑤ 所以,dict是用空间来换取时间的一种方法。

    38920

    爬虫 (十一) 学习 python 基础知识点的正确姿势 (四)

    ,今天我们换种方式来学习 python 1 序列 是多个元素按照一定规则组成的对象,对于一个有序序列,我们可以通过索引位置的方法访问对应位置的值 2 索引 好比一本书目录,利用目录中的页码,可以快速的查找所需要的内容...1 python 还引入负数索引值,负数表示从后向前的索引,如-1索引序列的倒数的最后一个元素,- 2索引是指倒数第二个元素 ?...列表(list)是一个有序的Python对象序列 列表的生成 列表可以用一对中括号‘[]’生成,中间的元素用逗号‘,’隔开 空列表可以用‘[]’或者list()函数生成 ?...计算列表的长度len() 列表相加,相当于两个列表按顺序连接 列表数乘,相当于讲这个序列重复多次 ? 3 索引和分片 ?...元素的删除 Python提供了一种更为通用的删除元素的方法del ? 从属关系的判断 我们可以用关键字in 或者 not in 判断耨个元素是否在某个序列中 ?

    50910

    谈谈数据结构中的链表、节点

    单链表 单链表中的每个结点包含值val,还包含链接到下一个结点的引用字段next。通过这种方式,单链表将所有结点按顺序组织起来。...操作单链表 与数组不同,我们无法在常量时间内访问单链表中的随机元素。如果我们想要获得第 i 个元素,我们必须从头结点逐个遍历。我们按索引来访问元素平均要花费 O(N) 时间,其中 N 是链表的长度。...img 与数组不同的是,链表不需要将所有元素移动到插入元素之后。因此可以在 O(1) 时间复杂度中将新结点插入到链表中,这非常高效。 开头添加节点 我们使用头结点来代表整个列表。...img 删除中间节点 思路:找到cur的上一个节点pre和自身的下一个节点cur.next,然后将pre.next = cur.next即可。...删除最后节点 遍历找到倒数第二个节点(cur.next.next=null),将倒数第二个节点指向null,再将最后一个节点指向原来的倒数第二个节点

    74320

    强大的Array.prototype.splice()

    方法通过删除或替换现有元素和/或添加新元素来更改数组的内容。 传参信息如下 1. start 从什么位置开始修改当前数组,这个参数有如下几种情况 0到数组长度-1,即当前数组的任意位置。...小于0,如果开始位置为负数,会从数组的末尾倒着查找,如,-1为最后一个元素,-2为倒数第二个元素。...', 'b', 'c', 'd', 'e', 'f'] let ary = ['a', 'b', 'c', 'd', 'e', 'f']; ary.splice(-2, 0, 'x'); // 在数组倒数第二个元素前插入一个元素...['a', 'b', 'c', 'd', 'e', 'f']; ary.splice(1, 1, 'x'); // 替换第二个元素‘b’为‘x’ (长度和传入的替换元素个数都为一) console.log...'c', 'd', 'e', 'f']; ary.splice(1, 2, 'x', 'y', 'z'); // 删掉第二个和第三个元素‘b’ ‘c’,插入三个元素‘x’,‘y’, ‘z’ (长度小于传入的替换元素个数

    39310

    Python算法题----逆序列表

    题目有了,看看怎么答,逆序排列,只需要将第一个和倒数第一个,第二个和倒数第二个,一直到中间那个位置的数字依次进行交换即可。    ...假设列表为data, 列表长度为len(data)      [1, 2, 3, 4, 5, 6, 7, 8, 9]      0  1  2  3  4  5  6  7  8     从上图的列表和其下标可得出如下结论...:     列表第1个元素下标为0 最后一个元素为len(data) - 0     列表第2个元素下标为1 最后一个元素为len(data) - 1     列表第3个元素下标为2 最后一个元素为len...(data) - 2     则我们遍历列表的时候假设循环变量为i, 上面的规律可表示为len(data) - 1 - i  现在开始写代码实现: def inverse(data=None):     ...    return data 单元测试 测试很重要,尤其是实现复杂功能的代码,为了避免每次改动都在代码中插一堆print,最好写测试代码,一次投入,回报长远。

    71930
    领券