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

#PY小贴士# PyCharm为什么执行结果很诡异?

今天讲这个小问题,没有用过 PyCharm 同学会完全不知所云,但用过的人,可能有一半以上概率会遇到这个算不上 bug 但也可能让人迷惑坑。...情况就是:当你写了一段代码,点击 PyCharm 右上角绿色小三角运行程序时,发现结果跟你预期完全不相干。然后,无论你怎么修改代码,结果丝毫不会改变。甚至你一怒之下删光所有代码,竟然仍有输出!...其实原因也很简单:在 PyCharm里面,切换了当前编辑 py 文件后,默认运行代码文件是不会跟着变。这时候用快捷键或者点运行按钮执行都还是一开始设定那个代码文件。 ?...或者在设置里重新设定下 run context configuration 快捷键,用这个快捷键来运行,就会是当前 py 文件了。...不过这样一来,如果你不是写单个文件代码,而是开发有固定执行入口项目,就反倒不方便了。所以具体就看你自己需要了。 ?

1.2K20

ArrayList删除姿势你都掌握了吗

引言 前几天有个读者由于看了《ArrayList哪种遍历效率最好,你真的弄明白了吗?》问了个问题普通for循环ArrayList为什么不能删除连续重复两个元素?其实这个描述是不正确。...正确应该是普通for循环正序删除,不能删除连续元素所以就产生了这个文章。 ? ArrayList删除数据方式 我们先看下ArrayList总共有几种删除元素方法吧。...,使用ArrayListremove()方法删除 * 可以删除 结果不正确 * @param list * @param predicate */ public...可以删除但是结果不正确方法for循环正序删除(deleteByOrder) 先来张图吧,看图更直观。...总结 上面列举了一系列删除方法,稍不小心使用不当就踩坑里面了。这么多也记不住啊?最好方法就是不要边循环边删除数据。如果非要删除咧?

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

ArrayList删除姿势你都知道了吗

引言 前几天有个读者由于看了《ArrayList哪种遍历效率最好,你真的弄明白了吗?》问了个问题普通for循环ArrayList为什么不能删除连续重复两个元素?其实这个描述是不正确。...正确应该是普通for循环正序删除,不能删除连续元素所以就产生了这个文章。 ? ArrayList删除数据方式 我们先看下ArrayList总共有几种删除元素方法吧。...,使用ArrayListremove()方法删除      * 可以删除  结果不正确      * @param list      * @param predicate      */     public...可以删除但是结果不正确方法for循环正序删除(deleteByOrder) 先来张图吧,看图更直观。...总结 上面列举了一系列删除方法,稍不小心使用不当就踩坑里面了。这么多也记不住啊?最好方法就是不要边循环边删除数据。如果非要删除咧?

79240

看了CopyOnWriteArrayList后自己实现了一个CopyOnWriteHashMap

二胖: 啊,没有啊这是第一次来这。 面试官: 行,那我们开始今天面试吧,刚开始我们先来点简单吧,java里面的容器你知道哪些啊,跟我说一说吧。...面试官: 那我们今天面试就先到这了,待会还有一个会,后续如有通知人事会联系你。 以上故事纯属虚构如有雷同请以本文为主。...为什么要引入COW 防止ConcurrentModificationException异常 在java里面我们如果采用不正确循环姿势去遍历List时候,如果一边遍历一边修改抛出java.util.ConcurrentModificationException...如果对ArrayList循环遍历不是很熟悉可以建议看下这篇文章《ArrayList删除姿势你都掌握了吗》 List list = new ArrayList();...[] array; 从源码中我们可以知道CopyOnWriteArrayList这和ArrayList底层实现都是通过一个Object数组来实现,只不过 CopyOnWriteArrayList数组是通过

63410

看了CopyOnWriteArrayList后自己实现了一个CopyOnWriteHashMap

