数据结构之字符串ADT

来源:互联网 发布:云南旅游市场分析数据 编辑:程序博客网 时间:2024/05/16 09:16

一、前言:

在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) {}}



0 0
原创粉丝点击