packagexxj.datastructure0810;importjava.util.Random;public classDataStructure {
public static voidmain(String[] args) {
String [] array= {"1","2","3"};
MyArrayList mal = new MyArrayListImpl();//mal.add(100);//mal.add(new Object());
for(int i=0;i
mal.add(array[i]);
}
Random rand= newRandom();int size = rand.nextInt(20);for(int i=0;i
mal.add(""+((char)(rand.nextInt(26)+97)));
}
System.out.println("size = "+size);for(int i=0;i
System.out.println(mal.get(i));
}
}
}
packagexxj.datastructure0810;
public interface MyArrayList{
public voidadd(E e);
public boolean add(intindex,E e);
public E remove(intindex);
public booleanremove(E e);
public boolean update(intindex,E e);
public booleanupdate(E oldE,E e);
public intsize();
public E get(intindex);
}
packagexxj.datastructure0810;
public class MyArrayListImpl implements MyArrayList{//声明一个数组名
privateObject[] array;//声明一个记录存储元素总数的属性名
private intsize;
publicMyArrayListImpl() {
array= new Object[1];
}//public MyArrayListImpl(int i){//array = new String[i];//}
public voidadd(E e) {if (size == 0)
array[0] =e;else{//根据所添加元素的的个数来创建新的数组,新数组的长度是size+1
Object[] newArray = new Object[size + 1];//将新元素str添加到newArray数组的末尾
newArray[size] =e;//将原始数组中的数据存入到新数组中
for (int i = 0; i < size; i++) {
newArray[i]=array[i];
}//新数组的地址赋给原始数组
array =newArray;
}//记录元素总数增加1.
size++;
}
public boolean add(intindex, E e) {return false;
}
public E remove(intindex) {return null;
}
public booleanremove(E e) {return false;
}public booleanremoveAll(E e) {return false;
}
public boolean update(intindex, E e) {return false;
}
public booleanupdate(E oldE, E e) {return false;
}
public intsize() {returnsize;
}
public E get(intindex) {if (index < 0 || index >=size)return null;return(E)array[index];
}
}
1.数组:
数组是属于数据结构中的一种线性结构。
数据对象在内存中的储存方式是一种线性结构。
数组定义的方式:
数据类型 [] 数组名 = new 数据类型[长度];
数据类型 [] 数组名 = {数据,...};
数据类型 [] 数组名 = new 数据类型[]{数据,...};
数据类型 [] 数组名;
数组名 = new 数据类型[长度];
数组名 = new 数据类型[]{数据,...};
//错误示范
数组名 = {数据,。。。}
数据类型 [][] 数组名 = new 数据类型[行][列];
数据类型 [][] 数组名 = {{数据,...},...};
数组是否是一个类?
是的
数组是类,那么肯定提供了属性和方法,那么数组有哪些属性和方法呢?
数组只有一个唯一的length属性,该属性是用来获取数组长度
获取或设置一维数组中某一个位置的数据:数组名[下标]
获取一维数组能存储多少个元素:数组名.length
获取或设置二维数组中某一个位置的数据:数组名[行下标][列下标]
获取二维数组的行数:数组名.length
获取二维数组的列数:数组名[行下标].length
获取二维数组能存储多少个元素:
数组名.length*数组名[行下标].length //不适用于所有情况
数组名[行下标].length+...
除了0可以直接给数字之外,其他的都通过length来获取
数组下标只会从0开始。
2.数组队列
1.数组有什么优点和缺点?
优点:
存取数据是所有数据结构中速度最快的一种,你在获取或设置数据时,
可以直接通过下标定位。
缺点:
如果你要存储的数据不确定时,数组在创建时需要给予的长度就是缺点。
1.创建数组小了,存储不下数据
2.创建数组大了,浪费内存空间
如果在项目中特定情况下只能存储一种数据类型;在项目的两一个位置
需要存储N种数据类型;这样数组在创建时需要指定固定的类型就会是缺点。
2.数组队列的实现
数组队列的实现原理:借助于数组名中存储的是数组对象在内存中的首地址。
interface MyArrayList.java 父接口,定义数组中所需要实现的方法
class MyArrayListImpl.java 子类,实现接口中所有的抽象方法。
使用泛型来解决第二个问题。
泛型是Java中的一种特殊符号,不能把它当做任何一个种数据类型。
但是它可以泛指Java所有的数据类型(基本数据类型,引用类型)。
Java中的泛型有E(元素)、K(键)、V(值)。