您的位置:首页 > 理论基础 > 数据结构算法

数据结构之字符串ADT

2016-04-29 13:41 393 查看
一、前言:

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

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: