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)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信 ...
随机推荐
- bug解决思路
1.定位 2.往前看3段:如果有If判断,就重点看为什么会进入到该判断里面
- setitemdata 32位 or 64位
我用SetItemData 和GetItemData把数据库一条数据导入到CListctrl 32位下 程序都可以跑 GetItemData能得到自定义类数据 可以64位得不到?
- qt学习(二) buttong layout spinbox slider 示例
开启qt5 creator 新建项目 qt widgets 改写main.cpp #include "mainwindow.h" #include <QApplication ...
- Android应用程序的基本组件介绍
1.Activity和View Activity是Android应用中负责与用户交互的组件,它只能通过setContentView(View)来显示指定组件. View组件是所有UI控件.容器空间的基 ...
- http://4526621.blog.51cto.com/4516621/1343369
http://4526621.blog.51cto.com/4516621/1343369
- centos7 dubbokeeper安装
下载dubbokeeper源码 git clone https://github.com/dubboclub/dubbokeeper mysql 先执行install-mysql.sh 编译好 ...
- SQLServer函数 left()、charindex()、stuff()的使用
1.left() LEFT (<character_expression>, <integer_expression>) 返回character_expression 左起 ...
- 三大语言实例 (python,C/C++,Java)
Python3.5语言实例: #coding = utf-8 import sys def Sub_string(a,b): c=[0]*len(b) for i in range(len(a)): ...
- VM参数收集(部分)
VM参数收集 -verbose:gc 输出虚拟机中GC的详细情况 -Xms20M Heap初始容量为 20M -Xmx20M Heap最大容量为 20M -XX:+HeapDumpOnOutOfMem ...
- mysql5.7 column cannot be null
背景 独立测试环境安装了数据库,但安装的版本是mysql 5.7的版本,而研发用的是mysql5.6的版本,在执行某个数据库操作的提示,提示column “xxxx”cannot be null 问题 ...