当前位置: 首页 > news >正文

上海网站建设企业建站网络推广站

上海网站建设企业建站,网络推广站,中国企业报集团简介,购物网站排名前十List与ArrayList的关系 List List是一个接口,不能直接实例化。如果要使用必须去实例化List的实现类——ArrayList和LinkedList站在数据结构的角度看,List就是一个线性表。常见的线性表:顺序表、链表、栈、队列等 线性表 线性表是n个具有相…

List与ArrayList的关系

List

  • List是一个接口,不能直接实例化。如果要使用必须去实例化List的实现类——ArrayList和LinkedList
  • 站在数据结构的角度看,List就是一个线性表。常见的线性表:顺序表、链表、栈、队列等

线性表

  • 线性表是n个具有相同特性的数据元素的有限序列。
  • 它在逻辑上是线性结构,但是在物理结构上不一定是连续的
  • 线性表在物理存储时,通常以数组和链式结构的形式存储

List与ArrayList的关系

  • 从“List是一个接口”的方面来看,ArrayList是List接口的一个实现类
  • 从“List是一个线性表”的方面来看,ArrayList是一个以数组形式存储的线性表(这种线性表也被称为顺序表)

ArrayList

关于ArrayList的说明

  • ArrayList是以泛型方式实现的,使用时必须要先实例化
  • ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问
  • ArrayList实现了Cloneable接口,表明ArrayList是可以clone的
  • ArrayList实现了Serializable接口,表明ArrayList是支持序列化的
  • ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表
  • 和Vector不同,ArrayList不是线程安全的,在单线程下可以使用,在多线程中可以选择Vector或者CopyOnWriteArrayList

认识ArrayList

构造方法

认识一个类一般都要从类的构造方法开始 

构造方法有三种:1、无参构造;2、利用其他collection构建ArrayList;3、指定顺序表初始容量

以无参构造为例:

ArrayList中的方法(对部分方法进行解析)

 Add方法

“先检测是否有可供插入的空间,然后将目前数组末尾的下一位下标的值设定为参数”

那么它是怎样检验是否可以插入的?

Add()中的ensureCapacityInternal

 ensureCapacityInternal()方法是为了确保 拿到的的数组容量满足使用。

我们通过源码了解到,ensureCapacityInternal中又有两个方法:ensureExplicitCapacity、calculateCapacity

先来看calculateCapacity

calculateCapacity()方法

如果ArrayList的底层数组elementData为DEFAULTCAPACITY_EMPTY_ELEMENTDATA(通过查看源码中的成员属性可以得知这是一个空数组)时,返回10(通过查看源码得知:当向起始的空数组中插入元素时,会给这个空数组赋予10个容量)和minCapacity(参数)的最大值,否则返回minCapacity的值(minCapacity被视为数组容量) 

这个方法为了得知 需要的数组容量。

ensureExplicitCapacity()方法

如果当前需要的数组容量 比目前的数组长度大的话,需要进行扩容

这个方法是为了获得 符合要求的数组容量

grow()扩容方法

 定义原来的数组长度为旧容量,将旧容量扩容1.5倍后于所需容量minCapacity比较,如果新容量小于mC,就将mC设置为新容量;如果新容量大于数组最大长度(MAX_ARRAY_SIZE)(这是一个常量),就进行一次判断(使用hugeCapacity方法判断):如果需求容量小于0,抛出异常;如果需求容量比数组最大长度还要大,就将新容量定义为Integer的最大值,否则就将新容量定义为数组最大长度

注:MAX_ARRAY_SIZE与MAX_VALUE

为什么会有MAX_ARRAY_SIZE的定义呢?

 因为数组有点特殊性,数组对象要额外存储 数组元素长度 在头部,少了这8个长度可能与此有关。 尝试分配大于 MAX_ARRAY_SIZE 长度的数组会导致 OOM (换句话说,超过了该虚拟机的数组长度限制)。

如果MAX_ARRAY_SIZE的长度还不够用,就直接将Integer的最大值给新数组(数组长度是个Integer类型-是一个整数)。至于会不会因为OOM报错那就不管了

remove()方法

当我们使用remove方法时,会将我们传入的参数识别为一个下标,而不是我们所想的“一个对象”(例如“ArrayList.remove(0)” 删除0下标/删除数字0——“arraylist.remove(new Interger(0))”)——这是因为有两个remove方法,可以传一个下标,也可以传一个对象

subList()方法

 从数组fromIndex下标开始,取出toIndex个元素放入subList数组中

如果改变sub(从list中)截取出来的数组中的数据,将会一起改变list中的数据

“sub”和“list”共用一个elementData数组 

遍历ArrayList的三种方法

http://www.tj-hxxt.cn/news/95287.html

相关文章:

  • 做网站还 淘宝广西seo公司
  • 如何利用github做网站淘宝搜索关键词技巧
  • 淮北电子商务网站建设搜索引擎优化作业
  • 杭州住房和城乡建设局网站首页看颜色应该搜索哪些词汇
  • SEO优化网站建设价格近一周的新闻大事热点
  • 石材网站建设旅游app推广营销策略
  • jsp动态网站开发教科书推广关键词排名查询
  • 有什么做分销的几个网站如何搭建一个网站平台
  • 做php网站用什么软件好外贸网站有哪些
  • html5video网站网络广告营销案例
  • 徐州做网站多少钱seo关键词分类
  • 广州网站优化电话百度免费优化
  • 做外贸网站哪家公司好网站seo关键词优化排名
  • 网站建设公司做销售好不好?品牌推广的概念
  • 如何做360购物网站seo 关键词优化
  • wordpress 犯贱志主题广州seo工作
  • 网站上的图片做多大友情链接qq群
  • 怎样做网站宣传自己的宾馆长沙专业seo优化公司
  • 忻州网站建设网站推广淘宝宝贝关键词排名查询工具
  • 网站建设新闻动态求几个好看的关键词
  • 国内外网站建设2017站长之家 站长工具
  • 网站软件应用大全网站不收录怎么解决
  • 网站制作的一般步骤b站网页入口
  • 自家电脑做网站服务器w7花生壳山西seo关键词优化软件搜索
  • 怎么在网站后台做标题的超链接热点新闻事件今日最新
  • 网站链接怎么做标记投资网站建设方案
  • 宇锋网站建设国内重大新闻
  • 佛山网站排名优化南平seo
  • h5类型的网站是怎么做的腾讯会议价格
  • wordpress网站建设教程广州seo推广培训