在另外一篇博客我简单介绍了java类集框架相关代码和理论。

这一篇博客我主要分析一下各个类集框架的原理以及源码分析。

一:先谈谈LinkedList

这是LinkedList源码的开头,我们能看到几点,1.它的继承关系,实现了哪些接口,Deque<E>就是Quene队列的子类.

2.他的Node属性都是transient关键字,transient即代表在串行化的时候不会持久化数据,LinkedList是实现了序列化接口的,但是这个transient关键字决定了在串行化过程中Node的结果。

继续往下看:

上面代码是我写的测试方法,调用main方法的代码就不展示了,这样比较直观的对应输出关系。

可以看到Collection<E>类集List<E> 的add方法种类,这里选择LinkedList进去看源码。

add调的是linkLast方法,现在我来解释一下这个方法。

LinkedList在add添加元素的时候调用了这个方法,这个方法的意思是:

首先介绍一下Node节点这个数据结构,含有  前(prev) 值(element) 后(next),这三个属性,我习惯称为火车头,数据,火车尾

当添加元素的时候,如果是第一个头元素(l==null,l代表火车尾),Node的first节点就是该元素,如果火车尾不是空的,也就是代表火车尾挂着一个节点,那么就讲这个元素挂到next节点,像挂火车那样挂。

这里要注意的是链表的数据结构是会挂一个空车厢做车头,也就是说第一次add的元素就会做第一节车厢,接下来判断last都不为空,那么都一节一节往后挂车厢,这就是链表的数据结构,其余的方法看我贴的代码应该可以理解,注释的很细。

二:谈谈HashMap

这个图是我刚才网上截下来的,这也是大家看到最多的hashmap的数据结构,没错就是个table数组挂链表,“链表散列”数据结构,其实原理也很容易解释,在table数组上有很多的位置,每个位置都是一个entry,每个位置就是一个burket篮子,放entry用的。

entry保存的就是key value的建值对,这就是hashmap的数据结构,那么实现这个数据结构的原理就是利用hash算法进行burket的确定,利用hash算法决定这条建值对存放在哪一个篮子里面,如果hashcode冲突的情况下进行equals方法的比较,如果hashcode一样且equals也相等,就在数组的基础上挂链表,解决hash冲突问题。

附带一句,hashmap是线程不安全的,异步的,Set底层使用的是hashmap的key存放数据,value存放Object类型的没什么用(个人理解)的标记。

hashtable则是线程安全的同步。

三:ArrayList和Stack

栈没什么好讲的,先进先出,压栈就可以形容这种数据结构,就像把砖块一块一块的叠高,最后叠的最先拿走,也就是First In First Out的由来FIFO。

栈是继承了Vector这个古老的类,Vector和ArrayList几乎没什么区别,我个人理解是ArrayList是在Vector的基础上做了变动衍生的类,因为ArrayList和Vector继承和实现结构都一致,方法大多一样,显而易见的区别只有add等方法Vector使用了同步关键字。

还有一点区别是ArrayList扩容的时候是增加50%的数组长度,Vector是直接增加一倍的容量,这一点来说ArrayList更节省内存、

另外要提的一点就是ArrayList在查找方面的性能明显优于LinkedList,因为get方法源码调的是Object数组进行二分查找,而LinkedList无论查哪一位都要从火车头找下去,一节一节的去按顺序遍历。

而LinkedList在插入方面性能高于ArrayList,而且ArrayList不适合频繁的插队数据以及删除数据,链表这种顺序队列结构更适合于频繁插队。

今天先讲这么多,改天再说剩下的,讲的比较随意,网上很多介绍的东西我就没赘述了,主要说一说个人理解。

