利用顺序存储结构表示的顺序表称为顺序表。

  它用一组连续的地址存储单元一次存放线性表中的数据元素。

顺序表的实现是数据结构中最简单的一种。

由于代码中已经有详细注释,代码外不再阐述。

下次再陈上关于顺序表的循环队列和顺序栈的代码。

 package 线性表.顺序表.普通数组;

 /**
* ArrayList 顺序表
* JAVA 3.0
* 抛异常处理错误的下标
* 使用泛型,当然如果要替换成Object也是可以替换
*/
public class ArrayList<E> { private int capacity; //数组的总容量
private int current; //当前最后一个数组元素的下一个元素下标,从0开始,也是长度
private E[] data = null; //所有数据 public ArrayList(){ this(10);
} public ArrayList(int initialSize){ init(initialSize);
}
/**
* 初始化数组
*/
@SuppressWarnings("unchecked")
public void init(int initialSize){ current = 0;
data = (E[])new Object[initialSize];
capacity = initialSize;
}
/**
* 数组末尾插入元素*/
public void add(E e){ ensureCapacity();
data[current] = e;
current++; }
/**
* 在数组中插入元素*/
public void insert(int index, E e){ validateIndex(index);
ensureCapacity();
for(int i=current;i>=index;i--){ data[i+1] = data[i];
}
data[index] = e;
current++;
}
/**
* 判断是否需要扩展数组
* 如果需要将扩展为原来的两倍
*/
@SuppressWarnings("unchecked")
private void ensureCapacity(){ if(current == capacity){ capacity = capacity * 2;
E[] newData = (E[])new Object[capacity];
for(int index = 0; index < current; ++index) {
newData[index] = data[index];
}
data = newData;
}
} /**
* 删除某个已经存在的对象
* 如果T在数组中,则删除成功返回true,否则无这个元素返回false
*/
public boolean remove(E e){ for(int i=0;i<current;i++){ if(data[i].equals(e)){ remove(i);
return true;
}
}
return false;
}
/**
* 删除特定下标的数组
* @param index
*/
public void remove(int index){ validateIndex(index);
for(int i=index;i<current;i++){ data[i] = data[i+1];
}
data[current] = null;
current--;
}
/**
* 修改下标为index的值*/
public void set(int index, E e){ validateIndex(index);
data[index] = e;
}
/**
* 获取下标为index的值
*/
public E get(int index){ validateIndex(index);
return data[index];
}
/**
* 获取数组已使用的个数
*/
public int size(){ return current;
}
/**
* 销毁数组所有元素
*/
public void clear(){ // Arrays.fill(data, null); 可以替代下面的for循环
for(int i=0;i<current;i++){ data[i] = null;
}
capacity = 0;
current = 0;
}
/**
* 判断数组是否为空
*/
public boolean isEmpty(){ return current==0;
}
/**
* 打印结构
*/
public String toString() { String str = "[ ";
for (Object o : data) {
if (o != null) {
str += o + " ";
}
}
str += "]";
return str;
}
/**    * 判断index 是否越界   */
private void validateIndex(int index) { if (index < 0 || index >= current) {
throw new IndexOutOfBoundsException("无效的下标:" + index);
}
}

