Collection框架集合(1)

Collection

类集设置的目的

普通数组,并不是动态数组,在扩容时候每次是自己进行new一个更大的新的数组,而在实践开发的时候,方便实际Java实现了类集。


类集中的三大接口:Collections,Map,Iterator。
所有的类集合都在java.util包中。

Collection接口

Collection 接口是在整个 Java 类集中保存单值的最大操作父接口,里面每次操作的时候都只能保存一个对象的数据


def:采用泛型技术

public interface Collection<E> extends Iterable<E>;
常用方法

public boolean add(E e);
//return无论如何只有ture
public Iterator<E>

List

ArrayList,Vecter,LinkList(链表结构)

ArrayList

ArrayList:使用泛型数组结构,对于增加删除操作快,查找慢

ArrayList<Integer> data=new ArrayList

构造方法

构造器 描述
ArrayList() 构造一个初始容量为10的空列表。
ArrayList​(int initialCapacity) 构造具有指定初始容量的空列表。
ArrayList​(Collection<? extends E> c) 按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表。

每次扩容为原始的1.5倍,若需要极大的空间,需要在初始化时候进行声明

ArrayList的内部原理

首先我们来看一下它的定义

public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}

传入一个默认的数组,而private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};显然是一个空数组
所以ArrayList在构造开始是一个空数组,但是jdk里面说是10个长度,为什么呢
当我们在添加元素时候看一看add方法的定义

public boolean add(E e) {
modCount++;
add(e, elementData, size);
return true;
}

首先modCount记录修改的次数,然后使用add方法,它接受三个参数:要添加的元素e,集合的元素数据数组elementData,以及集合数组大小size
进一步的我们在看一下此处的add定义

private void add(E e, Object[] elementData, int s) {
if (s == elementData.length)
elementData = grow();
elementData[s] = e;
size = s + 1;
}

如果当前的size,s已经等于了数组的长度则进行grow扩容
所以我们来看一下grow的定义

private Object[] grow() {
return grow(minCapacity:size + 1);
}

再来看看此处的grow的具体逻辑

private Object[] grow(int minCapacity) {
int oldCapacity = elementData.length;
if (oldCapacity > 0 || elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
int newCapacity = ArraysSupport.newLength(oldCapacity,
minCapacity - oldCapacity, /* minimum growth */
oldCapacity >> 1 /* preferred growth */);
return elementData = Arrays.copyOf(elementData, newCapacity);
} else {
return elementData = new Object[Math.max(DEFAULT_CAPACITY, minCapacity)];
}
}

首先定义了一一个原数组的长度由于扩容1.5倍首先就得排除初始的为空或者只有1的情况如何创建一个新的更大数组copy过来

Vector

Vector是同步的,如果不需要线程安全建议使用ArraysList
每次扩容的数量是可以定义的

LinkedList

Linkedlist:使用的双向链表
可以实现队列和栈

本文作者:califorium

本文链接:https://www.cnblogs.com/aihaotian/p/17862035.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   califorium  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.