深入剖析ArrayList的底层源码-ArrayList 和 Vector 的区别
ArrayList 和 Vector 底层都是 数组
ArrayList 每次扩容的情况下扩容为原来的1.5 倍。线程不安全,当多个线程同时访问同一个ArrayList 集合时,如果两个或两个以上的线程修改了 ArrayList 集合,则必须手动保证该集合的同步性。
Vector 是同步类,其线程安全,但是它的访问比较慢。Vector 每次扩容为其空间大小的 2 倍。
继续阅读 >
分类目录归档:Java
2020
03-12
03-12
深入剖析ArrayList的底层源码-常用方法及其源码剖析
2020
03-12
03-12
深入剖析ArrayList的底层源码-构造方法及其源码剖析
2020
03-12
03-12
深入剖析ArrayList的底层源码-ArrayList介绍及其源码剖析
ArrayList是可调整大小的数组,实现了List接口。 实现所有可选列表操作,并允许所有元素包括null 。 除了实现List 接口之外,该类还提供了一些方法来操纵内部使用的存储列表的数组的大小。 (这个类是大致相当于Vector,不同之处在于它是不同步的)。
继续阅读 >
2020
03-12
03-12
连存活到JDK8中著名的Bug都不知道,怎么敢给你加薪
SubClass 继承自BaseClass,由于SubClass数组中每一个元素都是SubClass对象,所以BaseClass[] baseArray = subArray;这种强制类型转换不会报错。这其实就是java对象的向上转型,子类数组转换成父类数组是允许的。但是由于数组中元素类型都是SubClass类型的,所以 baseArray[0] = new BaseClass();会报错java.lang.ArrayStoreException。这也就是说假如我们有1个Object[]数组,并不代表着我们可以将Object对象存进去,这取决于数组中元素实际的类型。
继续阅读 >
2018
05-28
05-28
一遍记住Java常用的八种排序算法与代码实现
1.直接插入排序经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。将第一个数和第二个数排序,然后构成一个有序序列将第三个数插入进去,构成一个新的有序序列。对第四个数、第五个数……直到最后一个数,重复第二步。如何写写成代码:首先设定插入次数,即循环次数,for(inti=1;i<length;i++),1个数的那次不用插入。设定插入数和得到已经排好序列的最后一个数的位数。inser...
继续阅读 >
2017
10-13
10-13
Java在线问题排查利器之Btrace&Greys
1.前言前段时间升级了urs新的远程cookie校验模式。功能上线后,发现涉及用户cookie校验的接口,有时会报接口超时。通过日志埋点方式,确认了与urs提供的jar包内的新验证方法有关。通过反编译,看到相关方法执行过程中涉及参数校验、参数组装、远程访问校验、本地校验等步骤,究竟哪个步骤出了问题?一种方式是让urs帮忙提供一个新的jar包,在关键步骤处加日志,记录执行时间,另一种方法,就是使用一些在线分析工具...
继续阅读 >
2017
10-03
10-03
写出优质Java代码的4个技巧
译者注:如果现在要求对你写的Java代码进行优化,那你会怎么做呢?作者在本文介绍了可以提高系统性能以及代码可读性的四种方法,如果你对此感兴趣,就让我们一起来看看吧。以下为译文。我们平时的编程任务不外乎就是将相同的技术套件应用到不同的项目中去,对于大多数情况来说,这些技术都是可以满足目标的。然而,有的项目可能需要用到一些特别的技术,因此工程师们得深入研究,去寻找那些最简单但最有效的方法。在前一篇...
继续阅读 >
2017
09-29
09-29
安卓开发常用工具和第三方库汇总
我的名字叫RyanCooke我在Pinterest的核心体验团队工作。今天在这里我会谈论各种Android库:它们各自的优点,缺点和其他相关知识。目的是高效地概述尽可能多的库,这样,当你遇到一个问题的时候,你知道这是不是个已经解决的问题?什么样的方案更好?同时也能帮助你避免那些陷阱。选择正确的库意味着你可以拥有一个已经成熟的更好的解决方案,而不是花费三个月来重新构建它。了解这些库是第一步。我听到很多人想...
继续阅读 >
2017
08-29
08-29
Java中处理异常的9个最佳实践
Java中的异常处理不是一个简单的话题。初学者很难理解,甚至有经验的开发人员也会花几个小时来讨论应该如何抛出或处理这些异常。这就是为什么大多数开发团队都有自己的异常处理的规则和方法。如果你是一个团队的新手,你可能会惊讶于这些方法与你之前使用过的那些方法有多么不同。然而,有几种异常处理的最佳方法被大多数开发团队所使用。下面是帮助改进异常处理的9个最重要的方法。1.在Finally中清理资源或者使用...
继续阅读 >
2017
07-28
07-28
Java的21个技术点,你知道吗?
关于Java的编程知识,有人会问哪几个是重要的知识点,不知道大家是否知道呢?给大家分享一下。1.JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。不过对于一个有着3年以上Java经验的资深开发者来说,不会JVM几乎是不可接受的。JVM作为java运行的基础,很难相信对于JVM一点都不了解的人可以把java语言吃得很透。我在面试有...
继续阅读 >
2017
06-09
06-09
简单高效的实现Android App全局字体替换
AndroidO推出了一项新的功能「FontsinXML」,借助这项功能,我们能够像使用其他资源文件一样使用字体,比较方便地实现App全局字体的替换。为了能够在API14或者以上的设备上使用FontsinXML特性,我们需要使用到SupportLibrary26。更多的内容可以参考「使用SupportLibrary」小节。在AndroidStudio中按照如下步骤将字体作为资源文件添加至工程:右键单击项目的app/res文件夹,然后选择New>An...
继续阅读 >
2017
05-31
05-31
Android截屏与WebView长图分享经验总结
最近在做新业务需求的同时,我们在Android上遇到了一些之前没有碰到过的问题,截屏分享、WebView生成长图以及长图在各个分享渠道分享时图片模糊甚至分享失败等问题,在这过程中踩了很多坑,到目前为止绝大部分的问题都还算是有了比较满意的解决方案。以下就从三个方面来总结一下过程中遇到的挑战和最后的解决方案。一、概述最近在做新业务需求的同时,我们在Android上遇到了一些之前没有碰到过的问题,截屏分享、...
继续阅读 >
2017
05-09
05-09
Java多线程基础 线程的等待与唤醒
题图:花啡,豆是买咖啡机送的,花是上周阳朔旅游买的桂花,给它起了个名字,叫Sunday。咖啡味淡了一点点,多了一份桂花的清香。本篇我们来研究一下wait()notify()notifyAll()。DEMO1:wait()与notify()publicclassTest{staticclassThreadOneextendsThread{privateCallbackmCallback;@Overridepublicvoidrun(){work();if(mCallback...
继续阅读 >
2017
05-02
05-02
Android的滑动分析以及各种实现
一、滑动效果的产生滑动一个View,本质区别就是移动一个View。改变当前View所在的坐标,原理和动画相似不断改变坐标位置实现。实现View的滑动就必须监听滑动的事件,并且根据事件传入的坐标,动态且不断改变View的坐标,从而实现View跟随用户触摸的滑动而滑动。(1)、Android的坐标系Android中将屏幕最左上角的顶点作为Android坐标系的原点,从这个点向右是X轴正方向,从这个点向下是Y轴正方向,如下图:系...
继续阅读 >
2017
05-02
05-02
Android全套动画使用技巧
一、AndroidView动画框架Animation框架定义了透明度、旋转、缩放和位移几种常见的动画,控制的整个View,实现原理是每次绘制视图时View所在ViewGroup中的drawChild函数获取该View的Animation的Transformation值,然后调用canvas.concat(transformToApply.getMatrix()),通过矩阵运算完成动画帧。如果没有完成就继续调用invalidate()函数,启动下次绘制来驱动动画,从而完成整个动画的绘制。视图动画使用简单,效...
继续阅读 >
2017
04-13
04-13
Java程序员应当知道的10个面向对象设计原则
面向对象设计原则是OOPS编程的核心,但我见过的大多数Java程序员热心于像Singleton(单例)、Decorator(装饰器)、Observer(观察者)等设计模式,而没有把足够多的注意力放在学习面向对象的分析和设计上面。学习面向对象编程像“抽象”、“封装”、“多态”、“继承”等基础知识是重要的,但同时为了创建简洁、模块化的设计,了解这些设计原则也同等重要。我经常看到不同经验水平的java程序员,他们有的不知道这些OOPS和SOLI...
继续阅读 >
2017
03-25
03-25
Android应用安全风险与防范
Hello,大家好,我是Clock。最近一段时间在做Android应用安全方面的功课,本文进行简单梳理方便以后Review,有错误和遗漏之处还请大家指出。代码混淆Android开发除了部分功能采用C/C++编码外,其余主要都是采用Java进行编码开发功能。Java应用非常容易被反编译,Android自然也不例外。只要利用apktool等类似的反编译工具,就可以通过安装包获取源代码。Google为了保护开发者的知识产权,为Android提供了ProGuard混淆方...
继续阅读 >
2017
03-01
03-01
Java线程内存模型,线程、工作内存、主内存
java线程内存模型线程、工作内存、主内存三者之间的交互关系图:keyedeas所有线程共享主内存,每个线程有自己的工作内存refreshinglocalmemoryto/frommainmemorymustcomplytoJMMrules产生线程安全的原因线程的workingmemory是cpu的寄存器和高速缓存的抽象描述:现在的计算机,cpu在计算的时候,并不总是从内存读取数据,它的数据读取顺序优先级是:寄存器-高速缓存-内存。线程耗...
继续阅读 >
2017
02-23
02-23
35 个 Java 代码性能优化总结
前言代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可...
继续阅读 >
2017
02-22
02-22
JAVA 常用集合内部机制原理
对于常用的集合大家都不陌生,但是深入到内部原理可能都是一知半解,通过阅读源码理解如下。ArrayListArrayList内部就是一个默认大小为10的动态对象数组容器,每当add一个新数据的时候,如果大于原来的容器大小,则会通过Arrays.copyOf把容器大小增加到原来的1.5倍,以此类推。当可以预知数据大小,可以通过initialCapacity来默认设置动态数据的大小,减少扩容带来的资源消耗。时间复杂度:get()-直接读取...
继续阅读 >
2017
02-17
02-17
40个Java集合面试问题和答案
1.Java集合框架是什么?说出一些集合框架的优点?每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合的广泛使用,Java1.2提出了囊括所有集合接口、实现和算法的集合框架。在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久。它还包括在Java并发包中,阻塞接口以及它们的实现。集合框架的部分优点如下:(1)使用核心集合类降低开发成本,而非实现我们自...
继续阅读 >
2017
02-13
02-13
阿里面试回来,想和Java程序员谈一谈
引言其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来。LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容基本上忘得一干二净,所以写这篇文章其实是很有难度的。但是,最近问LZ的人实在是太多了,为了避免重复回答,给自己省点力气,干脆就在这里统一回复了。其实之前LZ写过一篇文章,但是那篇文章更多的是在...
继续阅读 >
2017
02-13
02-13
多种负载均衡算法及其Java代码实现
首先给大家介绍下什么是负载均衡(来自百科)负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡,英文名称为LoadBalance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。本文讲述的是"将...
继续阅读 >