Java 基于数组自定义实现容量不可变向量Vector

java-immutable-collections:Java不可变的基于数组的集合 ImmutableCollections-基于数组的Java不可变集合 版权所有(c)2017 Nicholas Cull 有关许可信息,请参阅LICENSE.txt。 Java 1.8的基于数组的不可变集合 排序和未排序的变体 风格类似于番石榴收集包装 空友好 Java 8习惯用法包括流支持 可序列化 项目链接: : 立即下载

背景:假定集合 S 由 n 个元素组成,它们按照线性次序存放,于是我们就可以直接访问其中的第一个元素、第二个元素、第三个元素……。也就是说,通过[0, n-1]之间的每一个整数,都可以直接访问到唯一的元素 e,而这个整数就等于 S 中位于 e 之前的元素个数⎯⎯在此,我们称之为该元素的秩( Rank)。不难看出,若元素 e 的秩为 r,则只要 e 的直接前驱(或直接后继)存在,其秩就是 r-1(或 r+1)。这一定义与 Java、 C++之类的程序语言中关于数组元素的编号规则是一致的。支持通过秩直接访问其中元素的序列,称作向量( Vector)或数组列表( Array list)。实际上,秩这一直观概念的功能非常强大,它可以直接指定插入或删除元素的位置。

向量ADT各方法定义如下:
这里写图片描述

基于数组,可以直接实现向量 ADT。我们借用一个数组 array[],其中 array[i]分别存放一个引用,指向秩为position 的向量元素。为此, array[]的容量 CAPACITY 需要足够大,还需要设置一个实例变量 size 指示向量的实际规模。

具体代码实现:
Vector 接口:

/**
 * Vector Interface
 */
package com.vector_and_array;

/**
 * @author gannyee
 *
 */
public interface VectorInterface {

    //Get size of vector
    public int getSize();

    //Is empty
    public boolean isEmpty();

    //Get element at rank
    public Object getAtRank(int position) throws ExceptionBoundaryExceed;

    //Replace element at rank
    public void replaceAtRank(int position,Object element) throws ExceptionBoundaryExceed;

    //Insert element at rank
    public void insertAtRank(int position,Object element) throws ExceptionBoundaryExceed;

    //Remove element at rank
    public void removeAtRank(int position) throws ExceptionBoundaryExceed;

    //Travel all elements
    public void getAllelements();
}

自定义ExceptionBoundaryExceed类:

package com.vector_and_array;
/**
 * @author gannyee
 * Exception for boundaryExceed
 */
public class ExceptionBoundaryExceed extends Exception{
    //Constructor overload
    public ExceptionBoundaryExceed(String message){
        super(message);
    }
}

Vector具体实现
VectorBasicOnArray类:

package com.vector_and_array;

import java.util.Arrays;

public class VectorBasicOnArrays implements VectorInterface {
    //Define static variable
    private static final int CAPACITY = 1024;
    //Declared size of vector
    private static int size;
    //Declared array for vector
    Object[] array;

    //Constructor
    public VectorBasicOnArrays(){
        size = 0;
        array = new Object[CAPACITY];
    }

    @Override
    public int getSize() {
        return size;
    }

    @Override
    public boolean isEmpty() {
        return size == 0;
    }

    @Override
    public Object getAtRank(int position) throws ExceptionBoundaryExceed{
        if(position < 0 || position > size)
            throw new ExceptionBoundaryExceed("Vector exceed! ");
        return array[position];
    }

    @Override
    public void replaceAtRank(int position, Object element) throws ExceptionBoundaryExceed{
        if(position < 0 || position > size)
            throw new ExceptionBoundaryExceed("Vector exceed! ");
        array[position] = element;
        System.out.println("Element replaced is: " + array[position] + " at position: " + position);
    }

    @Override
    public void insertAtRank(int position, Object element) throws ExceptionBoundaryExceed{
        if(position < 0 || position > size)
            throw new ExceptionBoundaryExceed("Vector exceed! ");
        if(size > CAPACITY)
            throw new ExceptionBoundaryExceed("Vector overflow! ");
        for(int i = size;i >= position;i --)
            array[i + 1] = array[i];
        array[position] = element;
        size ++;
        System.out.println("Element you insert is: " + element + " at position: " + position);
    }

    @Override
    public void removeAtRank(int position) throws ExceptionBoundaryExceed{
        if(position < 0 || position > size)
            throw new ExceptionBoundaryExceed("Vector exceed! ");
        System.out.println("Element you remove is: " + array[position]);
        for(int i = position;i <= size - 1;i ++)
            array[i] = array[i + 1];
        size --;
    }

