基于java的数据结构学习——泛型动态数组的封装

public class Array<E> {private E[] data;private int size;// 构造函数public Array(int Capacity){data = (E[])new Object[Capacity];size = 0;}// 默认构造函数public Array(){this(10);}// 判断数组是否已满public boolean isFull(){return size == data.length;}// 判断数组是否为空public boolean isEmpty(){return size == 0;}// 找出元素 e 的下标,没有返回 -1public int find(E e){for(int i = 0; i < size; i++){if(data[i].equals(e)){return i;}}return -1;}// 判断数组是否包含元素 epublic boolean contain(E e){return find(e) == -1 ? false : true ;}// 获取数组的大小 sizepublic int getSize(){return size;}// 获取数组的容量 Capacitypublic int getCapacity(){return data.length;}// 获取下标为 index 位置的元素 epublic E get(int index){// 判断传入下标是否合法if(index < 0 || index >= size){throw new IllegalArgumentException("Get Failed! Index is illegal!");}return data[index];}// 获取数组的第一个元素public E getFirst(){return get(0);}// 获取数组的最后一个元素public E getLast(){return get(size - 1);}// 设置下标 index 位置处的元素为 epublic void set(int index, E e){// 判断传入下标是否合法if(index < 0 || index >= size){throw new IllegalArgumentException("Set Failed! Index is illegal!");}data[index] = e;}// 在下标为 index 位置插入元素 epublic void add(int index, E e){// 判断传入下标是否合法if(index < 0 || index > size){throw new IllegalArgumentException("Add Failed! Index is illegal!");}// 如果数组已满,则重新分配空间if (isFull()){resize(data.length * 2);}// 在 index 位置插入元素 efor (int i = size - 1; i >= index; i--){data[i + 1] = data[i];}data[index] = e;size++;}// 在数组头插入元素 epublic void addFirst(E e){add(0, e);}// 在数组尾插入元素 epublic void addLast(E e){add(size, e);}// 删除下标为 index 位置处的元素public E remove(int index){// 判断下标是否合法if (index < 0 || index >= size){throw new IllegalArgumentException("Remove Failed! Index is illegal!");}E tmp = data[index];for(int i = index; i < size - 1; i++){data[i] = data[i + 1];}size--;// 判断是否需要重新分配空间if (size == data.length / 4 && data.length / 2 != 0){resize(data.length / 2);}return tmp;}// 删除数组头部元素public E removeFirst(){return remove(0);}// 删除数组尾部元素public E removeLast(){return remove(size - 1);}// 删除元素 epublic void removeElement(E e){int index = find(e);if (index != -1){remove(index);}}// 重新分配空间大小public void resize(int newCapacity){if (newCapacity <= 0){throw new IllegalArgumentException("Resize Failed! NewCapacity is illegal!");}E[] newData = (E[])new Object[newCapacity];for (int i = 0; i < size; i++){newData[i] = data[i];}data = newData;}// 重载打印函数@Overridepublic String toString(){StringBuilder res = new StringBuilder();res.append(String.format("Array size = %d, Capacity = %d\n", size, data.length));res.append("[");for (int i = 0; i < size; i++){res.append(data[i]);if (i != size - 1)res.append(", ");}res.append("]");return res.toString();}public static void main(String[] args){Array<Integer> arr = new Array<>();for(int i = 0 ; i < 10 ; i ++)arr.addLast(i);System.out.println(arr);arr.add(1, 100);System.out.println(arr);arr.addFirst(-1);System.out.println(arr);arr.remove(2);System.out.println(arr);arr.removeElement(4);System.out.println(arr);arr.removeFirst();System.out.println(arr);for(int i = 0 ; i < 4 ; i ++){arr.removeFirst();System.out.println(arr);}}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

POJ1207-The 3n + 1 problem

http://poj.org/problem?id1207 注意输入两个数的大小&#xff0c;水。。。 #include <stdio.h> int main(void) {int a,b,m,count,i,max;while(scanf("%d%d",&a,&b)!EOF){printf("%d %d ",a,b);if(a>b){ma;ab;bm;}max0;for(ia;i<b;i…

解决:vue.esm.js?efeb:591 [Vue warn]: Do not use built-in or reserved HTML elements as component id: me

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 报错如题&#xff1a; vue.esm.js?efeb:591 [Vue warn]: Do not use built-in or reserved HTML elements as component id: menu …

JetBrains 系列软件汉化包

Android Studio 3.0-3.1 汉化包 CLion 2018.1 汉化包 GoLand 2017.3.2-2018.1 汉化包 IntelliJ IDEA 2017.3-2018.1 汉化包 PhpStorm 2017.3-2018.1 汉化包 PyCharm 2017.3-2018.1 汉化包 RubyMine 2017.3.2-2018.1 汉化包 WebStorm 2017.3-2018.1 汉化包 下载完毕后&#xff…

JAXP进行DOM和SAX解析

1.常用XML的解析方式&#xff1a;DOM和SAX 1&#xff09;DOM思想&#xff1a;将整个XML加载内存中&#xff0c;形成文档对象&#xff0c;所以对XML操作都对内存中文档对象进行。 2&#xff09;SAX思想&#xff1a;一边解析&#xff0c;一边处理&#xff0c;一边释放内存资源---…

VScode 格式化代码快捷键、修改快捷键

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 请看仔细快捷键是&#xff1a; shift alt F // 我是从 eclipse 转的 idea &#xff0c;现在再用 vscode , 一直条件反射的按的 c…

信息学竞赛的常数优化、常见问题、代码风格相关

在查std::ios::sync_with_stdio(false);有关信息时&#xff0c;看到https://blog.csdn.net/qq_33583069/article/details/53086992 这篇博客&#xff0c;对其中一些问题比较感兴趣&#xff0c;整理了下相关资料&#xff1a; isdigit()https://blog.csdn.net/cupidove/article/d…

TCP报文格式详解

TCP协议只定义了一种报文格式 建立、拆除连接、传输数据使用同样的报文 TCP报文格式 TCP报文段首部&#xff08;20个字节&#xff09; 源端口和目的端口&#xff1a;各占2个字节&#xff0c;16比特的端口号加上32比特的IP地址&#xff0c;共同构成相当于传输层服务访问点的地址…

Vue 生命周期中 mounted( ) 和 created( ) 的区别

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、什么是生命周期&#xff1f; 用通俗的语言来说&#xff0c;就是Vue中实例或者组件从创建到消灭中间经过的一系列过程。虽然不太严谨…

科目三考试

马上要考大路了&#xff0c;考科目三考试必须做到什么事啊&#xff1f; 2012-5-30 8:46:23检举  注意事项   1、上车后确认车上电脑信息后&#xff0c;关好车门&#xff0c;系好安全带&#xff0c;打左转向灯起步。   2、直线行驶路段必须使用二档行驶。否则将被判…

基于java的数据结构学习——数组实现的栈以及简单应用

栈 Stack 栈是一种线性结构相比数组&#xff0c;栈对应的操作是数组的子集只能从一端添加元素&#xff0c;也只能从一端取出元素这一端称为栈顶栈是一种后进先出的数据结构 栈的应用 无处不在的Undo操作&#xff08;撤销&#xff09;括号匹配&#xff08;编译器&#xff09;程…

Python 总结题目

题例1 # 打印如下长方形&#xff1a; ************ * * * * ************ # 打印如下长方形&#xff1a; print("*****************") print("* *") print("* *") print("****************…

vue : 引入、安装 jquery 、bootstrap

一、vue安装jquery 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1、新建一个vue工程。 2、在项目文件夹下&#xff0c;使用命令 npm install jquery --save-dev 引入jquery。 np…

2013驾考科目三考试难点解析

原来规定科目三考试上车准备、起步、直线行驶等13个道路驾驶技能项目。123号令实施后&#xff0c;科目三考试分两部分。道路驾驶技能考试项目增加到16项&#xff0c;增加了加减挡位操作、路口左转弯、路口右转弯3个考试项目&#xff0c;驾驶里程也增加。如何顺利通过2013驾考科…

leetcode练习——栈(1)

题号20&#xff1a;Invalid Parentheses Given a string containing just the characters (, ), {, }, [ and ], determine if the input string is valid. An input string is valid if: Open brackets must be closed by the same type of brackets.Open brackets must be…

Asp.Net MVC 页面代码压缩筛选器-自定义删除无效内容

Asp.Net MVC 页面代码压缩筛选器 首先定义以下筛选器&#xff0c;用于代码压缩。 /*页面压缩 筛选器*/public class WhiteSpaceFilter : Stream{private Stream _shrink;private Func<string, string> _filter;public WhiteSpaceFilter(Stream shrink, Func<string, s…

基于java的数据结构学习——数组实现的队列和循环队列及性能对比

队列 Queue 队列也是一种线性结构相比数组&#xff0c;队列对应的操作是数组的子集只能从一端&#xff08;队尾&#xff09;添加元素&#xff0c;只能从另一端&#xff08;队首&#xff09;取出元素队列是一种先进先出的数据结构 队列的实现及复杂度分析 Queue<E> voi…

新手如何准确的控制油门

日常练车还不赖&#xff0c;可是一换车就容易加大油门儿&#xff0c;有啥子办法能美好的扼制油呢?和调的坐位有关系吗? 答&#xff1a;油门儿跟刹车被视为交通工具扼制的魂灵。交通工具引擎发动机的油门儿&#xff0c;通常是靠踏板来扼制的&#xff0c;也称加速踏板&#xff…

vue 项目:文件夹 结构 、配置详解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 项目配置 首先&#xff0c;在确定好使用的框架和组件库后&#xff0c;先要大致了解它们&#xff0c;做到文档基本熟悉。本次开发使用…

hdoj2553(N皇后问题)

Problem : 2553 ( N皇后问题 ) Judge Status : Accepted RunId : 2619754 Language : G Author : huwenbiao Code Render Status : Rendered By HDOJ G Code Render Version 0.01 Beta/***************************************************************\ *Author:Hu…

基于java的数据结构学习——数组实现的栈以及简单应用C++实现

基于java的数据结构学习——数组实现的栈以及简单应用的 C 实现 源码&#xff1a; // // Created by PC-Saw on 2019/1/3. //#ifndef DATA_STRUCTURE_ARRAYSTACK_H #define DATA_STRUCTURE_ARRAYSTACK_H#include "Stack.h" #include "MyArray.h"template&…