ArrayList源码分析 ArrayList简介 我们知道,ArrayList是基于数组实现的List类,完全支持List接口的全部功能,底层实质上就是一个Object[]数组。从源码注释的第一行“Resizable-array implementation of the List interface”中,可以看出ArrayList是List接口的可变长数组实现,即这是一个动态数组,与普通的数组相比,它可以实现容量的动态增长。至于其他的特征,我们可以从类的定义中得到: public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable 这是ArrayList的类结构层次图: 由以上信息,我们可以知道: ArrayList:表明ArrayList支持泛型 exten 继续阅读 >>


贺含悦 18/06/29 18:06:53
为期两周的课设终于结束了,我们组选择的题目当然是我邮软件祖传的课设项目TTMS(Theater Ticket Management System 剧院票务管理系统),说来也很惭愧,整个项目自打三月份人机界面课程大作业时候就已经开始,直到现在六月份,开发周期长达三个月,然而功能上还有很多欠缺。 项目首页: https://github.com/fujie-xiyou/TTMS_2.0 那就先从项目的界面说起 界面部分采用JAVAFX开发,JAVAFX是JAVA8主推的图形库,相比Swing有很多方便的特性,比如对css的支持,就让我们的项目在美化过程中变得非常轻松。 而JAVAfx的缺点在于官方文档不够全面,网上的资料也相对比较少,做很多东西都要查资料查很久或者自己慢慢摸索。 说几个界面开发过程中的坑点 Javafx时间选择器 在开发 演出计划管理 用例时,需要给用户提供一个选择时间日期的工具,而javafx也自带了日期选择器,令人不解的是却没有提供时间选择器!!! 如果直接让用 继续阅读 >>


刘付杰 18/06/20 21:19:58
Java泛型是什么? 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 即其本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。 泛型带来了哪些好处? 在没有泛型之前,当我们将一个对象放进集合中,集合会立刻忘记该对象的类型,它会把所有对象都当作Object类型来处理。所以从集合中取出对象的时候,我们通常需要进行强制类型转换,这种做法不仅造成代码的臃肿,而且容易引起异常。 在增加了泛型支持后: 集合可以记住元素的类型,并且在编译的时候检查元素类型,避免引起ClassCastException异常。将运行时的异常提前至了编译时。 所有的强制转换都是自动和隐式的,提高代码的重用率。 使代码更加简洁,程序更加健壮。 定义泛型 Java在接口、类或类的方法的声明中,声明一个泛型。多个参数时要用逗 继续阅读 >>


贺含悦 18/06/12 19:59:00
ECharts 官网的内容已经非常详细了,我就不再赘述。下面写写我使用时遇到的问题: 饼状图无法添加标题: 实际上也是设置title字段,只是这个字段是在option下而非series下(刚开始大意了) 饼状图添加内容百分数显示: tooltip : { trigger: 'item', formatter: "{a} <br/>{b} : {c} ({d}%)" }, 作者:baidu_35085676 发表于 2018/06/11 10:42:59 原文链接 https://blog.csdn.net/baidu_35085676/article/details/80648643 阅读:80 继续阅读 >>