    @Override
    public void getAllelements() {
        Object[] arrayTravel = new Object[size];

        for(int i = 0;i < arrayTravel.length;i ++)
            arrayTravel[i] = array[i];
        System.out.println("All elements are: " + Arrays.toString(arrayTravel));
    }


}

测试代码:

package com.vector_and_array;

/**
 * Test
 * @author gannyee
 *
 */
public class VectorTest {

    public static void main(String[] args) throws ExceptionBoundaryExceed {

        //Define VectorBasicOnArrat class
        VectorBasicOnArrays vba = new VectorBasicOnArrays();

        System.out.println("Size: " + vba.getSize());
        System.out.println("Is empty? " + vba.isEmpty());

        vba.insertAtRank(0, 1);
        vba.insertAtRank(1, 2);
        vba.insertAtRank(2, 3);
        vba.insertAtRank(3, 4);
        vba.insertAtRank(4, 5);
        vba.insertAtRank(5, 6);
        vba.insertAtRank(5, 7);
        vba.insertAtRank(6, 8);
        System.out.println("Size: " + vba.getSize());
        System.out.println("Is empty? " + vba.isEmpty());
        vba.getAllelements();

        vba.replaceAtRank(0, 12);
        vba.replaceAtRank(1, 13);
        vba.replaceAtRank(2, 14);
        vba.replaceAtRank(3, 15);
        System.out.println("Size: " + vba.getSize());
        System.out.println("Is empty? " + vba.isEmpty());
        vba.getAllelements();

        vba.removeAtRank(7);
        vba.removeAtRank(5);
        vba.removeAtRank(4);
        vba.removeAtRank(1);
        vba.removeAtRank(0);
        System.out.println("Size: " + vba.getSize());
        System.out.println("Is empty? " + vba.isEmpty());
        vba.getAllelements();
    }

}

测试结果:

Size: 0
Is empty? true
Element you insert is: 1 at position: 0
Element you insert is: 2 at position: 1
Element you insert is: 3 at position: 2
Element you insert is: 4 at position: 3
Element you insert is: 5 at position: 4
Element you insert is: 6 at position: 5
Element you insert is: 7 at position: 5
Element you insert is: 8 at position: 6
Size: 8
Is empty? false
All elements are: [1, 2, 3, 4, 5, 7, 8, 6]
Element replaced is: 12 at position: 0
Element replaced is: 13 at position: 1
Element replaced is: 14 at position: 2
Element replaced is: 15 at position: 3
Size: 8
Is empty? false
All elements are: [12, 13, 14, 15, 5, 7, 8, 6]
Element you remove is: 6
Element you remove is: 7
Element you remove is: 5
Element you remove is: 13
Element you remove is: 12
Size: 3
Is empty? false
All elements are: [14, 15, 8]

这里写图片描述

相关文字借鉴引用 数据结构与算法( Java 描述)邓俊辉 著

未完待续。。。。
基于数组自定义实现容量可变的向量Vector!

源码在github上:https://github.com/gannyee/JavaDataStruct

解密OpenVLA的ActionTokenizer:如何用256个Token控制7维机器人动作 本文深入解析了OpenVLA模型中ActionTokenizer的核心机制。该分词器通过将7维连续机器人动作空间离散化为256个Token,巧妙地解决了大语言模型输出精确控制指令的难题。文章详细阐述了其设计哲学、与Llama-2词表的集成方式,并分析了256个离散区间在精度与效率间的平衡,为机器人视觉-语言-动作控制提供了关键技术桥梁。 阅读详情

相关推荐

星座SAR动目标检测(GMTI)

参考代码 星座SAR动目标检测 www.youwenfan.com/contentcsg/52399.html。

feifeigo123的博客 549

java声明不可变数组_如何使数组元素在Java中不可变?

不,您不能使数组的元素不变。但是java.util.Collections类的unmodifiableList()方法接受List接口的一个对象(实现其类的对象),并返回给定对象的不可修改形式。用户仅对获得的列表具有只读访问权限。ArrayList类的asList()方法接受一个数组并返回一个List对象。因此,要转换一个不可变的数组-获得所需的数组。使用asList()方法将其转换为列表对象。将...

weixin_34646919的博客 2448

2021年软件测试面试题大全

