刚刚公司入职,加入了云计算项目组,还没有确定加入哪一个小组,所以最近比较闲,所以看了下jdk的源代码,想深入了解下工具类的实现,并且尝试着想深入理解下设计思想。
开始随便看了看容器类的结构,觉得好复杂,也无比膜拜Josh Bloch大神,接口间复杂的继承关系,让我这等俗人根本无法理解他的设计意图,多层接口的继承也是为了更易于扩展,当然根据实际的场景来理解多层的接口继承可以稍稍地领会容器的设计意图。比如过,图形接口三角形接口等边三角形、等腰三角形等等,容器的设计也类似于此。容器可以分为两条线,Collection和Map,Collection接口有一个直接的抽象类AbstractCollection来实现它,AbstractCollection提供了Collection的一个基本实现框架。因为Collection可以扩展为Set和List接口,AbstractCollection就抽象出了list和set中共同的一些功能代码,AbstractList和AbstractSet也一样。然后就有了Vector、ArrayList、LinkList等等的一些具体实现类(set部分的还没开始看,所以这部分的就不提及了)。需要强调的是,LinkList类之上还有一个AbstractSequenceList,这个抽象类的设计主要是为了考虑扩展不同的线性List;Stack extends自Vector,因此java中的stack也可以使用vector中的public方法,不仅仅只是pop和push。
上午就看了List部分的源代码,想比较下Vector、ArrayList、LinkList。
<table>
<tr><td></td><td>Vector</td><td>ArrayList</td><td>LinkList</td><td>备注</td></tr>
<tr><td>功能描述</td><td>提供了一个空间可变的集合,一个可以根据需要增加或者减少空间的数组。并且这个增量是可控的。</td><td>和Vector类似,不过增量是固定值。</td><td>提供了一个线性的容器,也可以用来实现stack、queue。</td><td>备注</td></tr>
<tr><td>同步性</td><td>同步的</td><td>非同步的</td><td>非同步的</td><td>(讨论必要性)多线程下,用Vector,一般使用ArrayList</td></tr>
<tr><td>初始化空间</td><td>如果给定了初始化大小,那么按给定初始化空间;如果没有给定,那么默认是10个元素</td><td>与Vector一样</td><td>Size为0,但是里面是有一个Entity元素的</td><td>备注</td></tr>
<tr><td>空间增加方式</td><td>如果给定了空间增长值,那么按给定的值如果没有(默认为0),翻倍*2</td><td>空间增长值不可控,增长空间的一半</td><td>实体节点的形式增加</td><td>备注</td></tr>
<tr><td>序列化</td><td>所有的都能序列化</td><td>部分序列化,缓存数组通过writeObject来实现(考虑到数字中会预留空间)</td><td>部分序列化,头元素header,size不需要序列化(header没有实际内容),size为什么不序列化,不清楚</td><td>备注</td></tr>
<tr><td>底层实现</td><td>通过数组</td><td>数组</td><td>实体类entry:pre,element,next</td><td>备注</td></tr>
<tr><td>效率</td><td>最低</td><td>适合随机查取</td><td>插入</td><td>备注</td></tr>
</table>
相关推荐
10. **类型推断增强**:Java 8增强了类型推断,使得局部变量的声明可以省略类型,如`var list = new ArrayList();`,编译器会根据右侧的初始值推断出类型。 以上这些是《OnJava8-Examples-3.0》源码中涉及的关键...
在Java编程中,集合容器是数据管理的重要组成部分,它们提供了灵活且高效的方式来存储和操作对象。List接口是Java集合框架中的核心接口之一,它继承自Collection接口,并具有特定的特性:元素可以重复,保持元素的...
Java容器学习笔记: 容器概览, 容器中的设计模式, 容器源码分析 - List, 容器源码分析 - Map, 容器源码分析 - 并发容 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,...
List接口是Java中最常用的容器之一,它代表了一个有序的元素列表。ArrayList、LinkedList和Vector是常见的List实现。ArrayList基于动态数组,适合随机访问,但插入和删除元素时效率较低。LinkedList则通过双向链表...
通过这些练习,你将巩固对Java容器的理解,提高代码编写效率,并为解决实际问题打下坚实基础。记得在实践中不断挑战自己,尝试不同的场景和数据结构,以便更好地掌握Java容器的精髓。祝你在学习过程中取得优异的成绩...
Java容器是Java集合框架的一部分,主要包括List、Set、Map等接口以及它们的实现类。List集合保证元素有序,Set集合保证元素唯一,Map集合存储键值对。这些容器提供了大量方法来操作集合,如添加、删除、查找元素等。...
Java容器详细解析 Java容器是一种基本的数据结构,用于存储和管理对象。Java容器主要分为两大类:Collection和Map。 Collection Collection是一个独立元素的序列,这些元素都服从一条或多条规则。Collection接口...
此java类实现了对数据表的分类递归树的实现,为本人倾力之作,后期,会发布js版,敬请期待!
在Java编程中,容器是用于...总之,理解并掌握这些Java容器的特性和效率差异,能够帮助我们在实际开发中做出更合适的选择,提高程序的性能和可维护性。在具体应用时,还需要结合业务需求和性能测试,才能做出最佳决策。
### Java应用:两种Java容器类List和Set分析 #### 一、概述 在Java编程语言中,集合框架(Collections Framework)是处理数据的核心组件之一,它提供了存储和操作对象的各种方式。本文将深入探讨Java中的两种重要...
### Java容器学习心得详解 在Java编程中,容器(Containers)是存储和操作对象集合的重要工具,主要包括集合(Collections)和映射(Maps)。本文将深入解析Java容器的关键概念、特性以及不同容器类型的应用场景。 ...
- **访问控制**:提供细粒度的权限管理,如ACL(Access Control List)。 - **签名和凭证**:生成临时或长期的签名URL,用于匿名访问OOS资源。 - **请求和响应处理**:自动处理HTTP请求和响应,如重试、超时、...
7. **集合框架**:Java集合框架包括List、Set、Map等接口以及ArrayList、HashSet、HashMap等实现类,提供了存储和操作对象的强大工具。 8. **多线程**:Java内置对多线程的支持,通过Thread类和Runnable接口,可以...
`Optional<T>` 是一个容器对象,可能包含或不包含非 null 值。这避免了空指针异常,提供了更安全的编程模式。例如,`Optional<String> optionalName = Optional.ofNullable(findName()); optionalName.ifPresent...
在Java中,集合是用于存储多个对象的容器,它提供了多种操作数据的方法。本文将深入探讨Java集合框架中的Collection接口及其子接口List。 Collection是所有单值集合的顶级接口,它定义了集合的基本操作。Collection...
JAVA容器的概述,List,Map,Set
- **变量**:存储数据的容器,声明时需指定数据类型。 - **常量**:用final关键字定义,一旦赋值不可更改。 6. **运算符与表达式** - **算术运算符**:+、-、*、/、%等。 - **关系运算符**:<、>、==、!=等,...
使用泛型可以实现类型安全的数据结构,如List,其中T是类型参数,表示可以存储任何类型的对象,但是一旦指定了具体的类型,如List,就只能存储String类型的对象。 ### 泛型示例解析 #### 示例一:泛型类 ```java ...
Java容器是Java编程中至关重要的一个部分,它们用于存储、管理和操作对象集合。在这个主题下,我们将深入探讨Java中的核心容器类,包括数组、List、Set和Map,以及它们各自的特点和使用场景。 1. **数组**:数组是...
- **变量**:在Java中,变量是存储数据的容器,分为基本类型(如int, double, boolean等)和引用类型(如类、接口、数组)。 - **数据类型**:Java有两大类数据类型,即原始类型(primitives)和引用类型...