java实现线性表
/**
* 线性表
* @author zyyt
*
*/
public class LinkList {//框架级别的大师级
private int size;//链表的实际大小
private Object[] elementData ;//存储元素的数组
private final static int DEFAULT_SIZE = 10;//默认链表的容量
private final Object[] DEFAULT_EMPTY = {};//空数组
public LinkList() throws Exception{//构造方法初始化LinkList
this(DEFAULT_SIZE);
}
public LinkList(int initCapicity) throws Exception{//构造方法初始化LinkList
if(initCapicity <0){//initCapicity 如果容量大小小于0 则抛出异常
System.out.println("initCapicity" + "需要大于等于0");
throw new Exception();
}
if(0 == initCapicity){//如果initCapicity为0 则把空数组 赋值给elementData
elementData = DEFAULT_EMPTY;
}else{
elementData = new Object[initCapicity];//初始化elementData
}
}
//顺序链表中添加数据
public synchronized void add(Object obj){
/*
* 判断链表的长度与数组的大小比较,来判断是否需要扩容
*/
if(size == elementData.length ){
Object[] array = new Object[elementData.length * 2 + 1];
System.arraycopy(elementData, 0, array, 0, size);
elementData = array;
}
elementData[size++] = obj;
}
//链表中插入数据
public synchronized void set(int index,Object o){
if(elementData.length < size + 1){
Object[] array = new Object[elementData.length * 2 + 1];
System.arraycopy(elementData, 0, array, 0, size);
elementData = array;
}
for(int i = size - 1 ;i>=index;i--){
elementData[i+1] = elementData[i];
}
elementData[index] = o;
size++;
}
//获取所在索引的元素
public Object get(int index) throws Exception{
ensureIndexNotOutOfBounds(index);
return elementData[index];
}
//判断这个线性表是否为空
public boolean isEmpty(){
return size == 0;
}
//获取线性表的元素个数
public int size(){
return size;
}
//链表删除一个元素
public synchronized void remove(int index) throws Exception{
ensureIndexNotOutOfBounds(index);
System.arraycopy(elementData, index + 1, elementData, index , size - index - 1);
size--;
}
//确保index的大小 在数组elementData的范围内
private void ensureIndexNotOutOfBounds(int index) throws Exception{
if(index < 0 || index >= size){
System.out.println(index + "小于0 或者"+index + "大于" + size);
throw new Exception();
}
}
//查看线性表中是否包含某个元素
public boolean contain(Object o) throws Exception{
return indexOf(o) >= 0;
}
//线性表中添加一个线性表
public synchronized void add(LinkList list) throws Exception{
if(list != null){
for(int i=0;i<list.size;i++){
if(this.contain(list.get(i)) == false){
elementData[size++] = list.get(i);
}
}
}
}
//获取一个元素在链表中第一次出现的位置
public int indexOf(Object o) throws Exception{
int result = -1;
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
result = i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
result = i;
}
return result;
}
//删除链表中包含另外一个链表的元素
public synchronized void remove(LinkList list) throws Exception{
if(list != null){
for(int i=0;i<list.size;i++){
if(this.contain(list.get(i))){
this.remove(this.indexOf(list.get(i)));
size--;
}
}
}
}
//获取迭代器
public Iterator iterator(){
return new Iterator();
}
//迭代器类
public class Iterator {
int cousor = -1;
//判断是否还有下一个对象
public boolean hasNext(){
return cousor + 1 < size;
}
//获取下一个对象
public Object next(){
return elementData[++cousor];
}
}
}
java实现线性表的更多相关文章
- Java数据结构-线性表之顺序表ArrayList
线性表的顺序存储结构.也称为顺序表.指用一段连续的存储单元依次存储线性表中的数据元素. 依据顺序表的特性,我们用数组来实现顺序表,以下是我通过数组实现的Java版本号的顺序表. package com ...
- Java数据结构-线性表之单链表LinkedList
线性表的链式存储结构,也称之为链式表,链表:链表的存储单元能够连续也能够不连续. 链表中的节点包括数据域和指针域.数据域为存储数据元素信息的域,指针域为存储直接后继位置(一般称为指针)的域. 注意一个 ...
- java资料——线性表(转)
线性表 线性表(亦作顺序表)是最基本.最简单.也是最常用的一种数据结构.线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的.线性表的逻辑结构简单, ...
- Java实现线性表-顺序表示和链式表示
顺序表示和链式表示的比较: 1.读写方式:顺序表可以顺序存取,也可以随机存取:链表只能从表头顺序存取元素: 2.逻辑结构与物理结构:顺序存储时,逻辑上相邻的元素其对应的物理存储位置也相邻:链式存储时, ...
- Java数据结构-线性表之静态链表
静态链表的定义: 节点由一个一维数组和一个指针域组成,数组用来存放数据元素,而指针域里面的指针(又称游标)用来指向下一个节点的数组下标. 这种链表称之为静态链表. 链表中的数组第一个和最后一个位置须要 ...
- Java线性表的排序
Java线性表的排序 ——@梁WP 前言:刚才在弄JDBC的时候,忽然觉得order-by用太多了没新鲜感,我的第六感告诉我java有对线性表排序的封装,然后在eclipse里随便按了一下“.” ,哈 ...
- 数据结构(Java描述)之线性表
基础概念 数据结构:是相互之间存在一种或多种关系的数据元素的集合. 逻辑结构和物理结构 关于数据结构,我们可以从逻辑结构和物理结构这两个维度去描述 逻辑结构是数据对象中数据元素之间的关系,是从逻辑意义 ...
- Java Se :线性表
Java的集合框架分为两个系列,Collection和Map系列.在大学期间,学习数据结构时,好像学习了线性表.非线性表.树,哎,都给忘了.其实,在Collection系列内部又可以分为线性表.集合两 ...
- Java数据结构之线性表(2)
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
随机推荐
- Log4j、Log4j 2、Logback、SFL4J、JUL、JCL的比较
Log4j.Log4j 2.Logback.SFL4J.JUL.JCL的比较 之前就知道有好几种日志框架,但是一直都是听别人讲,在什么时候该用何种logger,哪种logger比较好……一直对Log4 ...
- RCP:如何把Preferences中的项从一个类别移动到另一个类别 2013-08-23 18:59 by Binhua Liu,
RCP:如何把Preferences中的项从一个类别移动到另一个类别 前言 很久没写文章了,准备写一系列关于Eclipse RCP /Plugin的文章. 这些文章都是trouble shooting ...
- linux下安装NPM管理工具
根据”挖一下“开发需要,选择nodejs实现异步IO,目的是为了解决服务器卡死导致无法处理后续的http请求.看了花瓣的架构视频讲座,才决定这么做的,挺有道理的. 安装nodejs很顺利,下载源码包, ...
- FormData可实现异步传输二进制文件(即异步文件上传)
XMLHttpRequest Level 2 添加了一个新的接口——FormData.它能使现在的AJAX交互更加简单.之前的AJAX在上传前,需要将表单的数据序列化.与普通的 Ajax 相比,使用 ...
- ubuntu 安装jdk7总结
ubuntu 安装jdk7,现在来总结一下: 第一步:下载jdk-7u25-linux-x64.tar.gz 直接在ORACLE的官网中下载就可以: http://download.oracle.co ...
- struts2标签库使用小结
之前的demo中用了一些struts2标签,用的是struts2.2.1.1. Struts2的标签常常和OGNL(图对象导航语言)一起使用.有几点总结如下: [引用请注明出处:http://blog ...
- nginx健康检查模块源码分析
nginx健康检查模块 本文所说的nginx健康检查模块是指nginx_upstream_check_module模块.nginx_upstream_check_module模块是Taobao定制的用 ...
- 用ajax对数据进行查看人员信息
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- java nio io模型
I/O模型 在开始NIO的学习之前,先对I/O的模型有一个理解,这对NIO的学习是绝对有好处的.我画一张图,简单表示一下数据从外部磁盘向运行中进程的内存区域移动的过程: 这张图片明显忽略了很多细节,只 ...
- ios 获取融云token
聊聊iOS做融云时重要的一步,获取token.token应该从服务端拿这样你的appSecret就不容易暴露.但有时开发需要也要自己先获取一个token也是可以的.请求方式有很多随你便喽,C哥(&qu ...