/**

* 线性表

* @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实现线性表的更多相关文章

  1. Java数据结构-线性表之顺序表ArrayList

    线性表的顺序存储结构.也称为顺序表.指用一段连续的存储单元依次存储线性表中的数据元素. 依据顺序表的特性,我们用数组来实现顺序表,以下是我通过数组实现的Java版本号的顺序表. package com ...

  2. Java数据结构-线性表之单链表LinkedList

    线性表的链式存储结构,也称之为链式表,链表:链表的存储单元能够连续也能够不连续. 链表中的节点包括数据域和指针域.数据域为存储数据元素信息的域,指针域为存储直接后继位置(一般称为指针)的域. 注意一个 ...

  3. java资料——线性表(转)

    线性表 线性表(亦作顺序表)是最基本.最简单.也是最常用的一种数据结构.线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的.线性表的逻辑结构简单, ...

  4. Java实现线性表-顺序表示和链式表示

    顺序表示和链式表示的比较: 1.读写方式:顺序表可以顺序存取,也可以随机存取:链表只能从表头顺序存取元素: 2.逻辑结构与物理结构:顺序存储时,逻辑上相邻的元素其对应的物理存储位置也相邻:链式存储时, ...

  5. Java数据结构-线性表之静态链表

    静态链表的定义: 节点由一个一维数组和一个指针域组成,数组用来存放数据元素,而指针域里面的指针(又称游标)用来指向下一个节点的数组下标. 这种链表称之为静态链表. 链表中的数组第一个和最后一个位置须要 ...

  6. Java线性表的排序

    Java线性表的排序 ——@梁WP 前言:刚才在弄JDBC的时候,忽然觉得order-by用太多了没新鲜感,我的第六感告诉我java有对线性表排序的封装,然后在eclipse里随便按了一下“.” ,哈 ...

  7. 数据结构(Java描述)之线性表

    基础概念 数据结构:是相互之间存在一种或多种关系的数据元素的集合. 逻辑结构和物理结构 关于数据结构,我们可以从逻辑结构和物理结构这两个维度去描述 逻辑结构是数据对象中数据元素之间的关系,是从逻辑意义 ...

  8. Java Se :线性表

    Java的集合框架分为两个系列,Collection和Map系列.在大学期间,学习数据结构时,好像学习了线性表.非线性表.树,哎,都给忘了.其实,在Collection系列内部又可以分为线性表.集合两 ...

  9. Java数据结构之线性表(2)

    从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...

随机推荐

  1. ASP.NET基础之HttpHandler学习

    ASP.NET基础之HttpHandler学习 经过前两篇[ASP.NET基础之HttpModule学习]和[ASP.NET基础之HttpContext学习]文章的学习我们对ASP.NET的基础内容有 ...

  2. 在MVC3中使用WebForm

    Mvc和WebForm一直是有争议的两个平台,园子里也有很多人写过这方面的文章,给我印象比较深的是去年的时候看过的两篇文章http://www.cnblogs.com/mikelij/archive/ ...

  3. .NET依托CLR进行的内存的管理

    看了http://www.cnblogs.com/liulun/p/3145351.html  不错,补习下相关技术.. 正文: .NET依托CLR进行的内存的管理 有了CLR 基本不需要担心.net ...

  4. map 类型

    map 是键-值对的集合.map 类型通常可理解为关联数组(associative array): 可使用键作为下标来获取一个值,正如内置数组类型一样.而关联的本质在于元素的值与某个特定的键相关联,而 ...

  5. VIM批量文件查找和替换

    使用vim时间不长,linux命令行下常用的文本编辑工具,所以需要掌握一些基本的用法.很多不会的不是百度就谷歌,总有你想要的答案. 1. 批量文件查找内容 vimgrep 比如在当前目录下查找带有“a ...

  6. C#中的集合类——HashTable

    HashTable 被称为键值对集合,类似于字典,根据key可以找到value 键值对对象[键]=值;键值对集合当中,键必须是唯一的,而值是可以重复的 1. HashTable的用法 //创建了一个键 ...

  7. 程序集和反射(C#)

    这里我又唠叨几句,大家在学习的时候,如看书或者看视频时觉得非常爽,因为感觉基本都看得懂也都挺容易的,其实看懂是一回事,你自己会动手做出来是一回事,自己能够说出来又是另一回事了.应该把学到的东西变成自己 ...

  8. 详解一下网络广告cpc、cpm、cpl、cpa、cps、cpr的计费方法是什么

    CPC(Cost per click)按照 广告 点击数 计费 ,限定一个IP在24小时内只能点击一次.CPM(Cost per mille)按照广告显示次数来计算广告费,可在短时间内为 网站 带来巨 ...

  9. 中国IT武林大会暨中国首席技术官2016年度人物颁奖盛典概况

    在"大众创业.万众创新"的互联网时代,深入实施创新驱动发展战略,建设创新型国家,必须大力推动"互联网+科技"的发展.由中国首席技术官联盟.CCTV证券频道< ...

  10. gridcontrol如何根据值来动态设置某一行的颜色

    应用场景:当我们使用devexpress gridcontrol wpf控件时.可要会要根据这一行要显示的值来设置相应的颜色 可以通过下面方法来实现 一.先定义一个style <local:Co ...