(最近在看JDK源码,只是拿着它的继承图在看,但很多东西不记录仍然印象不深,所以开始记录JDK阅读系列。)

(一)Arrays

  • Arrays比较特殊,直接继承自Arrays -》List(Interface) -》Collection(Interface)。
  • (Maybe因为Java中的数组本身就比较特殊?)
  • 包含一些用来操作数组的一些方法,比如排序,搜索,复制,填充,toString方法等;
    • 搜索使用二分搜索;
    • 排序:使用DualPivotQuickSort中的排序算法,基本是改进版的快速排序,但里面做了很多性能改进。
      • 当数组元素比较少时使用插入排序,或者改进后的插入排序(每次两个元素一起插);
      • 当数组元素较大时才会使用快排,使用两个pivot,将数组划分成四部分:<pivot1, pivot1<x<pivot2, 未排序, >pivot2
      • 整个排序过程看起来有些麻烦,但确实提高了排序性能,下面会写专门一篇排序的(数组排序应该也是Arrays类中的关键及精髓了)

(二)LinkedList

  • 继承关系为:LinkedList -》Abstract Sequential List -》 Abstract List
  • 使用链表的各种操作,其中为了提高效率,类中有first和last变量记录链表的首部和尾部;每个节点都会有前驱和后继;
  • 这里要注意的是序列化的问题:
    • 所有的私有成员变量都标识为transient,表示这些变量不会使用统一的序列化方法,而是由用户自己定制。
    • 序列化与反序列化:对象的序列化是指将Object对象转化为byte序列,反之叫做对象的反序列化
      • 序列化:ObjectOutputStream,  反序列化:ObjectInputStream
      • 序列化的好处:能够自动弥补不同操作系统之间的差异。可以在运行Windows操作系统的计算机上创建一个对象,将其序列化,通过网络将它发送给一台运行Unix系统的计算机,然后在那里能够准确的重新组装,而不必担心数据在不同机器上的表示会不同,也不必关心字节的顺序或者其他任何细节;

(三)Vector

  • 继承关系为:vector -》 List(Interface), RandomAccess(Interface), AbstractList
  • 使用数组存储所有元素;
  • 扩容:可以在构造函数中指定扩容大小;当容量溢出时扩容则为2倍扩;
  • 大部分读写方法都是synchronized,所以是线程安全的。

(四)ArrayList

  • 继承关系为:ArrayList -》 List(Interface), RandomAccess(Interface), AbstractList
  • 扩容:每次扩容为原来的1.5倍
  • 基本如同数组的操作。

(五)Stack

  • 继承关系为:Stack-》Vector
  • 所以使用了vector类的很多方法,然后封装在pop,push,peek等方法中,实现stack的基本要求。

Java _ JDK _ Arrays, LinkedList, ArrayList, Vector 及Stack的更多相关文章

  1. Java集合详解1:ArrayList,Vector与Stack

    今天我们来探索一下LinkedList和Queue,以及Stack的源码. 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech 喜欢的话麻烦star一下 ...

  2. Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理

    本文非常详尽地介绍了Java中的三个集合类 ArrayList,Vector与Stack <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整 ...

  3. [Java]ArrayList、LinkedList、Vector、Stack的比较

    一.介绍 先回顾一下List的框架图 由图中的继承关系,可以知道,ArrayList.LinkedList.Vector.Stack都是List的四个实现类. AbstractList是一个抽象类,它 ...

  4. LinkedList,ArrayList,Vector,HashMap,HashSet,HashTable之间的区别与联系

    在编写java程序中,我们最常用的除了八种基本数据类型,String对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!java中集合大家族的成员实在是太丰富了,有常用的ArrayList. ...

  5. Java集合 之List(ArrayList、LinkedList、Vector、Stack)理解(new)

    一. ArrayList底层实现原理 对比 和Vector不同,ArrayList中的操作不是线程安全的!所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOn ...

  6. ArrayList,LinkedList,Vector,Stack之间的区别

    一,线程安全性 Vector.Stack:线程安全 ArrayList.LinkedList:非线程安全 二,实现方式 LinkedList:双向链表 ArrayList,Vector,Stack:数 ...

  7. java的list几种实现方式的效率(ArrayList、LinkedList、Vector、Stack),以及 java时间戳的三种获取方式比较

    一.list简介 List列表类,顺序存储任何对象(顺序不变),可重复. List是继承于Collection的接口,不能实例化.实例化可以用: ArrayList(实现动态数组),查询快(随意访问或 ...

  8. Java ArrayList Vector LinkedList Stack Hashtable等的差别与用法(转)

    ArrayList 和Vector是采取数组体式格式存储数据,此数组元素数大于实际存储的数据以便增长和插入元素,都容许直接序号索引元素,然则插入数据要设计到数组元素移动等内存操纵,所以索引数据快插入数 ...

  9. Arraylist Vector Linkedlist区别和用法 (转)

    ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢 ...

随机推荐

  1. Inside TSQL Querying - Chapter 3. Query Tuning

    Tuning Methodology When dealing with performance problems, database professionals tend to focus on t ...

  2. Eclipse安装插件支持jQuery智能提示

    Eclipse安装插件支持jQuery智能提示 最近工作中用到jQuery插件,需要安装eclipse插件才能支持jQuery智能提示,在网上搜索了一下,常用的有三个插件支持jQuery的智能提示:1 ...

  3. Linux 封闭端口和安全

    两种方法: 1.停掉没用的服务,关闭端口监听 2.用 iptables 封闭端口 ######################################## 1.查看端口和占用服务 netsta ...

  4. git-gui

    使用Git.Git GUI和TortoiseGit http://zengrong.net/post/1722.htm 但云桌面不能安装,则TortoiseGit不能使用! 只能想到用totalcmd ...

  5. 2016年最好的15个Web设计和开发工具

    1.ai2html ai2html是适用于Adobe Illustrator的开源脚本,可以转换Illustrator文件为html和css. 官方网站:http://ai2html.org/ 2.A ...

  6. HTTP 请求未经客户端身份验证方案“Anonymous”授权。从服务器收到的身份验证标头为“Negotiate,NTLM”

    转自:http://www.cnblogs.com/geqinggao/p/3270499.html 近来项目需要Web Service验证授权,一般有两种解决方案: 1.通过通过SOAP Heade ...

  7. Mysql slow query log

    一.概念部分:  顾名思义,慢查询日志中记录的是执行时间较长的query,也就是我们常说的slow query,通过设--log-slow-queries[=file_name]来打开该功能并设置记录 ...

  8. linux中的nm命令简介

    转:http://blog.csdn.net/stpeace/article/details/47089585 一般来说, 搞linux开发的人, 才会用到nm命令, 非开发的人, 应该用不到. 虽然 ...

  9. 八大排序算法之四选择排序—堆排序(Heap Sort)

    堆排序是一种树形选择排序,是对直接选择排序的有效改进. 基本思想: 堆的定义如下:具有n个元素的序列(k1,k2,...,kn),当且仅当满足 时称之为堆.由堆的定义可以看出,堆顶元素(即第一个元素) ...

  10. JS获取非行间样式

    我们都知道用offset函数获取元素样式是一件很方便的事,但是offset只能获取行间样式,而无法获得非行间样式,这是它的瓶颈所在. 我们都知道js获取行间样式的方法,那么js是如何获取行距样式的呢? ...