浅谈java类集框架和数据结构(1)的更多相关文章

  1. 浅谈java类集框架和数据结构(2)

    继续上一篇浅谈java类集框架和数据结构(1)的内容 上一篇博文简介了java类集框架几大常见集合框架,这一篇博文主要分析一些接口特性以及性能优化. 一:List接口 List是最常见的数据结构了,主 ...

  2. 浅谈Java的集合框架

    浅谈Java的集合框架 一.    初识集合 重所周知,Java有四大集合框架群,Set.List.Queue和Map.四种集合的关注点不同,Set 关注事物的唯一性,List 关注事物的索引列表,Q ...

  3. 专题笔记--Java 类集框架

    Java 类集框架 1. Java类集框架产生的原因 在基础的应用中,我们可以通过数组来保存一组对象或者基本数据,但数组的大小是不可更改的,因此出于灵活性的考虑和对空间价值的担忧,我们可以使用链表来实 ...

  4. Java类集框架详细汇总-底层分析

    前言: Java的类集框架比较多,也十分重要,在这里给出图解,可以理解为相应的继承关系,也可以当作重要知识点回顾: Collection集合接口 继承自:Iterable public interfa ...

  5. Java类集框架——List接口

    学习目标 掌握List接口与Collection接口的关系. 掌握List接口的常用子类:ArrayList.Vector. 掌握ArrayList与Vector类的区别.    Collection ...

  6. 浅谈Java反射与框架

    Java反射 1.示例 1.用户类 package com.lf.entity; import com.lf.annotation.SetProperty; import com.lf.annotat ...

  7. java类集框架(ArrayList,LinkedList,Vector区别)

    主要分两个接口:collection和Map 主要分三类:集合(set).列表(List).映射(Map)1.集合:没有重复对象,没有特定排序方式2.列表:对象按索引位置排序,可以有重复对象3.映射: ...

  8. java:类集框架conllection接口list,set

    类集中提供了以下几种接口: 1.单值操作接口:conllection,List,Set list和set是conllection接口的子接口 2.一对值的操作接口:Map 3.排序的操作接口:Sort ...

  9. 浅谈Java类中的变量初始化顺序

    一.变量与构造器的初始化顺序 我们知道一个类中具有类变量.类方法和构造器(方法中的局部变量不讨论,他们是在方法调用时才被初始化),当我们初始化创建一个类对象时,其初始化的顺序为:先初始化类变量,再执行 ...

随机推荐

  1. SqlServer将没有log文件的数据库文件附加到服务器中

    今天搞了一件很让我不爽的事情,一不小心把一个40多G的数据库日志文件删除,而且在删除之前我又搞了个日志进去,死活附加不了到服务器上去一直提示多个日志不能自动创建,白白浪费了我一个晚上的时间,后来不断的 ...

  2. Jquery easyui开启行编辑模式增删改操作

    Jquery easyui开启行编辑模式增删改操作 Jquery easyui开启行编辑模式增删改操作先上图 Html代码: <table id="dd"> </ ...

  3. openCV_java Canny边缘检测

    边缘检测的原理: 检测出图像中所有灰度值变化较大的点,而且这些点连起来构成若干线条,这些线条就称之为图像的边缘. 1986年,由John F. Canny 提出! // Canny(Mat image ...

  4. apache的hadoop升级到CDH hadoop2.0时遇到的问题及解决

    1:引入的jar包 1.X版本有hadoop-core包:而2.x没有 如果你需要hdfs就引入\share\hadoop\common\lib + hadoop-common-2.0.0-cdh4. ...

  5. LDO/DC-DC区别总结(转)

    电源是一个电子系统中不可缺少的非常重要的一部分.但是外接的电源通常不能够完全提供系统中需要的所有的电源种类.因此带来了电源电压的变换问题.常用的电源电压的变换芯片包括LDO和DC-DC两种.下面对这两 ...

  6. Codeforces Round #292 (Div. 1) C. Drazil and Park 线段树

    C. Drazil and Park 题目连接: http://codeforces.com/contest/516/problem/C Description Drazil is a monkey. ...

  7. [转] Visual Studio Code behind a proxy

    http://www.tuicool.com/articles/jyyIBf3 http://blog.majcica.com/2016/04/07/visual-studio-code-behind ...

  8. 基于Bootstrap的后台通用模板

    人总是比较刁的,世界的时尚趋势不断变化,对系统UI的审美也在不断疲劳中前进,之前觉得好好的UI,过了半年觉得平平无奇,不想再碰,需要寻求新的兴奋点. 下面这套UI就是半年前的(今日:2015-12), ...

  9. SQL语句删除所有表

    ) )     ) )     ) )     ) ) )  TABLE_NAME  CONSTRAINT_NAME  CONSTRAINT_NAME  TABLE_NAME ) ) )  TABLE ...

  10. JPA与Hibernate的关系

    1.JPA JPA全称: Java Persistence API  JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中.  JPA的出现?  JPA ...