JAVA数据结构--Array数组实现
所谓数组,是有序的元素序列。 [1] 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。 [1] 这些无序排列的同类数据元素的集合称为数组。
平常使用Java中的数组,数组是最基础的一种数据结构
int[] nums=new int[5];
定义数组以及数组的构造函数如下
public class Array<E> {
private E[] data;
private int size;
/*
*
* @param 传入数组的容量capacity构造array
* */
public Array(int capacity){
data=(E[])new Object[capacity];
size=0;
}
/*
* 无参数的构造函数,默认数组的容量是capacity=10
* */
public Array(){
this(10);
}
}
array数组的优点就在于,查询快,查询的时间复杂度为O(1)
//获取index索引位置的元素
public E get(int index){
if(index<0||index>=size)
throw new IllegalArgumentException();
return data[index];
}
//获取末尾元素
public E getLast(){
return data[size-1];
}
//获取头部元素
public E getFirst(){
return data[0];
}
同样,array数组的缺点就是插入的复杂度为O(n)
//在第index位置插入一个新元素e
public void add(int index,E e){
if(size==data.length)
throw new IllegalArgumentException();
if(index<0||index>size)
throw new IllegalArgumentException();
for(int i=size-1;i>=index;i--)
data[i+1]=data[i];
data[index]=e;
size++;
}
完整代码如下:
package Array;
public class Array<E> {
private E[] data;
private int size;
/*
*
* @param 传入数组的容量capacity构造array
* */
public Array(int capacity){
data=(E[])new Object[capacity];
size=0;
}
/*
* 无参数的构造函数,默认数组的容量是capacity=10
* */
public Array(){
this(10);
}
//获取index索引位置的元素
public E get(int index){
if(index<0||index>=size)
throw new IllegalArgumentException();
return data[index];
}
//获取末尾元素
public E getLast(){
return data[size-1];
}
//获取头部元素
public E getFirst(){
return data[0];
}
//获取元素中的个数
public int getSize(){
return size;
}
//获取数组的容量
public int getCapacity(){
return data.length;
}
//返回数组是否为空
public boolean isEmpty(){
return size==0;
}
//末尾添加元素
public void addLast(E e){
add(size,e);
}
//头部添加元素
public void addHeader(E e){
add(0,e);
}
//修改元素
public void change(int index,E e){
if(index<0||index>=data.length)
throw new IllegalArgumentException();
data[index-1]=e;
}
//在第index位置插入一个新元素e
public void add(int index,E e){
if(size==data.length)
throw new IllegalArgumentException();
if(index<0||index>size)
throw new IllegalArgumentException();
for(int i=size-1;i>=index;i--)
data[i+1]=data[i];
data[index]=e;
size++;
}
//查找数组中是否有元素e
public boolean contains(E e){
for(int i=0;i<size;i++)
if(data[i].equals(e))
return true;
return false;
}
//查询元素的索引
public int find(E e){
for(int i=0;i<size;i++)
if(data[i]==e)
return i;
return -1;
}
//从数组中删除元素
public E remove(int index){
if(index<0||index>=size)
throw new IllegalArgumentException();
E ret =data[index];
for(int i=index+1;i<size;i++)
data[i-1]=data[i];
size--;
return ret;
}
//删除头结点
public E removeFirst(){
return remove(0);
}
//删除尾节点
public E removeLast(){
return remove(size-1);
}
//删除元素
public void removeElement(E e){
int index=find(e);
if(index!=-1)
remove(index);
}
@Override
public 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();
}
}
JAVA数据结构--Array数组实现的更多相关文章
- java数据结构--array与ArrayList的区别
ArrayList 内部是由一个array 实现的. 如果你知道array 和 ArrayList 的相似点和不同点,就可以选择什么时候用array 或者使用ArrayList , array 提供 ...
- JAVA数据结构之数组
接下来的几篇博文会在最近仔细研读数据结构与算法的书籍后会摘录一些要点和总结一些自己的心得体会,帮助大家更深入地理解java中的数据结构和一些基本的算法,同时巩固自己数据结构和算法这些最基础的计算机知识 ...
- 【Java】Array 数组
概述 数组是多个相同数据类型按一定顺序排列的一组数据 特点: - 数据类型相同!! - 长度固定!! 构成数组的几个要素 - 数组名称 - 下标,又称索引 - 元素 - 数组长度 数组是一种引用类型, ...
- Java 数据结构之数组
public class Arrays { //创建一个Integer空数组 public static Integer[] player=null; //添加球员号码 pri ...
- Java Array数组使用详解
本文主要讲解java中array数组使用,包含堆.栈内存分配及区别 1.动态初始化 package myArray; /* * 堆:存储的是new出来的东西,实体,对象 * A 每个对象都有地址值 * ...
- Java数据结构和算法(二)——数组
上篇博客我们简单介绍了数据结构和算法的概念,对此模糊很正常,后面会慢慢通过具体的实例来介绍.本篇博客我们介绍数据结构的鼻祖——数组,可以说数组几乎能表示一切的数据结构,在每一门编程语言中,数组都是重要 ...
- Java数据结构和算法 - 数组
Q: 数组的创建? A: Java中有两种数据类型,基本类型和对象类型,在许多编程语言中(甚至面向对象语言C++),数组也是基本类型.但在Java中把数组当做对象来看.因此在创建数组时,必须使用new ...
- Java数据结构和算法(二):数组
上篇博客我们简单介绍了数据结构和算法的概念,对此模糊很正常,后面会慢慢通过具体的实例来介绍.本篇博客我们介绍数据结构的鼻祖——数组,可以说数组几乎能表示一切的数据结构,在每一门编程语言中,数组都是重要 ...
- Java数据结构和算法之数组与简单排序
一.数组于简单排序 数组 数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信 ...
随机推荐
- npm 更改为淘宝镜像的方法
1.命令行临时使用指定镜像(淘宝) npm --registry https://registry.npm.taobao.org install express 2.命令行永久更改使用指定镜像(淘宝) ...
- iPhone X的UI设计技巧
以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 果粉们翘首以待的iPhone X终于开始预售了!同样满怀期待的还有设计师和开发人员,他们将在iPho ...
- MVC5数据库迁移命令!
首先数据库迁移在上下文里设置要设置成为CreateDatabaseIfNotExists, 然后在Nuget控制平台输入命令 在“程序包管理器控制台”窗口中输入:Enable-Migrations ...
- ramfs和tmpfs的区别
简介 ramfs和tmpfs是在内存上建立的文件系统(Filesystem).其优点是读写速度很快,但存在掉电丢失的风险.如果一个进程的性能瓶颈是硬盘的读写,那么可以考虑在ramfs或tmpfs上进行 ...
- medusa爆破路由
medusa –M http -h 192.168.10.1 -u admin -P /usr/share/wfuzz/ wordlist/fuzzdb/wordlists-user-passwd/p ...
- 还原bak到localdb的问题:The logical database file cannot be found ldf
主要环境相关因素:win7,ms sql 2012,ms localdb,msms 2012. 步骤: 1,让DBA给一个bak文件到本地来做测试,DBA按自己的工作流程得到bak文件. 2,在msm ...
- append2 给append 添加回调方法
$.fn.append2 = function(html, callback) { var originalHtmlLength = $("body").html().length ...
- QPS的计算
QPS = req/sec = 请求数/秒 Q:如何根据日志查看一个服务的qps A: 一般access.log是记录请求的日志,tail -f XXX.access.log ,可发现格式如下: 前 ...
- java随笔——HashMap与红黑树
前言: hashmap是一种很常用的数据结构,其使用方便快捷,接下来笔者将给大家深入解析这个数据结构,让大家能在用的时候知其然,也知其所以然. 一.Map 首先,从最基本的讲起,我们先来认识一下map ...
- BitAdminCore框架更新日志20180524
20180524更新内容 本次更新两个内容,一是增加windows service,二是增加邮件发送功能. windows service windows service用于定期跑服务,网上有一些提供 ...