走进JDK(七)------LinkedList】的更多相关文章

要学习LinkedList,首先得了解链表结构.上篇介绍ArrayList的文章中介绍了底层是数组结构,查询快的问题,但是删除时,需要将删除位置后面的元素全部左移,因此效率比较低. 链表则是这种机制: 此图展示的是一个单向列表,单向链表只能向一个方向遍历.链表中存在一系列的节点(node),每个node中维护了一个data以及一个next链,data则保存当前node所需要保存的数据,而next链指向下一个元素,最后一个node的next指向null. 这个则是个典型的双向链表,双向链表中一共存…
debug 模式 ,在fis=new FileInputStream(file); 行打断点 调试过程中发现按f5无法走进jdk源码 package com.lzl.spring.test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import…
有人说HashMap是jdk中最难的类,重要性不用多说了,敲过代码的应该都懂,那么一起啃下这个硬骨头吧!一.哈希表在了解HashMap之前,先看看啥是哈希表,首先回顾下数组以及链表数组:采用一段连续的存储单元来存储数据.对于指定下标的查找,时间复杂度为O(1):通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n),当然,对于有序数组,则可采用二分查找,插值查找,斐波那契查找等方式,可将查找复杂度提高为O(logn):对于一般的插入删除操作,涉及到数组元素的移动,其…
本文基于java8. 基本概念: Jvm 内存中 String 的表示是采用 unicode 编码 UTF-8 是 Unicode 的实现方式之一 一.String定义 public final class String implements java.io.Serializable, Comparable<String>, CharSequence String是个final类,不允许继承.并且实现了Serializable, Comparable<String>, CharSe…
说完了list,再说说colletion另外一个重要的子集set,set里不允许有重复数据,但是不是无序的.先看下set的整个架构吧: 一.类定义 public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> 这地方跟之前的地方一样,为啥继承了AbstractCollection<E>还需要实现Set<E>呢?前面ArrayList的文章已…
对于广大java程序员来说,ArrayList的使用是非常广泛的,但是发现很多工作了好几年的程序员不知道底层是啥...这我觉得对于以后的发展是非常不利的,因为java中的每种数据结构的设计都是非常完善的,学习了这种思想,在设计自己的容器是非常有帮助的. 一.ArrayList底层结构 ArrayList的底层其实就是一个数组,数组的劣势想必也不用多说,一旦创建,长度无法更改.而ArrayList则可以不停的add或是remove,也可以称之为动态数组. 二.类定义以及成员变量 1.类定义 //1…
接下来的一段时间重点介绍java.util这个包中的内容,这个包厉害了,包含了collection与map,提供了集合.队列.映射等实现.一张图了解java中的集合类: AbstractList 一.list简介 list是啥?为啥会有list的存在呢?java中的数组相信大家都是非常熟悉的,可以存放多个数据,但是数组有一个缺点,就是数组在创建之后,长度就不可更改(但是针对于数组的元素可以更改),若你需要在后续过程中往数组中添加数据,那麻烦了,不支持. list在java中是collection…
阅读JDK源码也是一件非常重要的事情,尤其是使用频率最高的一些类,通过源码可以清晰的清楚其内部机制. 如何阅读jdk源码(基于java8)? 首先找到本地电脑中的jdk安装路径,例如我的就是E:\jdk, src.zip中就包含了jdk的所有源码,并将相关源码导入到ideal.eclipse等等,如图: 第一步就来介绍所有类的基类Object,先看下此类的架构图:  一.registerNatives private static native void registerNatives(); s…
过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果.主要用在数据的格式化上,例如获取一个数组中的子集,对数组中的元素进行排序等.ng内置了一些过滤器,它们是:currency(货币).date(日期).filter(子串匹配).json(格式化json对象).limitTo(限制个数).lowercase(小写).uppercase(大写).number(数字).orderBy(排序).总共九种.除此之外还可以自定义过滤器,这个就强大了,可以满足任何…
时间 2013-12-15 16:22:00  博客园-原创精华区 原文  http://www.cnblogs.com/lvdabao/p/3475426.html 主题 AngularJS 过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果.主要用在数据的格式化上,例如获取一个数组中的子集,对数组中的元素进行排序等.ng内置了一些过滤器,它们是:currency(货币).date(日期).filter(子串匹配).json(格式化json对象).…
一.类定义 TreeMap的类结构: public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, java.io.Serializable TreeMap 是一个有序的key-value集合,它是通过红黑树实现的. TreeMap 继承于AbstractMap,所以它是一个Map,即一个key-value集合. TreeMap 实现了Navigab…
概述LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题.除此之外,LinkedHashMap 对访问顺序也提供了相关支持. 原理LinkedHashMap在HashMap结构的基础上,增加了一条双向链表,使得上面的结构可以保持键值对的插入顺序. 上图中,淡蓝色的箭头表示前驱引用,红色箭头表示后继引用.每当有新键值对节点插入,新节点最终会接在 tail 引用指向的节点后面.而 tai…
map其实就是键值对,要想学习好map,得先从AbstractMap开始. 一.类定义.构造函数.成员变量 public abstract class AbstractMap<K,V> implements Map<K,V> protected AbstractMap() { } 这是个抽象类,很明显只是为子类们提供一些共用的方法模板. 成员变量: transient Set<K> keySet;//说明abstractMap中的key是不允许重复的 transient…
InputStream InputStream是java中的输入流,下面基于java8来分析下InputStream源码 一.类定义 public abstract class InputStream implements Closeable Closeable接口定义了close()方法,流在使用完之后需要关闭,并且放在finally块中操作比较好. 二.变量 // 该变量用于确定在skip方法中使用的最大缓存数组大小. private static final int MAX_SKIP_BU…
AbstractStringBuilder是一个抽象类,StringBuffer.StringBuilder则继承AbstractStringBuilder,所以先说AbstractStringBuilder. AbstractStringBuilder 一.AbstractStringBuilder //实现了两个接口,其中CharSequence这个字符序列的接口已经很熟悉了: //1.该接口规定了需要实现该字符序列的长度:length(): //可以取得下标为index的的字符:charA…
JDK版本 LinkedList简介 LinkedList 是一个继承于AbstractSequentialList的双向链表.它也可以被当作堆栈.队列或双端队列进行操作. LinkedList 实现 List 接口,能对它进行队列操作. LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用. LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆. LinkedList 实现java.io.Serializable接口,这意味…
1 ArrayList 1.1 父类 java.lang.Object 继承者 java.util.AbstractCollection<E> 继承者 java.util.AbstractList<E> 继承者 java.util.ArrayList<E> 1.2 类定义 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess…
近期在做图像处理的时候.发现某一段代码很的慢.慢得让人无法接受.基本的代码是顺序訪问一个LinkedList的元素,效果是随着index的变大,速度越来越慢,list的元素个数在百万以上.找到原因,分享出来.也希望大家不要跳入同一个陷阱. 还是那一句话.可执行的代码和高质量的代码之间还是有比較远的距离. LinkedList错误使用方法演示样例 代码里面增加了一些打印时间相关的代码,主要是为了直观的显示执行的耗时. 错误代码 public static void main(String[] ar…
一.线性表 1,什么是线性表 线性表就是零个或多个数据元素的有限序列.线性表中的每个元素只能有零个或一个前驱元素,零个或一个后继元素.在较复杂的线性表中,一个数据元素可以由若干个数据项组成.比如牵手排队的小朋友,可以有学号.姓名.性别.出生日期等数据项. 2,线性表的抽象数据类型 线性表的抽象数据类型定义如下. ADT List Data 线性表的数据对象集合为{a1,a2,...,a3},每个元素的类型均为DataType Operation InitList (L) : 初始化操作,建立一个…
Vector .ArrayList 和LinkedList都是List接口下的实现类,但是他们之间的区别和联系是什么呢? 首先: 然后: 如果您仅仅想知道结论,那么可以关闭了. 下面我讨论讨论为什么. 发现arrayList的线程安全是由size引起的,为何这么说呢? 这是ArrayList所拥有的部分属性,通过这两个字段我们可以看出,ArrayList的实现主要就是用了一个Object的数组,用来保存所有的元素,以及一个size变量用来保存当前数组中已经添加了多少元素. 1 public cl…
1. 前言 2018年9月,伴随着java 11的发布,内置的httpclient正式登上了历史的舞台.此前,JDK内置的http工具URLConnection性能羸弱,操作繁琐,饱受诟病,也因此令如Apache 的 Httpclient, Square的 OKHttp 这样的第三方客户端大放异彩.新生的JDK Httpclient,拥抱了响应式流(Reactive Stream)模型,使用了JAVA 9引入的Flow api,并运用completableFuture使调用流程异步化(在IO层面…
链表设计与实现 在谈链表之前,我们先谈谈我们平常编程会遇到的很常见的一个问题.如果在编程的时候,某个变量在后续编程中仍需使用,我们可以用一个局部变量来保存该值,除此之外一个更加常用的方法就是使用容器了. 那什么是容器呢?从字面上来说就是用来装某个东西的,比如我们的杯子,就是容器.在程序设计当中我们最常见的容器就是数组了,他可以存我们想保存的东西.在编程当中我们最常见的容器如下: 在Python当中有列表.字典.元组.集合等等. 在Java当中常见的容器有 ArrayList.LinkedList…
概述 Java语言的一个非常重要的特点就是与平台的无关性.而使用Java虚拟机是实现这一特点的关键.一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码.而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译.Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行.Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行.这就是Java的能…
java中的内部类 静态内部类 成员内部类 方法内部类 匿名内部类 1.静态内部类 class Outer { private static String outer = "outer"; /** * 静态内部类只能访问外部类的静态成员 */ public static class StaticInner { public void show() { System.out.println(outer); } } public void test() { StaticInner si =…
迭代模式的基本定义:对于一组对象集合(数组.堆栈.列表或散列),用户无需关心它的底层实现而能够通过调用统一接口遍历当中的所有元素.由于jdk已经对常见的迭代模式实现了封装,本文直接提供Collection和Iterator两个接口的模拟. 定义Iterator接口 /* * 设计迭代接口 */ public interface Iterator<E> { // 测试是否有下一个元素 boolean hasNext(); // 返回下一个元素 E next(); } Iterator.java…
在 Angular 中,我们不应该试图直接修改 DOM 的内容,当需要更新 DOM 内容的时候,应该修改的其实是我们的数据模型,也就是 $scope 中的数据,Angular 会帮助我们将修改之后的数据展示在页面中. 但是,在有些情况下,比如我们有一个搜索框,希望将搜索的关键字在正文中高亮出来,这时候就会感觉比较吃力了,filter 可以帮助我们处理这种情况. 实际上,很多时候,我们的数据是不能直接输出到 DOM 中的,典型的比如日期,或者货币等等,通常需要将我们内部的数据格式化之后,再输出到页…
下面要开始java中相关集合框架的学习啦. Are you ready?Let's go~~ 今天要讲解的Java中的集合框架. 1) 首先查看jdk中Collection类的源码后会发现如下内容: ? 1 2 3 4 5 6 ... * @see     AbstractCollection  * @since 1.2  */   public interface Collection<E> extends Iterable<E> {     // Query Operation…
教材学习内容总结 1:泛型主要目的是建立具有类型安全的集合框架,如链表,散列映射等数据结构. 泛型类的声明: class People<E> People是泛型类的名称,E是其中泛型,E可以是任何对象或接口,但不能是基本数据类型.   泛型类声明和创建对象,类后多了一对"<>",而且必须用具体的类型替换"<>"中的泛型 Cone<Circle> coneOne; coneOne=new Cone<Circle&g…
一.描述Java集合框架 集合,在Java语言中,将一系类的对象看成一个整体. 首先查看jdk中的Collection类的源码后会发现Collection是一个接口类,其继承了java迭代接口Iterable. API: java集合框架图: 在图当中,虚线框的类型是接口,短横线框的类型是抽象类,实线框的类型是实现类. 集合的包在java.util下 集合框架的顶层接口:java.util.Collection,迭代器接口:Java.util.Iterator; Collection接口有两个主…
1.  filter可以接收参数,参数用 : 进行分割,如下: {{ expression | filter:argument1:argument2:... }} 2.   filter参数是 对象 ,匹配属性中含有value的 $scope.childrenArray = [ {name:'kimi',age:3}, {name:'cindy',age:4}, {name:'anglar',age:4}, {name:'shitou',age:6}, {name:'tiantian',age:…