首页 > 其他分享 >Collection框架集合(1)

Collection框架集合(1)

时间:2023-11-28 22:55:05浏览次数:21  
标签:框架 ArrayList elementData Collection add 数组 集合 grow

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:使用的双向链表
可以实现队列和栈

标签:框架,ArrayList,elementData,Collection,add,数组,集合,grow
From: https://www.cnblogs.com/aihaotian/p/17862035.html

相关文章

  • scrapy 框架的安装及流程-01
    一、简介 scrapy的优势:1、为了更利于我们将精力集中在请求与解析上2、企业级的要求,效率高 二、模块安装scrapy支持Python2.7和python3.4以上版本1.在https://www.lfd.uci.edu/~gohlke/pythonlibs/下载对应的Twisted的版本文件 2.在命令行进入到Twisted的目......
  • Java集合框架之:ArrayList的常见方法使用
    ✨前言✨  Java本文主要介绍JavaArrayList的使用方法教程及示例代码......
  • 【python入门之基本数据类型】---基本数据类型(元组、集合)【四】
    【七】元组类型(tuple)【1】作用元组(tuple)是一种不可变的序列类型,类似于列表,用于存储多个有序元素。元组与列表的主要区别在于元组的元素不能被修改、删除或添加,是不可变的数据类型。元组通常用于存储相关联的数据,保持数据的完整性。【2】定义元组通过小括号()......
  • 【Python进阶】第7篇:TCP和socket客户端程序开发。总结md文档集合(已分享,附代码)
    本文从14大模块展示了python高级用的应用。分别有Linux命令,多任务编程、网络编程、Http协议和静态Web编程、html+css、JavaScript、jQuery、MySql数据库的各种用法、python的闭包和装饰器、mini-web框架、正则表达式等相关文章的详细讲述。全套笔记和代码自取地址:请移步这里感......
  • 记录后端不同请求方式的接口,使用vue3框架下的前端axio请求不同写法
    一.后端接口:@GetMapping("/index")publicResponseResultindex(){..} 前端接口:indexInfo().then(res=>{if(res.data.code==200){ElNotification({message:res.data.data.msg||"加载成功",ty......
  • 集合框架(三)ArrayList的常见使用
    优点:有序,可以重复,查询快。缺点:增删慢。List接口常用方法:1、add(Objectelement):向列表的尾部添加指定的元素。2、size():返回列表中的元素个数。3、get(intindex):返回列表中指定位置的元素,index从0开始。4、add(intindex,Objectelement):在列表的指定位置插入指定元......
  • list求差集的方法汇总(两个不同元素的List集合)
    一个全部用户集合List<UserInfo>allUser,一个部分用户集合List<UserInfo>commentUser,根据UserInfo中的UserID求差集,从allUser中得到剩下的一部分用户,通过stream流和lamda表达式实现publicList<UserInfo>getNotComment(List<UserInfo>allUser,List<UserInfo>commentU......
  • Scene渲染命令集合(executeCommands)分析
    Scene渲染命令集合(executeCommands)分析前提条件://已经确定了渲染缓冲区:view.globeDepth.framebufferpassState.framebuffer=view.globeDepth.framebuffer1、简单流程,没有pick和后处理//一般性流程executeCommands(scene,passState){//更新相机us.update......
  • 集合框架(一) Java中Map的常见方法的使用及循环的五种方式
    Map是Java中的一种集合,它是一种键值对的映射表,可以根据键快速获取对应的值。@[toc]##1.常见使用方式以下是Java中Map的常见方法使用示例及运行结果:###1.1存储键值对使用put()方法向Map中添加键值对:```javaMap<String,Integer>map=newHashMap<>();map.put("apple",10......
  • Java程序员必备技能:Collections工具类深度解析!
    在之前的文章中,我们学习了单列集合的两大接口及其常用的实现类;在这些接口或实现类中,为我们提供了不少的实用的方法。本篇文章我们来介绍一种java开发者为我们提供了一个工具类,让我们更好的来使用集合Collections工具类Collections是一个操作Set,List,Map等的集合工具类它提......