package com.hqy.array;
/*
* java数据结构之数组
* 局限:在ArrayApp类中的main函数即数据集结构的使用者必须知道数据的下标
* ,但有些用户只需要随机访问数组的数据项,不太需要数组的下标。
*/
class ArrayClass{
Long[] array;
public ArrayClass(int size) {
array=new Long[size];
}
public Long getArray(int index) {
return array[index];
}
public void setArray(int index,Long lg) {
array[index]=lg;
}
}
public class ArrayApp {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayClass ac=new ArrayClass(100);
int elementcount=0;
ac.setArray(0,(long) 20);
ac.setArray(1,(long) 40);
ac.setArray(2,(long) 60);
ac.setArray(3,(long) 34);
ac.setArray(4,(long) 44);
ac.setArray(5,(long) 21);
ac.setArray(6,(long) 35);
ac.setArray(7,(long) 32);
ac.setArray(8,(long) 56);
ac.setArray(9,(long) 58);
elementcount=10;
for(int i=0;i<elementcount;i++){
System.out.print(ac.getArray(i)+" ");
}
System.out.println();
//查找
int searchkey=44;
int j;
for (j= 0; j <elementcount; j++) {
if(ac.getArray(j)==searchkey){
break;
}
}
if(elementcount==j){
System.out.println("can not find:"+searchkey);
}else{
System.out.println("found:"+searchkey);
}
//删除
int deletekey=60;
for(j=0;j<elementcount;j++){
if(ac.getArray(j)==deletekey){
break;
}
}
if(j==elementcount){
System.out.println("deletekey is not in ac");
}else{
for (int k=j; k<elementcount; k++) {
ac.setArray(k, ac.getArray(k)+1);
}
elementcount-=1;
}
for (int i = 0; i <elementcount; i++) {
System.out.print(ac.getArray(i)+" ");
}
System.out.println();
}
}
由于在一个普通的程序中,数据结构的使用者不会意识到访问数组下标是游泳或有关系的。
为了可以获得更多OOP的好处,应当重新分配类之间的责任。
如下:对ArrayClass的数据结构类的一个改进的接口。类用户(ArrayApp)是用这个接口就不需要再考虑下标了。
类用户可以集中注意力于做什么而不是怎么做:什么要被插入、删除和访问,而不是如何执行这些操作。
package com.hqy.array;
/*
* java数据结构之数组模拟
* 局限:在ArrayApp类中的main函数即数据集结构的使用者必须知道数据的下标
* ,但有些用户只需要随机访问数组的数据项,不太需要数组的下标。
*/
class ArrayClass{
private Long[] array;
private int elemcount;
public ArrayClass(int size) {
array=new Long[size];
elemcount=0;
}
public boolean find(long searchkey){
int i;
for(i=0;i<elemcount;i++){
if(array[i]==searchkey){
break;
}
}
if(i==elemcount){
return false;
}else{
return true;
}
}
public boolean delete(Long deletekey){
int j;
for(j=0;j<elemcount;j++){
if(array[j]==deletekey){
break;
}
}
if(j==elemcount){
return false;
}else{
for (int k = j; k < elemcount; k++) {
array[k]=array[k+1];
}
elemcount-=1;
return true;
}
}
public void insert(long insertkey) {
array[elemcount++]=insertkey;
}
public void display() {
for(int i=0;i<elemcount;i++){
System.out.print(array[i]+" ");
}
System.out.println();
}
}
public class ArrayApp {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayClass ac=new ArrayClass(100);
ac.display();
ac.insert(20);
ac.insert(29);
ac.insert(32);
ac.insert(87);
ac.insert(99);
ac.insert(56);
ac.insert(33);
ac.display();
System.out.println(ac.find(29));
System.out.println(ac.find(10));
System.out.println(ac.delete((long) 87));
System.out.println(ac.delete((long) 21));
ac.display();
}
}
知识引用自:<java数据结构和算法>第二版 【美】Robert Lafore 著
计晓云 赵研 曾希 狄小菡 译