- 浏览: 37266 次
- 性别:
- 来自: 南京
最新评论
文章列表
栈的Java实现--链栈
链栈,顾名思义,就是以链表的形式实现的栈的相关操作,其实是功能弱化了的链表,如果已经阅读过链表的实现代码,那么链栈的实现显得更为容易。
链栈的基本结构:
链栈的入栈操作:
让top引用指向新的节点,新节点的next指向原来的top
记录栈内元素个数的size+1
链栈的出栈操作:
top引用指向原栈顶元素的下一个元素(top.next),并释放原栈顶元素的引用
记录栈内元素个数的size-1
链栈的Java实现代码:
package com.liuhao.DataStructures;
public clas ...
栈的Java实现--顺序栈
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后 ...
线性表的实现分析
顺序存储和链式存储的对比:
顺序表
链表
空间性能
顺序表的存储空间是静态分布的,需要一个固定长度的数组,因此总有部分数组元素被浪费。
链表的存储空间是动态分布的,因此不会产生空间的浪费。但是需要额外的空间来为每个节点保存引用。
时间性能
顺序表中元素的逻辑顺序和物理存储顺序是保持一致的,因此支持随机读取,在查找、读取方面性能较好。
链表采用链式结构存储数据,因此在插入、删除元素时性能较好。
如下图:
线性表是增强版数组:
从某种程度上来讲,线性表是数组的加强:
线性表的长度可以动态改变,但Java数组的 ...
线性表的Java实现--链式存储(双向链表)
有了单向链表的基础,双向链表的实现就容易多了。
双向链表的一般情况:
增加节点:
删除节点:
双向链表的Java实现:
package com.liuhao.algorithm;
public class DuLinkList<T& ...
线性表的Java实现--链式存储(单向链表)
单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。
链式存储结构的线性表将采用一组任意的存储单元存放线性表 ...
线性表的Java实现--顺序存储
线性表(Linear List)是由n(n≥0)个数据元素(结点)a[0],a[1],a[2]…,a[n-1]组成的有限序列。
其中:
数据元素的个数n定义为表的长度 = "list".length() ("list".length() = 0(表里没 ...
Java还是程序员的金饭碗?
可能会存在一种更快,更简单的编程语言,但就目前来说,根据Stack Overflow的最新统计,“传统”的编程语言依然在赚着大把的钱。在2013年,招聘程序员时,搜索最多的技能关键字是Java, ...
JavaEE概念介绍
这篇文章主要介绍在J2EE范例中使用的缩写词和概念。J2EE(Java 2 Platform, Entreprise Edition)代表Java企业版平台。它使得模块化的Java程序可以在服务器上部署。Java SE是一组Java核心库,Java应用程序在其上得以执行,而J ...
深入理解JVM内幕:从基本结构到Java 7新特性
每个Java开发者都知道Java字节码是执行在JRE((Java Runtime Environment Java运行时环境)上的。JRE中最重要的部分是Java虚拟机(JVM),JVM 负责分析和执行Java字节码。Java开 ...
还在用Android原生模拟器?向你推荐一款全方位把Android原生模拟器秒成渣渣的神器:Genymotion!
需要理由?
性能卓越作为历史上最快的Android模拟器(没有之一),秒级开机关机速度足够让你膜拜了(粗略估计5-20s不等),A ...
JVM性能优化 Part V:Java的伸缩性
很多程序员在解决JVM性能问题的时候,花开了很多时间去调优应用程序级别的性能瓶颈,当你读完这本系列文章之后你会发现我可能更加系统地看待这类的问题。我说过JVM的自身技术限制了Java企业级应用的伸缩性。首先我们先列举一些主导因素。
主流的硬件服务器提供了大量的内存
分布式系统有大量内存的需求,而且该需求在持续增长
一个普通Java应用程序所持有的对空间大概在1GB~4GB,这远远低于一个硬件服务器的内存管理能力以及一个分布式应用程序的内存需求量。这被称之为Java内存墙,如下 ...
JVM性能优化 Part III:垃圾回收
Java平台的垃圾回收机制大大提高的开发人员的生产力,但实现糟糕的垃圾回收器却会大大消耗应用程序的资源。本文作为JVM性能优化系列的第3 篇,Eva Andeasson将为Java初学者介绍Java平台的内存模型和GC机制。她将解释为什么碎片化(不是GC)是Java应用程序出现性能问题的主要原 因,以及为什么当前主要通过分代垃圾回收和压缩,而不是其他最具创意的方法,来解决Java应用程序中碎片化的问题。
垃圾回收(GC)是旨在释放不可达Java对象所占用的内存的过程,是Java virtual machin ...
JVM性能优化 Part II:编译器
作为JVM性能优化系列文章的第2篇,本文将着重介绍Java编译器,此外还将对JIT编译器常用的一些优化措施进行讨论(参见“JVM性能优化,Part 1″中对JVM的介绍)。Eva Andreasson将对不同种类的编译器做介绍,并比较客户端、服务器端和层次编译产生的编译结果在性能上的区别,此外将对通用的JVM优化做介绍,包括死代码剔除、内联以及循环优化。
Java编译器存在是Java编程语言能独立于平台的根本原因。软件开发者可以尽全力编写程序,然后由Java编译器将源代码编译为针对于特定平台 的高效、可运行的代 ...
JVM性能优化 Part I:JVM简介
众所周知,Java应用程序是运行在JVM上的,但是你对JVM有所了解么?作为这个系列文章的第一篇,本文将对经典Java虚拟机的运行机制做简单介绍,内容包括“一次编写,到处运行”的利 ...
JVM性能优化 Part IV:垃圾回收
到目前为止,本系列的文章将stop-the-world式的垃圾回收视为影响Java应用程序伸缩性的一大障碍,而伸缩性又是现代企业级Java 应用程序开发的基础要求,因此这一问题亟待改善。幸运的是,针对此问题,JVM中已经出现了一些新特性,所使用的方式或是对stop-the-world 式的垃圾回收做微调,或是消除冗长的暂停(这样更好些)。在一些多核系统中,内存不再是稀缺资源,因此,JVM的一些新特性就充分利用多核系统的潜在优势 来增强Java应用程序的伸缩性。
在本文中,我将着重介绍C4算法,该算法是Azul ...