设计动态数组的目的:定义一个动态的数组能够使其实现自动扩容和动态的更新。
动态数组的优点:1.灵活性高可以在编程过程中随时分配和释放他的内存;
2.操作方便:动态数组中的数据均可以自由的添加、删除、调用、访问;
动态数组的缺点:1.内存需要及时清理,不然过大的内存会导致占用过大;
2.动态数组中的数据可能不是连续的,而且也有可能是空的;
泛型:<> 泛型编程是一种在多种数据类型上皆可操作的编程方法,其核心思想是将算法和数据结构与特定数据类型分离,使其能够适用于多种数据类型而不需要修改代码。泛型编程允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。其中指定数据类型必须是引用类型。
常用泛型符号:E T K V...
构造一个动态数组需要设计的方法:
//自定义数组初始大小
public ArrList(int size){}
//默认数组初始大小
public ArrList(){}
//添加到末尾
public void add(E e){}
//添加到指定位置
public void add(int index,E e){}
//移除指定数据
public int remove(int index){}
//获取指定数据
public E get(int index){}
//返回长度
public int size(){}
创建一个动态数组
public class List1<E> {
public Object dates;
public static int line = 0;
public int size = 0;
private Object[] arr;
// 自定义动态数组初始大小
public List1(int size) {
arr = new Object[size];
}
// 默认动态数组初始大小
public List1() {
this(line);
}
public static void main(String[] args){
List1<Integer> list = new List1<>();
for (int i = 0; i < list.arr.length; i++) {
System.out.print(list.arr[i] + " ");
}
List1<String> list1 = new List1<>();
for (int i = 0; i < list1.arr.length; i++) {
System.out.print(list1.arr[i] + " ");
}
}
添加数据功能的实现:
// 添加到末尾
public void add(E e) {
if(size==0){
Object[] nArr = new Object[arr.length +1];
for (int i = 0; i <arr.length; i++) {
nArr[i] = arr[i];
nArr[arr.length+1 ] = e;
}
arr = nArr;
}
else if (size == arr.length) {
Object[] nArr = new Object[arr.length * 2];
for (int i = 0; i < arr.length; i++) {
nArr[i] = arr[i];
nArr[arr.length ] = e;
}
arr = nArr;
}
arr[size] = e;
size++;
}
// 添加到指定位置
public void add(int index, E e1) {
if (size == arr.length) {
Object[] nArr = new Object[arr.length * 2];
for (int i = 0; i < index; i++) {
nArr[i] = arr[i];
}
nArr[index] = e1;
for (int i = arr.length; i > index; i--) {
nArr[i] = arr[i - 1];
}
arr = nArr;
}
arr[index] = e1;
size++;
}
public static void main(String[] args){
List1<Integer> list = new List1<>();
for (int i = 0; i < 14; i++) {
list.add(i);
}
for (int i = 0; i < list.arr.length; i++) {
System.out.print(list.arr[i] + " ");
}
List1<String> list1 = new List1<>();
for (int i = 0; i < 14; i++) {
list1.add("hellow");
}
for (int i = 0; i < list1.arr.length; i++) {
System.out.print(list1.arr[i] + " ");
}
}
移除功能的实现:
//移除指定位置的数据
public Object remove(int index) {
Object[] nArr = new Object[arr.length - 1];
for (int i = 0; i < index; i++) {
nArr[i] = arr[i];
}
nArr[index] = 0;
for (int i = arr.length - 1; i > index; i--) {
nArr[i - 1] = arr[i];
}
arr = nArr;
size--;
return 0;
}
get方法的实现:
// 获取指定数据
public E get(int index) {
if (index > 0 && index < arr.length) {
System.out.println(dates);
return (E)arr[index];
}else {
return null;
}
}
size方法的实现:
// 返回长度
public Integer size() {
System.out.println("size=" + arr.length);
return arr.length;
}
功能实现:
public static void main(String[] args) {
List1<Integer> list = new List1<>();
for (int i = 0; i < 14; i++) {
list.add(i);
}
list.add(14, 100);
list.remove(9);
list.size();
list.get(5);
for (int i = 0; i < list.arr.length; i++) {
System.out.print(list.arr[i] + " ");
}
List1<String> list1 = new List1<>();
for (int i = 0; i < 14; i++) {
list1.add("hellow");
}
list1.add(10,"yes");
list1.remove(4);
list1.size();
list.get(6);
for (int i = 0; i < list1.arr.length; i++) {
System.out.print(list1.arr[i] + " ");
}
}