栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java集合(二)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java集合(二)

目录

1.List接口概述

2.ArrayList的底层源码分析

3.LinkedList的源码分析

4.Vector的源码分析

5.List接口中的常用方法


1.List接口概述

特点:

  1. 存储的元素都是有序的可重复的。
  2. 因为其有序和可重复性,我们通常用List接口的实现类来替换数组。

具体实现类的特点

ArrayList:①作为List接口的主要实现类。
           ②线程不安全的,效率较高。
           ③底层使用Object数组来进行存储


LinkedList:①底层使用双向链表来进行存储。
            ②对于频繁的插入和删除操作效率比较高。


Vector:①作为List接口的古老实现类,在Java1就已经存在了。
        ②线程安全的,效率较低。
        ③底层使用Object数组来进行存储。

2.ArrayList的底层源码分析

jdk7中的源码分析

①当使用空参构造器创建对象时,底层创建了一个长度为10的Object数组。

②添加数据时,先判断当前Object数组长度是否足够,如果长度足够则直接添加;如果长度不够则先将底层数组长度扩容为原来容量的1.5倍,同时将原有数组赋值给新数组。

建议:因为当底层数组不够长时需要扩容,所以如果知道大概要存储多少数据,则建议使用带参构造器来指定底层数组的长度。

jdk8中的源码分析

①使用空参构造器创建对象时,底层初始化为{}。

②在第一次调用add()方法时底层才创建长度为10的Object数组。

③后续添加数据同jdk7同样。

jdk7中的ArrayList类似于单例模式中的饿汉式,jdk8中的类似于懒汉式,延迟了数组对象的创建,节省了内存。

3.LinkedList的源码分析

在LinkedList中定义了内部类Node,每个Node对象对应双链表中的一个节点。 

4.Vector的源码分析

除了在扩容时将容量变为原来容量的两倍之外其他和jdk7中ArrayList一样。 

5.List接口中的常用方法
  1. add(int index,Object obj):向index位置插入obj对象。
  2. addAll(int index,Collection col):将col中的数据插入到指定位置 。
  3. get(int index):获取指定位置。
  4. indexOf(Object obj):返回当前对象在当前list对象中首次出现的索引。
  5. lastIndexOf(Object obj):返回最后一次出现的索引。
  6. Object remove(int index):将指定位置的元素删除,并返回。
  7. Object set(int index,Object obj):将指定位置的元素设置为obj,并返回。
  8. subList(int index,int endIndex):获取一个子List。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/995240.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号