我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java如何实现基于数组的表

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java如何实现基于数组的表

这篇文章将为大家详细讲解有关Java如何实现基于数组的表,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

没看过 其他语言版的数据结构,但觉得java的实现方法很巧妙--用类和对象来实现.基于数组的表,思想很简单就是定义一个类用来存储一组数据,我定义的是ArrayListClass类,在类中定义用来操作数组的方法.其实就是 这么简单,但具体操作起来就会遇到很多麻烦了!

我们这个ArrayListClass类中首先应该包括一个数组型的域list,用来存放数据,这样放在同一数组中数据之间就产生了位置上的联系,使对数据的操作便的简单.然而这个数组到底是什么数据类型的,我们期望这个表能用于所有的数据类型,我们不能将他单纯的固定成某一种.所以我们必须将这个数据普通化,解决的办法就是定义一个类,作为所有数据类型的超类.看这个DataElement:

public abstract class DataElement { public abstract boolean equals(DataElement otherElement); public abstract int compareTo(DataElement otherElement); public abstract void makeCopy(DataElement otherElement); public abstract DataElement getCopy(); }

将他定义成为抽象的,再在定义其他数据类型时继承并实现它,我定义了两个数据类型IntElement和StringElement:

IntElement: public class IntElement extends DataElement { protected int num; //constructors public IntElement(){ num=0; } public IntElement(int number){ num=number; } public IntElement(IntElement otherElement){ num=otherElement.num; } ///get-set Methods public void setNum(int number){ num=number; } public int getNum(){ return num; }  public boolean equals(DataElement otherElement) { // TODO Auto-generated method stub IntElement newe=(IntElement)otherElement; return (this.num==newe.num); }  public int compareTo(DataElement otherElement) { // TODO Auto-generated method stub IntElement newe=(IntElement)otherElement; if(this.num==newe.num) return 0; else if(this.num>newe.num) return 1; else return -1; }  public void makeCopy(DataElement otherElement) { // TODO Auto-generated method stub IntElement newe=(IntElement)otherElement; this.num=newe.num; }  public DataElement getCopy() { // TODO Auto-generated method stub IntElement newElement=new IntElement(); newElement.num=this.num; return newElement; } public String toString(){ return String.valueOf(num); } } StringElement: public class StringElement extends DataElement {  private String str; //constructors public StringElement() { str=null; } public StringElement(String string){ str=string; } public StringElement(StringElement otherElement){ str=otherElement.str; } //get-set Methods public void setStr(String string){ str=string; } public String getStr(){ return str; }  public boolean equals(DataElement otherElement) { // TODO Auto-generated method stub StringElement newe=(StringElement)otherElement; return (str==newe.str); }  public int compareTo(DataElement otherElement) { // TODO Auto-generated method stub StringElement newe=(StringElement)otherElement; return (str.compareTo(newe.str)); }  public void makeCopy(DataElement otherElement) { // TODO Auto-generated method stub StringElement newe=(StringElement)otherElement; str=newe.str; }  public DataElement getCopy() { // TODO Auto-generated method stub StringElement othere=new StringElement(); othere.str=str; return othere; } public String toString(){ return str; } }

已经定义好了数据类型,所以list的数据类型我们就可以定义为DateElement[]了,这样就可以包括所以你想要的了,只要你在用的时候定义一个DataElement的子类就行了,这正是java继承的精髓所在.我们接着定义ArrayListClass类:

protected int length; protected int maxSize; protected DataElement[] list;这就是它的所有域了.

接下来就是它的方法了,我们对表的操作应该有很多种,比如插入、查询、删减等等,我们要逐个的实现,具体方法不再赘述,且看最后完成代码

public abstract class ArrayListClass { //fields protected int length; protected int maxSize; protected DataElement[] list; //defalt constructors public ArrayListClass(){ length=0; maxSize=100; list=new DataElement[maxSize]; } //constructors public ArrayListClass(int size){ if(size<=0){ System.err.println("The arry size must be positive.Creating an array of size 100."); maxSize=100; } else maxSize=size; length=0; list=new DataElement[maxSize]; } public ArrayListClass(ArrayListClass otherList){ maxSize=otherList.maxSize; length=otherList.length; list=new DataElement[maxSize]; for(int i=0;i list=otherList.list.getCopy(); } } //methods public boolean isEmpty(){ return (length==0); } public boolean isFull(){ return (length==maxSize); } public int listSize(){ return length; } public int maxListSize(){ return maxSize; } public void print(){ for(int i=0;i System.out.print(list+" "); } System.out.println(); } public boolean isItemAtEqual(int location,DataElement item){ return(list[location].equals(item)); } public void insrtAt(int location,DataElement insertItem){ if(location<0||location>+maxSize){ System.out.println("The position of the item to be inserted is out of range!!"); } else if(length>=maxSize) System.err.println("Can’t insert in a full list!!"); else{ for(int i=length;i>location;i--){ list=list[i-1]; } list[location]=insertItem.getCopy(); length++; } } public void insertEnd(DataElement insertItem){ if(length>=maxSize){ System.err.println("Can’t insert in a full list!!"); } else{ list[length]=insertItem.getCopy(); length++; } } public void removeAt(int location){ if(location<0||location>=length){ System.err.println("The location you want to remove is out of range!!"); } else{ for(int i=location;i list=list[i+1]; } list[length]=null; length--; } } public DataElement retrieveAt(int location){ if(location<0||location>=length){ System.err.println("The location of item to be retrieved is out of range!!"); return null; } else{ return list[location].getCopy(); } } public void replacAt(int location,DataElement repItem){ if(location<0||location>=length) System.out.println("The position of item to be replaced is out of range!!"); else list[location]=repItem.getCopy(); } public void clearList(){ for(int i=0;i list=null; } length=0; System.gc(); } public void copyList(ArrayListClass otherList){ if(this!=otherList){ for(int i=0;i list=null; System.gc(); maxSize=otherList.maxSize; length=otherList.length; list=new DataElement[maxSize]; for(int j=0;j list[j]=otherList.list[j].getCopy(); } } public abstract int seqSearch(DataElement seqItem); public abstract void insert(DataElement insertItem); public abstract void remove(DataElement removeItem); }

看到代码的最后你回发现这个类其实是一个抽象类,为什么要这样定义呢?之所以这样我们是为了针对不同是类型:顺序表和非顺序表.不难想象他们的一些方法是存在差异的,先看一下非顺序表:

public class UnorderedArrayList extends ArrayListClass{  public UnorderedArrayList() { super(); // TODO Auto-generated constructor stub }  public int seqSearch(DataElement seqItem) { // TODO Auto-generated method stub int loc; boolean found=false; for(loc=0;loc if(list[loc].equals(seqItem)) { found=true; break; } if(found) return loc; else return -1; }  public void insert(DataElement insertItem) { // TODO Auto-generated method stub int loc; if(length==0) list[length++]=insertItem.getCopy(); else if(length==maxSize) System.err.println("Can’t insert in a full list!!"); else{ loc=seqSearch(insertItem); if(loc==-1) list[length++]=insertItem.getCopy(); else System.err.println("The item to be inserted is allready in the list!!"); } }  public void remove(DataElement removeItem) { // TODO Auto-generated method stub int loc; if(length==0) System.err.println("Can’t delete from a empty list!!"); else{ loc=seqSearch(removeItem); if(loc!=-1) removeAt(loc); else System.err.println("The item to be deleted is not in the list!!"); } } }

关于“Java如何实现基于数组的表”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java如何实现基于数组的表

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java如何实现基于数组的表

这篇文章将为大家详细讲解有关Java如何实现基于数组的表,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。没看过 其他语言版的数据结构,但觉得java的实现方法很巧妙--用类和对象来实现.基于数组的表,思想很
2023-06-03

基于数组或链表实现Map的方法教程

本篇内容介绍了“基于数组或链表实现Map的方法教程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言JAVA中的Map主要就是将一个键和一个
2023-06-15

java中关于队列的数组和链表实现

队列的介绍队列是一种先进先出(FIFO)的线性的数据结构,队列的主要操作为入队和出队。队头:队列的出口端,队尾:队列的入口端,通常在数组中表示为最后入队元素的下一个位置。在用数组实现时,注意:若队头不断有元素出队,那么队列的可用空间就会变小,所以我们通常用循环
java中关于队列的数组和链表实现
2022-04-06

vue基于Teleport如何实现Modal组件

这篇文章将为大家详细讲解有关vue基于Teleport如何实现Modal组件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.认识Teleport像我们如果写Modal组件、Message组件、Loadi
2023-06-15

Apache如何实现基于组的访问控制

Apache可以通过使用基于组的访问控制模块来实现基于组的访问控制。其中,最常用的模块是mod_authz_groupfile模块和mod_authz_dbd模块。mod_authz_groupfile模块允许管理员使用一个简单的文本文件来
Apache如何实现基于组的访问控制
2024-07-05

如何使用Java数组和链表实现栈

小编给大家分享一下如何使用Java数组和链表实现栈,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、何为栈?栈(stack)又名堆栈,它是一种运算受限的线性表。限
2023-06-15

Java基于IDEA如何实现http编程

这篇文章主要介绍了Java基于IDEA如何实现http编程,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用
2023-06-14

MySQL基于java实现备份表操作

核心是mysqldump和Runtime 操作其实并不是很困难,创建一个进行备份操作的类,接收到备份调用后,标记该表正在备份,然后创建一个子线程进行备份操作。所需的配置信息是从配置文件读取的,也要注意在Windows和linux下路径问题。
2022-05-14

Java基于quasar如何实现协程池

这篇文章主要介绍了Java基于quasar如何实现协程池,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。业务场景:golang与swoole都拥抱了协程,在同任务并发数量下,协程可比线程多几倍。所以最近在查询java时了解
2023-07-02

基于Arrays.sort()和lambda表达式如何实现

小编给大家分享一下基于Arrays.sort()和lambda表达式如何实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Arrays.sort()和lambda
2023-06-22

基于Java SSM如何实现Excel数据批量导入

今天就跟大家聊聊有关基于Java SSM如何实现Excel数据批量导入,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。导入Maven依赖com
2023-06-21

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录