**面试官:** 那我们今天面试就先到这了,待会还有一个会,后续如有通知人事会联系你。 **以上故事纯属虚构如有雷同请以本文为主。...为什么要引入COW 防止ConcurrentModificationException异常 在java里面我们如果采用不正确循环姿势去遍历List时候,如果一边遍历一边修改抛出java.util.ConcurrentModificationException...如果对ArrayList循环遍历不是很熟悉可以建议看下这篇文章《ArrayList删除姿势你都掌握了吗》 List list = new ArrayList();...线程安全容器 我们再看下面一个栗子一个线程往List里面添加数据,一个线程循环list读数据。...[] array; 从源码中我们可以知道CopyOnWriteArrayList这和ArrayList底层实现都是通过一个Object数组来实现,只不过 CopyOnWriteArrayList数组是通过

34240

JAVA增强for循环

大家好,又见面了,是你们朋友全栈君。 增强for循环 为什么需要增强for循环呢? 简化数组和集合遍历。...想要使用增强for循环必须先要了解它格式 增强for循环格式 for(数据类型 变量名 : 数组或者集合对象){ //循环体,变量即元素 } 注意: 增强for底层依赖是迭代器...obj : list ){ System.out.println(obj); } }//结果: 10,20,30,40,50 泛型 概念:即泛指任意类型,又叫参数化类型,对具体使用起到辅助作用...(10);这里运行时会报类型转换异常 //遍历集合 for (Object object : list) { String s = (String) object;//想要通过String...类型接收必须先强制类型转换 System.out.println(s);//结果a b c } //需求:使用泛型 //1.创建集合对象 //从jdk1.7开始后边泛型可以省略不写

98630

执行ArrayListremove(object)方法抛异常?

简介 或许有很多小伙伴都尝试过如下代码: ArrayList list = ...; for (Object object : list) { if (条件成立) {...增强for循环代码如下 for (Object object : list) { // 操作 } 其实增强for循环就是使用Iterator迭代器进行迭代,增强for循环就变成下面这样: Iterator... iterator = list.iterator(); while (iterator.hasNext()) { iterator.next(); // 操作 } 那么为什么在增强...现在把文章开头代码拷下来,再来分析一次: ArrayList list = ...; for (Object object : list) { if (条件成立) {...()) { iterator.next(); iterator.remove(); } 总结 本来还不知道增强for循环是调用Iterator进行迭代,要不是debug了一波,还不知道呐

78220

Java,你告诉 fail-fast 是什么鬼?

今天才了解到 Java 还有 fail-fast 一说。不得不感慨啊,学习真的是没有止境。只要肯学,就会有巨多巨多别人眼中“旧”知识涌现出来,并且在这全是新。 能怎么办呢?...02、for each 中集合 remove 操作 很长一段时间里,都不明白为什么不能在 for each 循环里进行元素 remove。今天我们就来借机来体验一把。...在 for each 循环中,集合遍历其实是通过迭代器 Iterator 配合 while 循环实现,但是元素 remove 却直接使用集合类自身方法。...04、怎么避开 fail-fast 保护机制呢 通过上面的分析,相信大家都明白为什么不能在 for each 循环里进行元素 remove 了。 那怎么避开 fail-fast 保护机制呢?...该异常可能由于检测到对象在并发情况下被修改而抛出,而这种修改是不允许。 通常,这种操作是不允许,比如说一个线程在修改集合,而另一个线程在迭代它。这种情况下,迭代结果是不确定

49910

Java,你告诉 fail-fast 是什么鬼?

今天才了解到 Java 还有 fail-fast 一说。不得不感慨啊,学习真的是没有止境。只要肯学,就会有巨多巨多别人眼中“旧”知识涌现出来,并且在这全是新。 能怎么办呢?...02、for each 中集合 remove 操作 很长一段时间里,都不明白为什么不能在 for each 循环里进行元素 remove。今天我们就来借机来体验一把。...在 for each 循环中,集合遍历其实是通过迭代器 Iterator 配合 while 循环实现,但是元素 remove 却直接使用集合类自身方法。...04、怎么避开 fail-fast 保护机制呢 通过上面的分析,相信大家都明白为什么不能在 for each 循环里进行元素 remove 了。 那怎么避开 fail-fast 保护机制呢?...该异常可能由于检测到对象在并发情况下被修改而抛出,而这种修改是不允许。 通常,这种操作是不允许,比如说一个线程在修改集合,而另一个线程在迭代它。这种情况下,迭代结果是不确定

45020

ArrayList 源码解析

上面为什么要多此一举使用Arrays.copyOf(elementData, size, Object[].class)复制一遍数组呢?...ArrayList 底层基于数组实现,所以它可在常数阶时间内完成随机访问,效率很高。对 ArrayList 进行遍历时,一般情况下,我们喜欢使用 foreach 循环遍历,但这并不是推荐遍历方式。...遍历时删除 遍历时删除是一个不正确操作,即使有时候代码不出现异常,但执行逻辑也会出现问题。关于这个问题,阿里巴巴 Java 开发手册里也有所提及。...初看这个执行结果确实很让人诧异,不明原因。如果死抠上面的代码,我们很难找出原因,此时需要稍微转换一下思路。...归根结底,上面的代码段没抛异常原因是,循环提前结束,导致 next 方法没有机会抛异常。

63141

兄dei,你被代码死循环坑了吗?

} 但是,如果不小心把条件写错了,变成这样: for(int i=0; i>10; i++) { System.out.println(i); } 结果就悲剧了,必定会出现死循环,因为循环条件变成恒等了...很多朋友看到这里,心想这种错误肯定不会犯。不过需要特别说明是,这里举例子相对来说比较简单,如果i>10这里是个非常复杂计算,还真说不准一定不会出现死循环。...1.2 不正确continu for语句在循环遍历数组和list时更方便,而while语句使用场景却更多。...对spring循环依赖问题有兴趣朋友,可以看看我之前写一篇文章《spring:是如何解决循环依赖?》。...1.3 自己写循环要注意什么? 不知道聪明小伙伴们有没有发现,我们自定义定时任务和生产者消费者例子中,也写了死循环,但跟上面其他例子都不一样,我们写循环没有出现问题,这是为什么

2K20

迭代器模式

遍历集合方式也有很多,比如for循环、while循环、foreach循环、Iterator等。这里Iterator就是我们设计模式里面的迭代器模式。...private ArrayList arrayList = new ArrayList(); @Override public void add(Object object)...异常 那么问题来了,为什么会有这个异常信息呢?...符合单一职责原则以及开闭原则 可以对遍历进行把控暂停或者继续 总结 迭代器设计模式在我们业务场景中自己写代码中 个人是觉得比较少见,至少到目前还没有怎么发现有好业务场景可以用这个模式,所以这里就不给大家举例业务代码改造了...今天迭代器模式到此结束,是敖丙,你知道越多,你不知道越多,我们下期见!!!

39440

List 10个坑,保证你一定遇到过!

大家好,是田哥 在我们实际开发中,List应该是使用最多集合之一,既然用多,那我们就应该重视,免得出bug。...如果不正确操作也不支持增删操作 在第二个坑时候,我们说到了 Arrays.asList 返回 List 不支持增删操作, 是因为他自己实现了一个内部类 ArrayList,这个内部类继承了 AbstractList...但是第三个坑时候,我们利用 java.util.ArrayList 包装了返回 List,进行增删操作还是会失败,那是为什么呢?...总结了四种方式 ArrayList subList 强转 ArrayList 导致异常 阿里《Java开发手册》上提过 [强制] ArrayListsublist结果不可強转成ArrayList...,循环1000次创建了1000个具有10万个元素List 因为始终被collect.subList(0, 1)强引用,得不到回收 解决方式: 在subList方法返回SubList,重新使用new ArrayList

47220
领券