简述测试流程: 1、阅读相关技术文档(如产品PRD、UI设计、产品流程图等)。 2、参加需求评审会议。 3、根据最终确定的需求文档编写测试计划。 4、编写测试用例(等价类划分法、边界值分析法等)。 5、用例评审(主要参与人员:开发、测试、产品、测试leader)。 6、开发提交代码至SVN或者GIT ,配管搭建测试环境。 7、执行测试用例,记录发现的问题。 8、验证bug与回归测试。 9、编写测试报告。 10、产品上线。 补充测试用例设计过程: 根据需求得出测试需求 设计测试方

hard_days的博客 20万+

java声明不可变数组_java – 关于不可变List(由Arrays.asList()创建)

当我们使用java.util.Arrays.asList()从数组创建列表时,列表是不可变的.我很想知道为什么我们想要创建一个不可变列表,当List(或Set或Map)的基本目的是具有动态大小并且能够随意添加,删除元素时.当我们需要一个固定大小的数据结构时,我们选择Array,当我们需要一个动态数据结构时,我们选择List或Set或Map等.那么拥有一个不可变列表的目的是什么?我在完成任务时遇到了...

weixin_42316933的博客 1069

STM32F103C8T6最小系统板GPIO配置避坑指南:从原理图到流水灯一次成功

本文详细介绍了STM32F103C8T6最小系统板GPIO配置的实战指南,从硬件准备到流水灯实现,涵盖了九大关键步骤。特别针对新手常见问题,如GPIO配置、开发环境搭建和程序下载调试,提供了详细的解决方案和避坑技巧,帮助开发者快速掌握STM32开发基础。

weixin_33756596的博客 339

【ShaderToy】开篇

写在前面呜呼,好久没有写博客了,好惭愧。题外话,感觉越大就越想家,希望可以一直和家人在一起,哪怕只是坐在一起不说话也觉得很温暖,一想到要分开眼睛就开始酸,哎。开学还是爬上来老实更新博客学习吧~今天爬上来一看,发现优快云的博客编辑终于更新了!进步总是好的,以前的编辑器实在很捉急。使用这种标记语言的确方便了很多,但好像颜色字体没法设置?程序员果然对美观没什么追求。ShaderToy如果你还没听过Sha

candycat 8万+

java中的可变数组

本文转自:https://www.w3cschool.cn/java/java-variable-length-arrays.html Java 可变长度数组 由 lala100 创建,最后一次修改 2017-01-09 Java数据类型教程 - Java可变长度数组 Java数组不能增长。为了创建一个可扩展的数组,我们可以使用ArrayList或V

Allen Liu 2万+

EDA与机器学习融合:智能优化芯片设计流程的工程实践

机器学习作为数据驱动的核心技术,通过从历史数据中学习复杂模式,实现对系统行为的预测与优化。其原理在于构建模型,将输入特征映射到目标变量,从而揭示数据背后的内在规律。在工程领域,这项技术的核心价值在于能够将专家经验转化为可量化、可复用的智能模型,显著提升自动化水平与决策效率。电子设计自动化(EDA)是芯片设计的关键支撑,传统流程高度依赖人工试错,面临参数空间巨大、优化周期长等挑战。将机器学习应用于EDA,能够构建预测模型来预估设计性能(PPA),或通过代理模型加速设计空间探索,实现智能化的设计辅助与优化。本文

weixin_30411239的博客 684

在Java中无法将数组声明为不可变的

