Java实现顺序表
利用顺序存储结构表示的顺序表称为顺序表。
它用一组连续的地址存储单元一次存放线性表中的数据元素。
顺序表的实现是数据结构中最简单的一种。
由于代码中已经有详细注释,代码外不再阐述。
下次再陈上关于顺序表的循环队列和顺序栈的代码。
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实现顺序表的更多相关文章
- java实现顺序表、链表、栈 (x)->{持续更新}
1.java实现节点 /** * 节点 * @luminous-xin * @param <T> */ public class Node<T> { T data; Node& ...
- 线性表 及Java实现 顺序表、链表、栈、队列
数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...
- 数据结构——Java实现顺序表
一.分析 什么是顺序表?顺序表是指用一组地址连续的存储单元依次存储各个元素,使得在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中的线性表.一个标准的顺序表需要实现以下基本操作: 1.初始化顺序表 ...
- (java实现)顺序表-ArrayList
什么是顺序表 顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构. 在使用顺序表存储数据前,会先申请一段连续的内存空间(即数组),然后把数组依次存入 ...
- Java算法 -- 顺序表
顺序表结构定义:就是按照顺序存储方式存储的线性表 1.定义一个顺序表的基本数据: static final int MAXLEN = 100; Class Student{ private Strin ...
- Java数据结构——顺序表
一个线性表是由n(n≥0)个数据元素所构成的有限序列. 线性表逻辑地表示为:(a0,a1,…,an-1).其中,n为线性表的长度,n=0时为空表.i为ai在线性表中的位序号. 存储结构:1.顺序存储, ...
- Java: 实现顺序表和单链表的快速排序
快速排序 快速排序原理 快速排序(Quick Sort)的基本思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可对这两部分记录继续进行排序,以达到 ...
- [Java算法分析与设计]--线性结构与顺序表(List)的实现应用
说到线性结构,我们应该立马能够在脑子里蹦出"Array数组"这个词.在Java当中,数组和对象区别基本数据类型存放在堆当中.它是一连串同类型数据存放的一个整体.通常我们定义的方式为 ...
- 数据结构顺序表Java实现
Java实现顺序表算法:1:首先我们需要定义我们的接口,关于顺序表的一些基本的操作:顺序表中的操作都有增删改查. //List接口 public interface IList { //返回线性表的大 ...
随机推荐
- canvas绘制百分比圆环进度条
开发项目,PM会跟踪项目进度:完成某个事情,也可以设置一个完成的进度. 这里用canvas绘制一个简单百分比圆环进度条. 看下效果: 1. 动画方式 2. 静默方式 // 贴上代码,仅供参考 ...
- 【SQL】Oracle的PL/SQL语法及其拓展数据类型总结
PL/SQL语法 PL/SQL程序由三部分组成,声明部分.执行部分.异常处理部分. 模板: DECLARE /*变量声明*/ BEGIN /*程序主体*/ EXCEPTION /*异常处理部分*/ E ...
- VMware workstation 10.0的永久key
MA491-6NL5Q-AZAM0-ZH0N2-AAJ5A5A6F6-88247-XZH59-HL0Q6-8CD2VHF6QX-20187-2Z391-522NH-9AELT5F29M-48312-8 ...
- 1号店Interview小结
三大范式: 为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的总结.要想设计一个结构合理的关系型数据库,必须满足一定的范 ...
- [Android 4.4.4] 泛泰A870 通过刷第三版 Mokee4.4.4 KTU84P 20140626 RC2.1 by syhost
主题及注意事项请访问以前的版本: http://blog.csdn.net/syhost/article/details/29931291 此RC2.1版比RC2.0改进的地方: 1. Mokee本身 ...
- Java设计模式(三)-修饰模式
我们都知道.能够使用两种方式给一个类或者对象加入行为. 一是使用继承.继承是给一个类加入行为的比較有效的途径.通过使用继承,能够使得子类在拥有自身方法的同一时候,还能够拥有父类的方法.可是使用继承是静 ...
- 简单QT应用了可实现手动布局QT应用
新建QT项目 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/4 ...
- Android使用HttpURLConnection下载图片
讲到http就必须要了解URI和URL URI (uniform resource identifier)统一资源标志符: URL(uniform resource location )统一资源定位符 ...
- Android 布局管理器
为了更好地管理Android应用程序的用户界面组件,Android它提供了一个布局管理.通过使用布局管理,Android具有良好的平台无关的图形用户界面应用程序. 平时,推荐布局管理器来管理分布式组件 ...
- Visual Studio 2015使用EF6的ModelFirst模式添加实体数据模型缺少tt文件问题
在看实体框架 (EF) 入门的时候,当按照样例做到ModelFirst的时候出问题了 这是使用vs2015新建的实体数据模型 这是官网样例 对比样例截图,会发现里面缺少.tt的文件.最重要的是最终代码 ...