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 { //返回线性表的大 ...
随机推荐
- hdu1004----用java链表实现
Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- 纯 Swift 封装的 SQLite 框架:SQLite.swift
SQLite.swift 是一个使用纯 Swift 语言封装 SQLite3 的操作框架. 特性: 简单的查询和参数绑定接口 安全.自动类型数据访问 隐式提交和回滚接口 开发者友好的错误处理和调试 文 ...
- ProgressMonitorInputStream
Swing类包中有一个很有用的流过滤器,ProgressMonitorInputStream,它可以自动弹出一个对话框,监视已经读取了多少流. 进度监视器流使用InputStream类的availab ...
- Dapper的使用
轻量型ORM框架Dapper的使用 /// <summary> /// 查询操作 /// </summary> /// <typeparam name="T&q ...
- 【MySQL案件】ERROR 1665 (HY000)
转载请注明: http://blog.csdn.net/jason_asia/article/details/36240815 1.1.1. ERROR 1665 (HY000) [环境的叙述性说明] ...
- WebAPI 用ActionFilterAttribute实现token令牌验证与对Action的权限控制
.NET WebAPI 用ActionFilterAttribute实现token令牌验证与对Action的权限控制 项目背景是一个社区类的APP(求轻吐...),博主主要负责后台业务及接口.以前没玩 ...
- MVC中的Views下面的视图放到Views文件夹外
实战:把ASP.NET MVC中的Views下面的视图放到Views文件夹外 园子里写的文章的都是把控制器从传统的项目中的Controllers拿出来单独放,但很少几乎没有把视图从Views拿出去 ...
- Balanced Binary Tree(Java代码没有结束,是什么原因???)
Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...
- 远程访问mysql(转)
GRANT ALL PRIVILEGES ON *.* TO '<username>'@'<remote addr or %(for all ip addr)>'IDENTIF ...
- BZOJ 3505 CQOI 2014 数三角形 数学
标题效果:到m*n该网络格,问:有网络格是一个三角形的顶点的数目. 思维:数学.首先计算所有三个相同的,不.然后,在上线的一个点失去了三个点是其中.需要注意的是,答案开放long long. CODE ...