李余通 18/06/11 10:42:59
Lambda表达式是什么? Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。 Lambda表达式的本质是“匿名方法”,即当编译我们的程序代码时,“编译器”会自动将“Lambda表达式”转换为“匿名方法”。 Lambda表达式是Java8的重要更新,它支持将代码块作为方法参数,允许使用更简洁的代码来创建只有一个抽象方法的接口,这种接口称为函数式接口。 一起来使用Lambda表达式吧 首先,我们先看一个关于匿名内部类的程序~ interface Command { void process(int[] target); } class ProcessArray { public void process(int[] target, Command cmd) { 继续阅读 >>


贺含悦 18/06/09 18:42:08
什么是内部类? 通俗的讲,就是把一个类放在另一个类的内部定义,这个定义在其他类内部的类就叫做内部类,这个包含内部类的类就叫做外部类。即内部类是依附于外部类而存在的。 使用内部类有什么好处呢? 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,所以就不允许同一个包中的其他类访问该类。 内部类成员可以直接访问外部类的私有数据,其实就是把内部类也当成一个外部类的成员,同一个类的成员之间自然可以互相访问。 使用匿名内部类创建那些仅需要一次使用的类会更方便,无需再去专门定义那些类。 内部类和外部类有什么区别? 内部类要定义在其他类里面。 内部类比外部类可以多使用三个修饰符:private、protected、static,外部类只能是public或默认包访问权限。 内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号。 非静态内部类不能拥有静态成员。 内部类主要分为哪几类? 非静态内部类(也有称作成员内部类) 静态内部 继续阅读 >>


贺含悦 18/06/07 18:26:18
装配是什么? 创建应用对象之间协作关系的行为通常称为装配(wiring),这也是DI的本质。 我们必须要告诉Spring要创建哪些bean并且如何将其装配在一起。 Spring提供了三种主要的装配机制: 在XML中进行显式配置 在Java中进行显式配置 隐式的bean发现机制和自动装配 Spring的配置风格是可以互相搭配的,但应尽可能地使用自动配置的机制,因其使用起来要方便的多,显式配置越少越好。显式配置越少,代码就越容易维护。而基于Java和XML相比,JavaConfig的安全性比XML要好,并且功能更强大。 所以我们先来看Spring的自动化配置。 自动化装配Bean——便利 Spring从两个角度来实现自动化装配: 组件扫描(component scanning):Spring会自动发现应用上下文中所创建的Bean。 自动装配 (autowiring):Spring自动满足Bean之间的依赖。 组件扫描和自动装配组合在一起就能使我们的显式配置降低到最少。 为了 继续阅读 >>


贺含悦 18/05/07 22:06:34
注:本文中的部分内容摘抄自他人博客,如有侵权,请联系我,侵删~ 本篇博客主要讲述 synchronized 关键字的实现原理以及 JDK 1.6 后对 synchronized 的种种优化。synchronized 的使用不再赘述。 博主目前依旧存在的疑惑 请在阅读完此篇博客之后,帮助博主回答这三个问题: 多线程争夺 Monitor 的具体过程是怎样的?是根据 ObjectMonitor 中的 _count 值判断当前 Monitor 是否被锁定吗? JVM 如果检测到在单线程环境下执行同步代码(StringBuffer),是会进行锁消除呢,还是会使用偏向锁? 对于偏向锁的撤销过程及膨胀过程,博主只是在一些博客的基础上给出了自己的理解!不权威,建议阅读源码,博主对这部分知识的讲解持怀疑态度,如果在阅读的过程中发现博主对偏向锁的撤销与膨胀理解有误,请指出,感激不尽~(网上基本上没有从源码角度分析的,对于偏向锁撤销与升级的详细过程也是众说纷纭) 引言 我们先来看一份代码: 继续阅读 >>


董恒毅 18/04/27 11:38:27
注:感谢 美团点评技术团队 的分享~~,博客部分内容摘抄自其中。侵删! 今天我们来探究一下 HashMap 的内部实现机制。 明确 JDK 1.8 中的 HashMap 使用数组 + 链表 + 红黑树的结构进行实现。 HashMap 的底层思想主要是哈希表,我们来看看 Java 的设计者们是怎么使用数组 + 链表 + 红黑树设计出 HashMap 的。 HashMap的基本属性 既然是用哈希表进行实现,那么基本的数据结构就是数组了,HashMap 部分源码如下: public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable { transient Node<K,V>[] table; // HashMap 底层数据结构(Node 数组) transient int size; 继续阅读 >>


董恒毅 18/04/20 21:55:40
Object类 Object类是所有类、数组、枚举类的父类,即Java允许把任何类型的对象赋给Object类型的变量。当定义一个类没有使用extends关键字为它显示指定父类,则该类默认继承Object父类。 //常用方法: boolean equals(Object obj) protected void finalize() Class<?>getClass() int hashCode() String toString() Java还提供了一个protected修饰的clone()方法,该方法用于帮助其他对象来实现“自我克隆”,即得到一个当前对象的副本,而且二者完全隔离。 自定义类实现“克隆”步骤如下: 自定义类实现Cloneable接口。 自定义类实现自己的clone()方法。 实现clone()方法时通过super.clone()。 class Address { String detail; public Address(String d 继续阅读 >>


贺含悦 18/04/13 00:39:52