在Java中无法将数组声明为不可变的,即使使用了正确的访问修饰符 [code="java"] public final int[] intTetst = {1,2}; public void testArrayValueFinal() { System.err.println(intTetst[0]); intTetst[0] = 2; System....

xuxiaohongok的专栏 581

5G/NR 网络切片基本概念(协议版)

26.1 网络切片概念 网络切片是一个概念,可以根据每个客户的要求进行区别对待。通过切片的形式,将不同流量差异化处理,以及可以将资源进行隔离,然后移动网络运营商可以将客户视为属于不同租户类型的客户,每种客户具有不同的服务要求,这些要求根据每个租户根据SLA (Service Level Agreement,服务水平协议)可以使用哪种切片类型进行管理和订阅。 网络切片始终由RAN部分和CN部...

欢迎来到小七的博客,这里将带你深入探索5G通信的神秘世界。无论你是通信领域的专业人士还是对这一领域充满好奇心的技术爱好者,这里都有专业协议解读、通信知识普及以及有趣的Python编程内容等你发现。 1万+

025、空间降噪与时域降噪:噪声抑制与细节保留的平衡艺术

《降噪技术的平衡艺术:空间与时域降噪的协同优化》 本文深入探讨了图像处理中空间降噪与时域降噪的技术原理与工程实践。空间降噪通过像素级处理提升单帧质量,而时域降噪则利用帧间信息增强稳定性。文章揭示了两种方法在实际应用中的矛盾点:过度降噪会导致细节损失,影响后续算法性能。作者结合车载环视系统等实战案例,详细分享了参数调优经验,包括运动自适应策略、边缘保持技巧和嵌入式平台优化方案。特别强调降噪的最终目标应服务于下游算法需求,而非单纯追求图像美观。文章为工程人员提供了从理论到实践的完整指导,展现了降噪技术在效果与性

sundong_81的博客 186

Java 基于数组自定义实现容量可变向量Vector

数组容量N固定。一方面,在向量规模很小时,预留这么多的空间实属浪费;反过来,当向量规模超过N时,即使系统有足够的空间资源,也会因 意外错而崩溃。幸好,有一个简易的方法可以克服这一缺陷。我们希望向量能够根据实际需要,动态地扩充数组的容量。当然, Java 语言本身并不支持这一功能,与多数程序语言一样, Java 中数组的容量都是固定的。我们的策略是,一旦数组空间溢出(即size≥CAPACITY),

gannyee 1537

46、聚类算法在智能交通数据分析中的应用

本文探讨了聚类算法在智能交通数据分析中的应用,介绍了K-均值算法、K-中心点算法和基于模型的聚类算法的基本原理及特点,并结合实际交通数据讨论了其应用场景与挑战。通过聚类分析,能够从海量交通数据中发现隐藏模式,为交通管理和规划提供科学依据。文章还展示了具体的案例分析和实现流程,为未来智能交通系统的发展提供了参考。

zz67890的博客 133

java向量为什么不会自动扩容_Java 基于数组自定义实现容量可变向量Vector

数组容量N固定。一方面,在向量规模很小时,预留这么多的空间实属浪费;反过来,当向量规模超过N时,即使系统有足够的空间资源,也会因意外错而崩溃。幸好,有一个简易的方法可以克服这一缺陷。我们希望向量能够根据实际需要,动态地扩充数组的容量。当然, Java 语言本身并不支持这一功能,与多数程序语言一样, Java 中数组的容量都是固定的。我们的策略是,一旦数组空间溢出(即size≥CAPACITY), ...

weixin_36427631的博客 199

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java向量vector类_详解Java编程中向量(Vector)的应用

Vector(向量)是 java.util 包中的一个类,该类实现了类似动态数组的功能。向量和数组相似,都可以保存一组数据(数据列表)。但是数组的大小是固定的,一旦指定,就不能改变,而向量却提供了一种类似于“动态数组”的功能,向量与数组的重要区别之一就是向量的容量是可变的。可以在向量的任意位置插入不同类型的对象,dYxdh无需考虑对象的类型,也无需考虑向量的容量。向量和数组分别适用于不同的场合,一...

weixin_36013931的博客 658

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java Vector(向量)

Vector(向量)是 java.util 包中的一个类,该类实现了类似动态数组的功能。向量和数组相似,都可以保存一组数据(数据列表)。但是数组的大小是固定的,一旦指定,就不能改变,而向量却提供了一种类似于“动态数组”的功能,向量与数组的重要区别之一就是向量的容量是可变的。可以在向量的任意位置插入不同类型的对象,无需考虑对象的类型,也无需考虑向量的容量。向量和数组分别适用于不同的场合,一般来说,下列场合更适合于使用向量:如果需要频繁进行对象的插入和删除工作,或者因为需要处理的对象数目不定。

weixin_62458944的博客 1818

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

java 向量_详解Java编程中向量(Vector)的应用

Vector(向量)是 java.util 包中的一个类,该类实现了类似动态数组的功能。向量和数组相似,都可以保存一组数据(数据列表)。但是数组的大小是固定的,一旦指定,就不能改变,而向量却提供了一种类似于“动态数组”的功能,向量与数组的重要区别之一就是向量的容量是可变的。可以在向量的任意位置插入不同类型的对象,无需考虑对象的类型,也无需考虑向量的容量。向量和数组分别适用于不同的场合,一般来说,下...

weixin_39646084的博客 719

java的vector是什么类_java中vector类

public classVectorextends下列类的父类:Vector类实现了可动态扩充的对象数组。类似数组,它包含的元素可通过数组下标来访问。但是,在Vector创建之后。Vector可根据增加和删除元素的需要来扩大或缩小。每个向量可通过维护capacity和capacityIncrement来优化存储空间的管理。capacity至少和向量大小一样大;但它通常会更大些,因...

weixin_36212459的博客 1155

Java向量(Vector)及其应用

Vector(向量)是 java.util 包中的一个类,该类实现了类似动态数组的功能。 向量和数组相似,都可以保存一组数据(数据列表)。但是数组的大小是固定的,一旦指定,就不能改变,而向量却提供了一种类似于“动态数组”的功能,向量与数组的重要区别之一就是向量的容量是可变的。 可以在向量的任意位置插入不同类型的对象,无需考虑对象的类型,也无需考虑向量的容量。 向量和数组分别适用于

qq_37723158的博客 1万+

java向量 vector

Vector 向量 是java.util 包里的一个类,该类继承AbstractList,实现了类似动态数组的功能。 向量和数组相似,都可以保存一组数据,但数组的大小(长度)是固定的,而Vector 的大小可变的。 Vector 是线程安全的(其源码的方法使用了synchronized 关键字),Vector 只能存储对象。 import java.util.Iterat...

ddtzlbxr38191的博客 248

java 向量_JAVA中的向量(Vector)用法

JAVA中的向量(Vector)用法Java.util.Vector提供了向量(Vector)类以实现类似动态数组的功能。在Java语言中是没有指针概念的,但如果能正确灵活地使用指针又确实可以大大提高程序的质量,比如在C、C++中所谓“动态数组”一般都由指针来实现。为了弥补这点缺陷,Java提供了丰富的类库来方便编程者使用,Vector类便是其中之一。事实上,灵活使用数组也可完成向量类的功能,但向...

weixin_36162906的博客 3267

java 向量_Java知多少(78)Java向量(Vector)及其应用

Vector(向量)是 java.util 包中的一个类,该类实现了类似动态数组的功能。向量和数组相似,都可以保存一组数据(数据列表)。但是数组的大小是固定的,一旦指定,就不能改变,而向量却提供了一种类似于“动态数组”的功能,向量与数组的重要区别之一就是向量的容量是可变的。可以在向量的任意位置插入不同类型的对象,无需考虑对象的类型,也无需考虑向量的容量。向量和数组分别适用于不同的场合,一般来说,下...

weixin_39688687的博客 521

JAVA中的vector类

Vector 可实现自动增长的对象数组。java.util.vector提供了向量类(vector)以实现类似动态数组的功能。 为什么会有这样一个类的存在呢? C语言里面指针的存在,能大大提高程序的效率,C++中的动态数组,一般都用指针来实现,但是java中并没有指针,那它是如何为编程人员提供便利的呢?为了弥补这个缺点,Java提供了丰富的类库来方便编程者使用,vector类便是其中之一。事实上,灵活使用数组也可以完成向量类的功能,但向量类中提供大量的方法大大方便了用户的使用。 向量类 创建了一个向量类的对

追梦的女孩博客 1万+

Java中Vector类的常用方法

Vector 可实现自动增长的对象数组。 Vector构造的时候 1.如果不放入数字就是默认值10 2.放入一个数的时候,就...

Marcus 3485

Java中的Vector向量

Vector与传统数组比较: 和传统数组相似,都能通过索引访问Vector的大小根据需要动态变化,这是传统数组无法做到的 Vector与ArrayList比较: 和ArrayLis相似,两者都实现了动态数组!Vector是同步访问的,线程安全的,ArrayList线程不安全!(所以涉及到多线程的时候Vector比较好一些)因为线程为问题,所以Vector的速度比较慢。

未来,你好! 916

java的vector_Java中 Vector的使用详解

Vector 可实现自动增长的对象数组。java.util.vector提供了向量类(Vector)以实现类似动态数组的功能。创建了一个向量类的对象后,可以往其中随意插入不同类的对象,即不需顾及类型也不需预先选定向量的容量,并可以方便地进行查找。对于预先不知或者不愿预先定义数组大小,并且需要频繁地进行查找,插入,删除工作的情况,可以考虑使用向量类。向量类提供了三种构造方法:publicvector...

weixin_33264203的博客 7852
上一篇: 基于双链表 实现Java Queue队列
下一篇: Java 基于数组自定义实现容量可变向量Vector
YatKam
博客等级 码龄12年 58粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值