/**

* 线性表

* @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. SAX解析xml浅析

    SAX解析XML文件采用事件驱动的方式进行,也就是说,SAX是逐行扫描文件,遇到符合条件的设定条件后就会触发特定的事件,回调你写好的事件处理程序.使用SAX的优势在于其解析速度较快,占用内存较少(相对 ...

  2. [转]How to build a data storage and VM Server using comodity hardware and free software

    Source: http://learnandremember.blogspot.jp/2010_01_01_archive.html Requisites: 1) RAID protection f ...

  3. canvas 之刮刮卡

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Apple的通知

    Apple的通知 1. 本地通知 //取消原来的通知,可设可不设 [[UIApplication sharedApplication]cancelAllLocalNotifications]; //初 ...

  5. jquery简单封装

    对Raphael画图标的一个jquery简单封装 公司要做一个项目的demo,要求地图上可以插红旗,所以就用到了Raphael. 因为是个demo,所以地图就用了一张图片,效果如下: 所以为了更好的封 ...

  6. openbr on linuxmint13/ubuntu12.04/debian7 x64 facial recognition [Compile from source!!!]

    Openbr is a great project for facial detecting. System: linuxmint 13 x86_64 Face recognition,  motio ...

  7. python JSON API duckduckgo search engine 使用duckduckgo API 尝试搜索引擎

    The duckduckgo.com's search engine is very neat to use. Acutally it has many things to do with other ...

  8. Android 短信模块分析(三) MMS入口分析

    MMS入口分析:      在Mms中最重要的两个Activity,一个是conversationList(短信列表) ,另一个就是ComposeMessageActivity(单个对话或者短信).每 ...

  9. Solr之NamedList 简单介绍与实例解析

    大家都知道,Solr是一个基于Lucene高可配置的搜索服务器,大部分参数值以及相关优化等等都可以在solrconfig.xml中配置,那么就需要一个能够很快的进行解析和读取配置文件内容的数据结构,为 ...

  10. jprofiler8使用小贴士

    说明:本文的小贴士是针对jprofiler8的,其他版本上可能有不适用的地方 贴士一:使用jpenable监控,无需增加jvm参数和重启 贴士一:使用jpenable监控,无需增加jvm参数和重启 j ...