实际开发中,存在很多很多使用大量数据的情况,如果使用单一变量来处理数据是很不科学的,操作极为繁琐,且不具有通用性,这显然不是程序员应该做出的事情。
于是就出现了数组,虽然数组让操作存在了一定的通用性,方便程度也远远高于单一变量的操作,但是数组操作通常都是需要程序员自己定义完成一大堆方法,并且数据类型的单一性,数组容量的确定性,都限制了数组的便捷程度。
数据结构之可变长数组(一)
为了更好的操作数据,就出现了一种数据结构【可变长数组】。Java中的代表之作,就是ArrayList。
接下来的时间里,我们会使用Java来完成一个自定义的ArrayList,也可以让大家更好的学习和使用ArrayLst。
首先我们先要解决的问题是数据类型的单一性
因为数组在创建的时候,需要确定数据类型。但是实际开发中,数据类型可以说是千变万化的。单一的类型只能满足一种情况,不能满足其他情况。如果在实际使用中,每一次都要因为数据类型的问题,重新定义数组,而且要修改与之匹配的方法,这显然是非常麻烦的。
所以,这里就需要使用到Java中的一种方式 【泛型】来解决。那么首先我们来说【泛型】到底是什么。
泛型,按照我自己的总结,就是解决数据类型一致化,并且可以让代码灵活程度更好的一种方式。有同学就会想到一个问题,解决数据类型一致化???等等,这不还是数据类型单一吗?No No No 此一致,非彼单一。
上代码!!!
package com.qfedu.genericity;
class TestType<T> {
public T test(T t) {
return t;
}
}
public class Demo1 {
public static void main(String[] args) {
test(10);
test(3.15);
TestType<String> tt = new TestType<String>();
tt.test("213");
}
/**
* 自定义泛型无意义占位符 T
* @param t
* @return
*/
public static <T> T test(T t) {
return t;
}
}
可变长如何来完成(二)
数组在创建的时候,就已经确定了数组的容量,并且该容量是无法改变的。既然原数组的容量是不可以改变的,我们就创建新数组跟你们玩一玩~~~~
上代码~~~
package com.qfedu.newarray;
class TestArray {
Object[] array = new Object[10];
/*
这里需要考虑一个数组的扩容方案
*/
public void grow() {
// 原数组的容量
int oldCapacity = array.length;
// 新数组容量
int newCapacity = oldCapacity + oldCapacity / 2;
Object[] newArr = new Object[newCapacity];
// 数据的拷贝
for (int i = 0; i < oldCapacity; i++) {
newArr[i] = this.array[i];
}
this.array = newArr;
}
}
public class Demo1 {
public static void main(String[] args) {
TestArray ta = new TestArray();
System.out.println(ta.array.length);
ta.grow();
System.out.println(ta.array.length);
}
}