`
s929498110
  • 浏览: 106935 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA容器浅入深出之ArrayList

阅读更多

最近鼓捣自己的那个小项目(几近难产)时候, 就琢磨了两个问题

一、 为什么要在项目中使用相互之间很相似的DAO层和Service层

二、 我经常使用的JAVA容器到底是一个什么样的类?

关于第一个问题,我经过一段时间的学习和查找资料,已经得到了,算是自己的见解吧。。。 虽然我发帖将这个见解公布后被围攻吧。。。有想了解这个的,可以看我以前的博文。

 

现在吧。 开始琢磨第二个问题了

容器类集我感觉东西还是很多的, 也不能慌,一口吃不了一个大胖子么。

到目前为止,我主要看了Collection接口,List接口,Iterator接口, AbstractCollection抽象类, AbstractList抽象类, ArrayList实现类, LinkedList粗略的看了一点。 打算明天继续琢磨

 

前面的接口和抽象类都是一些规范和公有操作, 而在ArrayList才看到了真正的一个容器底层实现,说是底层实现吧。 很尴尬。。。 就是一个封装了数组的对象而已, 感觉很容易理解,将自己看到的一些不知道对错的见解都记录下来吧:

    1、 ArrayList容器是通过封装Object[]实现动态存储的

    2、 ArrayList的修改容量操作【比如add操作】应该比较消耗资源,毕竟需要修改内部数组Object[]呢, 但是也不是每一次add操作都需要修改, 每一次add操作都会通过ensureCapacity方法确保当前ArrayList内Object[]的容量够用,而这个方法实现也比较简单,它通过比较ArrayList记录的元素数量和Object[]的length的大小, 如果前者不小于后者的话,则生成一个新的数组,这个数组的大小好像是原数组的1.5倍。而LinkedList是使用链表的方式添加一个新元素,效率上比ArrayList大多了, 删除元素,ArrayList也会新生成一个数组。 如果内部容量过多的话, 是不是得多慢啊。。。

    3、 ArrayList里面的与指定index位置操作有关的方法,我感觉设计的并不完美,也不统一, 有几个方法使用了调用RangeCheck方法判断给定的index是否合理,而这个方法是通过“if (index >= size)” 判断的, 然后还有几个方法没有使用这个方法,直接使用“if (index > size || index < 0)”判断。 我感觉可以将他们都统一一下, 但是这个小问题无关大雅了, 可能JDK源码编写者当时分神了吧。。。或者是我没看明白源码吧。。。

    4、 ArrayList通过内部的Object[]存储全部元素, 一般情况下ArrayList的size()是小于Object[].length的, 因为ArrayList内部为了避免过多频繁的更新这个Object[], 将这个数组的容量设定的比size()大“0倍到0.5倍”, 当然可以使用一种方法让size()恰好等于Object[].length,这个方法就是trimToSize(), 如果这个容器的元素比较多,并且这个容器很长时间内元素不会继续添加的话, 可以使用这个方法, 释放掉Object[]多占的内存

 

ArrayList的具体迭代器实现类继承自父类AbstractList, 这个迭代器是一个内部类(内部类才能直接操作ArrayList内部元素吗!), 迭代操作其实我感觉和直接通过ArrayList的for遍历差不多, 但是这个迭代器是安全的操作,因为这个迭代器通过ArrayList的modCount变量记录控制多次迭代之间,这个ArrayList的结构不会发生变化或混乱, 如果ArrayList的结构发生变化, 这个modCount属性将自加一, 而加一之后, 在加一之前获取到的这个ArrayList实力的迭代器都无效了(应该是这样吧, 有点小迷了。。。有高手发现错误的话,指点一下啊)

 

说真的, 刚才还感觉有点迷呢, 自己总结了一个博文之后,感觉思路清晰多了

0
0
分享到:
评论

相关推荐

    java对象容器(涉及HashMap,ArrayList,Set等)

    在Java中,最常见的对象容器包括ArrayList、List、Set和HashMap等。这些容器各自具有不同的特性和用途,理解并熟练掌握它们对于提升Java编程能力至关重要。 ArrayList是Java集合框架中的一个动态数组,它允许我们在...

    Java容器总结

    Java中最常见的容器包括Java集合框架(如ArrayList、HashMap等)、JavaBeans、Enterprise JavaBeans(EJB)、Servlet容器(如Tomcat、Jetty)以及Spring框架中的IoC(控制反转)和DI(依赖注入)容器。 1. **Java...

    Java容器类List、ArrayList、Vector及map、HashTable应用

    Java容器类List、ArrayList、Vector及map、HashTable应用 List、ArrayList、Vector及map、HashTable是Java中常用的容器类,它们都继承自Collection接口,并提供了不同的实现方式和特点。在实际开发中,选择合适的...

    java容器详细解析

    Java容器详细解析 Java容器是一种基本的数据结构,用于存储和管理对象。Java容器主要分为两大类:Collection和Map。 Collection Collection是一个独立元素的序列,这些元素都服从一条或多条规则。Collection接口...

    Java容器ArrayList原理解析

    ArrayList是Java中最常用的容器之一,它实现了List接口,提供了许多有用的方法来操作集合。下面我们将深入探讨ArrayList的原理和机制。 ArrayList的特点 ArrayList是一种基于数组的实现,它的主要特点有: * ...

    java练习题--容器使用练习

    本练习题旨在帮助你深入理解和熟练掌握Java中的容器使用,特别是其核心类库`java.util`中的ArrayList、LinkedList、HashSet、HashMap等。通过解决这些练习题,你将能够更好地了解容器的基本操作,如添加、删除、查找...

    java容器学习心得

    ### Java容器学习心得详解 在Java编程中,容器(Containers)是存储和操作对象集合的重要工具,主要包括集合(Collections)和映射(Maps)。本文将深入解析Java容器的关键概念、特性以及不同容器类型的应用场景。 ...

    jni操作arraylist对象

    为此,我们需要获取ArrayList对应的Java类型ID(`jclass`)和ArrayList的`add`方法ID(`jmethodID`)。 ```c++ jclass arrayListClass = env-&gt;FindClass("java/util/ArrayList"); if (arrayListClass == NULL) { /...

    JAVA容器对象整理

    在Java编程中,容器对象是用于存储其他对象的类,它们是Java集合框架的重要组成部分。这篇博客"JAVA容器对象整理"可能涵盖了关于Java中的不同容器类、接口以及它们的使用方式。在这里,我们将深入探讨一些核心的Java...

    Java学生成绩管理系统实例(ArrayList)

    import java.util.ArrayList; import java.util.Iterator; import java.util.Scanner; /** * @Author Ziph * @date 2020/2/19 * @Email mylifes1110@163.com */ public class TestDemo implemen

    java基础--list(ArrayList、LinkedList、匿名类).docx

    【Java基础——List接口详解(ArrayList、LinkedList、匿名类)】 在Java编程中,List接口是集合框架的重要组成部分,提供了有序存储元素的功能。ArrayList和LinkedList是List接口的两种主要实现,它们各有优缺点,...

    Java容器集合(equals 和 hashCode+基础数据结构+ArrayList+Vector和LinkedList)

    Java容器集合(equals和hashCode+基础数据结构+ArrayList+Vector和LinkedList) Java容器集合是Java中的一种基础数据结构,用于存储和管理数据。其中,equals和hashCode方法是Java容器集合中两个非常重要的方法,...

    自定义实现的ArrayList

    自定义实现的ArrayList数据结构,有大量注释以及编写思路,帮助新手用Java语言来实现数据结构

    Java 容器.pdf_电子版pdf版

    Java 容器详解 Java 容器是 Java 语言中的一种集合类库,主要包括 Collection 和 Map 两种类型。Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表。 Collection Collection 是一种集合接口...

    Java员工管理系统,ArrayList存储

    本项目聚焦于使用Java编程语言实现一个基于ArrayList的员工管理系统。ArrayList是Java集合框架中的一种动态数组,它提供了方便的数据存储和操作功能,特别适合用于小型数据集的存储。 在Java中,ArrayList类位于`...

    java ArrayList集合的应用

    用java语言编写一个程序实现学员成绩管理,每个学员包括3门课的成绩,从键盘输入学员信息, 包括学号、姓名、三门课成绩,计算出学员的平均成绩,按照学员平均成绩由大到小排序 插入功能:在排序后的学员成绩表中...

    JAVA容器知识积累

    Java容器是Java编程中至关重要的一个部分,它们用于存储、管理和操作对象集合。在这个主题下,我们将深入探讨Java中的核心容器类,包括数组、List、Set和Map,以及它们各自的特点和使用场景。 1. **数组**:数组是...

    Java源码篇之容器类——ArrayList

    在Java编程语言中,ArrayList是集合框架中一个重要的容器类,属于List接口的实现,它提供了动态数组的功能。本文将深入解析ArrayList的源码,帮助开发者理解其内部工作原理。 1、前言 在日常开发中,ArrayList是...

    JAVA容器效率深度分析List

    在Java编程中,容器是用于存储对象的集合,它们提供了数据结构和算法,使得我们可以方便地组织和管理数据。本文将深入分析Java中的List接口及其常见的实现类,如ArrayList、LinkedList和Vector,探讨它们的效率差异...

Global site tag (gtag.js) - Google Analytics