2018年1月6号,星期六,上午9点,本来是该睡懒觉的时间,我却早早的爬起床来
打开电脑,打开IDEA,写一下昨天京东金融的算法题,昨天只是把所有的面试题记录下来,防止未来忘记了,并没有给出答案,因为昨天太累了,想休息一下。
就是如下简单的一道题目,让我手写,我没写出来,至于原因,我内心是抵触用笔写算法题目的,没心情写,脑子空白了。
我只有用键盘才可以写出来,或许会被好多面试官认为我这个人技术不行吧。
过去的已经过去,虽然现在写出来已经没有任何意义,但是还是要弥补以往的过失,不让遗憾留给未来,
昨天遗留的问题还是需要解决掉,才可以迎接崭新的明天。
package JD; /** * Created by 郑云飞 on 2018/1/6. * 计算 f(8)的值,并用程序实现 * F(1)=1 F(2)=1 F(3)=2 F(4)=3 F(5)=5 F(6)=8 F(7)=13 F(8)=? * */ public class Demo1 { public static void main(String [] args){ int result=fun(8); System.out.println("计算结果======"+result); } public static int fun(int n){ int result=0; if(n==1){ result=1; } if(n==2){ result=1; } if(n>2){ result=fun(n-1)+fun(n-2); } return result; } }
结果
集合中如何删除元素
package JD; import java.util.ArrayList; import java.util.List; /** * Created by 郑云飞 on 2018/1/6. * 京东金融面试题之:集合中如何删除元素 */ public class Demo2 { /** * 下面我们以list集合为例 */ public static void main(String []args){ List list=new ArrayList(); list.add(1); list.add(2); list.add(2); list.add(3); //执行如下删除操作,会有什么问题? for(int i=0;i<list.size();i++){ if(2==list.get(i)){ list.remove(i); } } //执行结果 for(int i=0;i<list.size();i++){ System.out.println(list.get(i)); } } }
输出结果
原集合:1 2 2 3 删除后集合:1 2 3
这是因为,删除时改变了list的长度。删除第一个2后,长度变为了3,这时list.get(2)为3,不再是2了,不能删除第2个2 利用for循环删除时索引没有回溯,导致漏删元素
那么怎么样才能正确删除集合中的元素呢?
1、第一种删除方式(利用for循环删除):
for(int i=0;i<list.size();i++){ if(2==list.get(i)){ list.remove(i--);// 索引回溯 } }
运行结果
原集合:1 2 2 3 删除后集合:1 3
2、第二种删除方法(利用迭代器的remove()方法删除)
ListIterator listIterator = list.listIterator(); while(listIterator.hasNext()){ int value = (Integer)listIterator.next(); if (2==value) { //aList.remove(str); // 集合自身的remove()方法删除 listIterator.remove(); //迭代器的remove() 方法删除 } }
运行结果
原集合:1 2 2 3 删除后集合:1 3
注意事项
1、利用for循环删除时索引没有回溯,导致漏删元素
2、使用迭代器循环删除元素时,没有利用迭代器remove方法删除元素而是利用集合自身的remove方法删除元素,
这样会导致“并发修改异常错误”
ListIterator listIterator = list.listIterator(); while(listIterator.hasNext()){ int value = (Integer)listIterator.next(); if (2==value) { list.remove(value); // 集合自身的remove()方法删除 // listIterator.remove(); //迭代器的remove() 方法删除 } }
运行结果:
Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859) at java.util.ArrayList$Itr.next(ArrayList.java:831) at JD.Demo2.main(Demo2.java:25) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134) Process finished with exit code 1
并发修改异常错误的产生是因为在生成迭代器后迭代器就已经确定了集合的长度size了,
而后集合删除元素后集合的size变小,
但是迭代器任然记录的是之前的size数据在迭代过程中产生并发修改异常ConcurrentModificationException,
但是如果是使用迭代器的remove()方法来删除元素的话则不会产出这个问题,因为迭代器中的cursor能够自动适应元素删除后集合大小的变化;
所以在删除集合元素时,如果适应迭代器来循环集合元素一定要使用迭代器自身的remove()方法来删除元素;
相关推荐
《京东金融大数据分析平台总体架构》是2013年8月27日发布的一个重要文档,主要聚焦于京东金融如何构建其大数据分析系统。在这个系统中,京东金融利用先进的大数据技术来处理海量的金融数据,以提升业务决策、风险...
京东2018秋招产品、项目与金融类笔试题及答案.pdf 本资源是京东2018秋招产品、项目与金融类笔试题及答案的PDF文件,涵盖了金融、产品、项目等领域的知识点,旨在帮助求职者备战京东秋招笔试。下面是对该资源中涉及...
京东金融大数据剖析平台总体架构是金融领域中大数据技术在实际应用中的一个重要实例。该平台旨在通过高效的数据处理、分析和挖掘,为业务决策提供强有力的支持,优化风险控制,提升服务质量,以及实现更精准的市场...
### 京东金融性能测试指南知识点解析 #### 一、序言 - **编者寄语**:本章节简短地表达了编写此文档的目的和期望,为读者提供了阅读指南的背景和动机。 - **编者简介**:介绍了撰写文档的专业人士或团队的信息,...
为了解决上述问题,京东金融采用了组件化与模块化的开发策略。这不仅有助于提高开发效率,还能有效降低维护成本。 - **私有库和第三方库的沉淀**:通过合理管理私有库和第三方库,减少重复工作,提高代码复用率。 -...
JIMI系统不仅集成了京东自营导购和售后服务,还与京东金融、京东POP、京东到家等开放平台相连接,使得机器人能够跨平台提供服务。 #### 11. 技术架构与特点 JIMI系统采用平台化、组件化的设计理念,实现高性能和...
【人工智能算法岗位面试题】是针对想要在AI和算法领域求职者的一份宝贵资源,它汇总了多个知名互联网公司历年的真实面试题目,涵盖了人工智能、机器学习等关键领域的知识点。这份资料旨在帮助求职者全面了解并准备...
京东白条作为京东金融推出的信用支付工具,其基于大数据征信的业务模式,为用户提供了快速和便捷的无抵押消费信贷服务。然而,随着互联网金融的迅猛发展,京东白条在风险控制方面遭遇了多重挑战,包括大数据征信评估...
同时,互联网金融企业如百度金融、蚂蚁花呗和京东白条等也采用类似技术,取得了良好的风险控制效果。 【人工智能算法分类及应用】 1. **分类算法**: - **逻辑回归**:通过逻辑函数确定样本属于某一类别的概率。 ...
为了解决这些问题,京东金融客服体系利用AI和大数据技术,建立起了客户画像、行为轨迹分析、业务场景分析以及异常信息检测等。通过这些数据分析,客服机器人可以预测客户意图、主动推送服务、反馈产品问题、判断客户...
京东超脑行业解决方案是京东金融自主研发的一款基于深度学习算法技术的智能生物识别产品,它能够运用千万级数据进行模型训练,主要研究内容包括人脸识别、人脸防伪、声纹识别、语音识别、虹膜识别以及行人再识别等...
这份资料是2018年京东秋季招聘针对产品、项目和金融类岗位的笔试题,包含多项选择题,涵盖了互联网事件、银行业务、法律法规、金融产品、交易制度、心理学理论、程序效率、支付模式、数据分析等多个领域。...
面对区块链技术的挑战,如分布式网络的规模化难题和部分企业数字化能力不足的问题,京东数字科技持续投入研发,推出了自主研发的区块链底层框架系统——JD Chain。JD Chain支持国密算法和账本动态扩展,旨在满足企业...
总的来说,【京东白条微信小程序源码】是一个完整的开发套件,涵盖了从用户界面到后台接口的全部流程,开发者通过学习和理解这个源码,可以掌握微信小程序开发的技能,以及如何构建一个类似京东白条的金融服务平台。
京东白条作为京东金融推出的一款消费信贷产品,它在为用户提供便捷购物体验的同时,也需要面对与之相关的风险控制问题。风险控制是金融行业中至关重要的一环,对于京东白条而言,其风险控制机制的设计与实施直接影响...