集合---1

文章探讨了紧密结构如数组和跳转结构如链表的优缺点,以及它们在集合中的应用。数组适合快速寻址但插入删除效率低,而链表则反之。集合作为内存存储,不提供持久化。ArrayList和Vector是Java中的两种集合实现,ArrayList在1.7和1.8中初始化长度不同,扩容策略为1.5倍,而Vector是线程安全的,但因扩容效率低而逐渐被淘汰。
摘要由CSDN通过智能技术生成

紧密结构

比如数组
优点:寻址快->查找元素快
缺点:删除和增加元素效率低

跳转结构

比如链表
单向链表,双向链表,循环链表(首尾相连)
优点:增加、删除快
缺点:查找慢

集合

存储是内存层面的存储,不是持久化存储

vs数组

数组特点和缺点:

  1. 长度指定即固定
  2. 数据类型单一
  3. 删除和增加元素效率低
  4. 实际元素数量不可获取
  5. 无序,不可重复的要求不能满足

集合底层数据结构不一样,特点不一样,可能紧密结构可能跳转结构

集合体系

在这里插入图片描述

集合方法

Collection col = new ArrayList();

col.add(22); // 集合元素只能是引用类型,基本类型有自动装箱

col.contains(22)

col.addAll(col2)

col.equals(cols)

col.isEmpty()

col.size()

col.remove(22)

col.clear()

集合遍历

不能for普通循环

// 增强for循环
for(Object o: col){
}

// 迭代器
Iterator itr = col.iterator();
while(it.hasNext()){
	System.out.println(it.next());
}
指针指向该集合首部,next返回元素并将指针下移

List接口,扩展方法都和index索引相关

List list = new ArrayList();

list.add(index, Object)
list.set(index, Object)

// remove
list.remove(index/Object)

list.get(index)

remove可以是Object也可以是index,所以是Integer类型数据的时候,优先调用index。

循环

普通for, 增强for,iterator

ArrayList实现类

源码类似StringBuilder

在这里插入图片描述
ArrayList接口失误,父类也实现了List接口,有重复

  • 1.7jdk中源码:
    底层数组初始化长度为10,size为有效元素个数不是底层数组长度
    在这里插入图片描述
    要判断是否超容:ensureCapacityInternal(size+1)
    超容后进行扩容grow(minCapacity),扩容为原来的1.5倍,copy过去,然后elementData指向新数组内存

  • 1.8
    在这里插入图片描述
    底层数组长度初始为空,只有调用add方法添加元素时,才判断扩容初始化为10长度,因此时懒汉式的占用空间,节省了空间

Vector

底层还是object数组和int 类型count

和ArrayList相比
  1. vector扩容两倍
  2. add方法用syncronized线程安全,但是效率低,被淘汰了

总结

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Una*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值