Java实现顺序表的更多相关文章

  1. java实现顺序表、链表、栈 (x)->{持续更新}

    1.java实现节点 /** * 节点 * @luminous-xin * @param <T> */ public class Node<T> { T data; Node& ...

  2. 线性表 及Java实现 顺序表、链表、栈、队列

    数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...

  3. 数据结构——Java实现顺序表

    一.分析 什么是顺序表?顺序表是指用一组地址连续的存储单元依次存储各个元素,使得在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中的线性表.一个标准的顺序表需要实现以下基本操作: 1.初始化顺序表 ...

  4. (java实现)顺序表-ArrayList

    什么是顺序表 顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构. 在使用顺序表存储数据前,会先申请一段连续的内存空间(即数组),然后把数组依次存入 ...

  5. Java算法 -- 顺序表

    顺序表结构定义:就是按照顺序存储方式存储的线性表 1.定义一个顺序表的基本数据: static final int MAXLEN = 100; Class Student{ private Strin ...

  6. Java数据结构——顺序表

    一个线性表是由n(n≥0)个数据元素所构成的有限序列. 线性表逻辑地表示为:(a0,a1,…,an-1).其中,n为线性表的长度,n=0时为空表.i为ai在线性表中的位序号. 存储结构:1.顺序存储, ...

  7. Java: 实现顺序表和单链表的快速排序

    快速排序 快速排序原理 快速排序(Quick Sort)的基本思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可对这两部分记录继续进行排序,以达到 ...

  8. [Java算法分析与设计]--线性结构与顺序表(List)的实现应用

    说到线性结构,我们应该立马能够在脑子里蹦出"Array数组"这个词.在Java当中,数组和对象区别基本数据类型存放在堆当中.它是一连串同类型数据存放的一个整体.通常我们定义的方式为 ...

  9. 数据结构顺序表Java实现

    Java实现顺序表算法:1:首先我们需要定义我们的接口,关于顺序表的一些基本的操作:顺序表中的操作都有增删改查. //List接口 public interface IList { //返回线性表的大 ...

随机推荐

  1. Mean Shift简介

    Mean Shift,我们 翻译“平均漂移”. 其集群,图像平滑. 图像分割和跟踪已广泛应用.因为我现在认为追踪,因此推出Mean Shift该方法用于目标跟踪.从而MeanShift較全面的介绍. ...

  2. poj 3237 Tree(树链拆分)

    题目链接:poj 3237 Tree 题目大意:给定一棵树,三种操作: CHANGE i v:将i节点权值变为v NEGATE a b:将ab路径上全部节点的权值变为相反数 QUERY a b:查询a ...

  3. 【转】Directx11 HelloWorld之HLSL的Effect框架的使用

    最近尝试用了下Directx下的Effect框架,作为一初学者初学者,说下为什么我们要使用Effect框架及其好处吧. 首先Effect最大好处的就是简单,使得编写Shader绘制的程序工作量大大下降 ...

  4. 终结者单身——setAccessible(true)

    首先看一下"传说"Singleton模式 package go.derek; public class Singleton{ public static int times; pr ...

  5. Java的socket服务UDP协议

    练习1 接收类 package com.socket.demo; import java.io.IOException; import java.net.DatagramPacket; import ...

  6. poj2524

    说来惭愧啊..现在才会并查集.我竟然给我妈妈讲明白并查集怎么回事了- - #define _CRT_SECURE_NO_WARNINGS #include <iostream> using ...

  7. 理解git经常使用命令原理

    git不同于类似SVN这样的版本号管理系统,尽管熟悉经常使用的操作就能够满足大部分需求,但为了在遇到麻烦时不至于靠蛮力去尝试,了解git的原理还是非常有必要. 文件 通过git管理的文件版本号信息所有 ...

  8. 具体评论ExpandableListView显示和查询模仿QQ组列表用户信息

    在我们的项目开发过程,用户通常拥有的信息包,通过组来显示用户的信息,一时候通过一定的查询条件来显示查询后的相关用户信息.而且通过颜色选择器来设置列表信息的背景颜色. 当中借鉴xiaanming:htt ...

  9. 熟人Dubbo 系列1-Dubbo什么

    Dubbo阿里巴巴内部SOA治理方案和服务的核心框架.每天2000+ 个服务提供3,000,000,000+ 次訪问量支持,并被广泛应用于阿里巴巴集团的各成员网站.Dubbo自2011年开源后,已被很 ...

  10. Dev GridView RowCellClick活动MouseDown事件

    GridView可编辑.在无声的思想左键点击"进入编辑". 将GridView的OptionsColumn.AllowEdit至false离开时触发RowCellClick. 但有 ...