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 { //返回线性表的大 ...
随机推荐
- ./startup.sh: Permission denied
今天在Linux上部署项目,之前报过这个错误,通过下面方式攻克了.如今发出来备份一下: LINUX权限-bash: ./startup.sh: Permission denied 运行./startu ...
- codeforces #550E Brackets in Implications 结构体
标题效果:定义集合中{0,1}\{0,1\}上的运算符"→\rightarrow",定义例如以下: 0→0=10\rightarrow 0=1 0→1=10\rightarrow ...
- javascript倒置再次被否定作用
于javascript位反然后可以转换为浮点塑料,而不是更有效parseInt近两倍 var start = new Date().getTime(); for (var i = 0; i < ...
- hdu4888 Redraw Beautiful Drawings
14更多学校的第二个问题 网络流量 分别以行,列作为结点建图 i行表示的结点到j列表示的结点的流量便是(i, j)的值 跑遍最大流 若满流了便是有解 推断是否unique 就是在残余网络 ...
- WCF分布式事务(EF)
才说分布式事务,首先,了解一下什么是交易. 事务有四个特性:ACID A是Atomicity,原子性.一个事务往往涉及到很多的子操作,原子性则保证这些子操作要么都做,要么都不做,而不至于出现事务的部分 ...
- js 性能优化整理之 惰性载入
跨检查浏览器特性,解决不同浏览器的兼容问题. 例如,我们最常见的为 dom 节点添加事件的函数 function addEvent(element,type,handler){ if(element. ...
- Java 新特性(2) - JDK6 新特性
http://freesea.iteye.com/blog/160133 JDK6的新特性之一_Desktop类和SystemTray类 JDK6的新特性之二_使用JAXB2来实现对象与XML之间的映 ...
- 动态规划,而已! CodeForces 433B - Kuriyama Mirai's Stones
Kuriyama Mirai has killed many monsters and got many (namely n) stones. She numbers the stones from ...
- poj3671Dining Cows(DP)
主题链接: 啊哈哈,点我点我 题意: 给一个仅仅含有1.2的序列,如何变换n次使序列成为一个非递减的序列,而且使n最小. 思路: 这道题的数据范围是50000,则肯定承受不了n方的复杂度.所以 仅仅能 ...
- Java回合阵列List
package com.mine.practice.arrtolist; import java.util.ArrayList; import java.util.Arrays; import jav ...