数据结构之字符串ADT
2016-04-29 13:41
393 查看
一、前言:
在Java语言中,可以用两种方法表示ADT的规格说明:
a.ADT的规格说明用抽象类(Abstract Class Declaration)表示,ADT的实现用继承改抽象类的具体类声明(Concrete Class Declaration)表示。
b.ADT的规格说明用Java接口(interface)表示,ADT的实现用实现该接口的类表示。
二、示例:
字符串ADT规格说明:
字符串ADT实现:
在Java语言中,可以用两种方法表示ADT的规格说明:
a.ADT的规格说明用抽象类(Abstract Class Declaration)表示,ADT的实现用继承改抽象类的具体类声明(Concrete Class Declaration)表示。
b.ADT的规格说明用Java接口(interface)表示,ADT的实现用实现该接口的类表示。
二、示例:
字符串ADT规格说明:
package com.java.datastructure.mystring; public interface IMyString { public int length();//字符串长度 public char charAt(int index);//返回字符串中下标index所对应的字符 public boolean equals(IMyString myString);//比较两个字符串的内容是否一致 public int compareTo(IMyString myString);//比较两个字符串的大小 public MyString subString(int begin, int end);//截取字符串 public MyString concat(IMyString myString);//拼接字符串 }
字符串ADT实现:
package com.java.datastructure.mystring; public class MyString implements IMyString{ private char[] array; /** * 将其转换为java.lang.String对象 */ public String toString(){ return new String(array); } /** * 拼接字符串 * @param myString * @return MyString 拼接后的新字符串 */ public MyString concat(IMyString myString){ MyString ms = (MyString) myString; int len = array.length + ms.length(); char[] newArray = new char[len]; int i = 0, j = 0; while(j<array.length){ newArray[i++] = array[j++]; } j=0; while(j < ms.array.length){ newArray[i++] = ms.array[j++]; } return new MyString(newArray); } /** * 比较大小 * @param myString * @return 1 : 大 ; -1 :小 ;0 : 相等 */ public int compareTo(IMyString myString){ MyString ms = (MyString)myString; int self = array.length; int other = ms.length(); for(int i = 0; i < Math.min(self, other); i++){ int comp = array[i] - ms.array[i]; if(comp!=0){ return comp; } } if(self > other){ return +1; }else if(self < other){ return -1; }else { return 0; } } /** * 根据开始下标和结束下标,截取字符串 * @param begin * @param end */ public MyString subString(int begin, int end){ if(begin<0 || begin>=array.length || end<0 || end>=array.length || begin>end){ throw new IndexOutOfBoundsException(); } int len= end - begin; char[] newArray = new char[len]; for(int i = 0; i < len; i++){ newArray[i] = array[i+begin]; } return new MyString(newArray); } /** * 判断两个字符串是否相同 * @param myString */ public boolean equals(IMyString myString){ MyString ms = (MyString)myString; if(ms.length() != array.length){ return false; } for(int i=0; i < array.length; i++){ if(array[i] != ms.array[i]){ return false; } } return true; } /** * 根据下标,得到所在元素 * @param index 下标 */ public char charAt(int index){ if(index < 0 || index > array.length){ throw new IndexOutOfBoundsException(); } return array[index]; } /** * 计算字符串长度 */ public int length() { return array.length; } /** * Constructors */ public MyString(){ this.array = new char[0]; } /** * Constructors * @param that */ public MyString(char[] that){ array = new char[that.length]; for(int i=0; i<that.length; i++){ array[i] = that[i]; } } /** * @param args */ public static void main(String[] args) { } }
相关文章推荐
- 数据结构与算法——有向无环图的拓扑排序C++实现
- 排序算法性能比较练习——《数据结构、算法与应用》
- 基本数据结构
- 数据结构------绪论
- 关于程序运行时的数据结构
- 学JS必看-JavaScript数据结构深度剖析
- 数据结构和算法 – 3.堆栈和队列
- 数据结构算法——单链表
- 【数据结构与算法】寻找最大的K个数
- 关系型数据库工作原理-数据结构(翻译自Coding-Geek文章)
- Clojure学习03:数据结构(集合)
- Java数据结构初试之自定义自己的链表结构类
- 循环队列
- 【数据结构】输入二叉树的前序序列,输出二叉树的不同度的结点个数
- 一步一步写数据结构(BST-二叉排序树)
- 集合框架(数据结构之数组和链表)
- 数据结构与算法(一) 交换
- 《常见算法和数据结构》优先队列(3)——堆排序
- 第十周 技术博客发表 数据结构
- 集合框架(数据结构之栈和队列)