ArrayList Vector

ArrayList

ArrayList用法总结

理解

  • 实现 Cloneable 接口,即覆盖了函数clone(),能被克隆

  • 实现 java.io.Serializable 接口,即ArrayList支持序列化,能通过序列化去传输

  • 它的大小是按照其中存储的数据来 动态扩充与收缩

  • 当元素的数量超过数组长度时

    • 新建更大容量数组,将原数组内容拷贝一份,然后新增元素的方式存储元素

方法

  • 见 collection

怎么实现不用声明大小

  • new ArrayList() 的时候,默认会有一个 空的Object数组,大小为0
  • 当第一次add添加数据的时候,会给这个数组 初始化一个大小默认值为10

ArrayList & Vector

Vector是ArrayList的多线程的一个替代品,都是 Ilist 的实现类,基于数组的实现

  • 线程安全性
    • A :非线程安全
    • V :线程安全,效率低,绝大多数方法使用同步关键字 synchronized 修饰,实现了线程的同步,这样在多线程的情况下不会出现并发错误
  • 默认容量和扩容机制不同
    • A
      • ArrayList 的默认构造函数 ArrayList() 会构造一个长度为10的数组
      • ArrayList(int initialCapacity)构造函数会构造一个指定长度的数组
      • 添加元素时,如果超出了长度,会新建更大容量数组,将原数组内容拷贝一份,然后新增元素的方式存储元素
      • 以每次旧长度的 3/2倍 增长
    • V
      • 默认是10,可以指定扩容倍数,默认是 2倍

Array & ArrayList & List

数组、List和ArrayList的区别

  • 数组
    • 内存中是连续存储的,所以它的索引速度是非常的快

      • Java中,数组一旦在堆内存中创建,长度是固定的
        参考链接
        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0VLCLPFF-1604161824237)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200618220120986.png)]
        在这里插入图片描述
    • 赋值与修改元素也很简单

    • array 是针对任意类型固定长度

    • 缺点

      • 在数组的两个数据间 插入数据 也是很麻烦的
      • 在声明数组的时候,必须同时指明数组的长度,考虑 长度问题
        • 数组的长度过长,会造成内存浪费
        • 数组和长度过短,会造成数据溢出的错误
  • ArrayList
    • 继承了IList接口,所以它可以很方便的进行数据的添加,插入和移除
    • 在声明ArrayList对象时并不需要指定它的长度
    • ArrayList是针对任意类型任意长度
    • 缺点
      • 非类型安全
        • ArrayList 会把所有插入其中的数据都当作为 object 类型来处理
        • 使用 ArrayList 中的数据来处理问题的时候,很可能会报 类型不匹配 的错误
      • 效率性能损耗
        • 对于一般的引用类型来说,这部分的影响不是很大
        • 值类型:往ArrayList里面添加和修改元素,都会引起装箱和拆箱的操作,频繁的操作可能会影响部分效率
  • List
    • List 类是 ArrayList 类的泛型等效类
    • List 是针对特定类型任意长度
    • 在声明List集合时,同时需要为其声明List集合内数据的对象类型
    	List<int> list = new List<int>();
    
    • 好处:泛型提供了类型安全但没有增加多个实现的开销
      • 通过允许指定泛型类或方法操作的特定类型,泛型功能将类型安全的任务从您转移给了编译器,不需要编写代码来检测数据类型是否正确
      • 因为会在编译时强制使用正确的数据类型。减少了类型强制转换的需要和运行时错误的可能性

小结

ArrayListArray链表
存储基于数组实现连续存储,随机访问随机存储,顺序访问
检索
增删×
java列表数组
长度声明×
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值