- 定义
数组(array)是一种线性表数据结构。用一组连续的内存空间,来存储一组具有相同类型的数据。
- 如何实现随机访问
- 线性表(数据排成像一条线一样的结构)
- 连续的内存空间和相同类型的数据
- 寻址公式
a[i]_address = base_address + i * date_type_size
- 容器的优势,eg:ArrayList
将数组的操作细节封装起来,支持动态扩容(每次扩大为原来的1.5倍)。
注:由于扩容操作设计内存申请和数据搬移,比较耗时。若事先能确定需要存储的数据大小,最好在创建ArrayList的时候事先指定书大小
- 容器的劣势:
不能存储基本数据类型,若关注性能或希望使用基本数据类型,则选用数组
补充
位(bit) 字节(byte)
- 各数据类型所占用的字节数
数据类型 | 所占用字节数 |
---|---|
byte | 1 |
short | 2 |
int | 4 |
long | 8 |
float | 4 |
double | 8 |
char | 2 |
数组常用操作
/**
* 定义data保存数据
*/
private int data[];
/**
* 定义数组实际长度
*/
private int count;
/**
* 定义数组容量
*/
private int capacity;
public Array(int capacity) {
this.data = new int[capacity];
this.capacity = capacity;
this.count = 0;
}
/**
* 找数据
*
* @param index
* @return
*/
public int find(int index) {
if (index < 0 || index >= count) {
return -1;
}
return data[index];
}
/**
* 加数据
*
* @param index
* @param value
* @return
*/
public boolean insert(int index, int value) {
if (index < 0 || index >= count) {
return false;
}
if (count == capacity) {
return false;
}
for (int i = count - 1; i < count; i--) {
data[i + 1] = data[i];
}
data[index] = value;
++count;
return true;
}
/**
* 数据加到末尾
*
* @param value
* @return
*/
public boolean insertToTail(int value) {
if (count == capacity) {
return false;
}
data[count++] = value;
return true;
}
/**
* 删除指定位置数据
*
* @param index
* @return
*/
public boolean delete(int index) {
if (index < 0 || index >= count) {
return false;
}
for (int i = index + 1; i < count; i++) {
data[i - 1] = data[i];
}
--count;
return true;
}
/**
* 打印此数组
*/
public void printAll() {
for (int i = 0; i < count; i++) {
System.out.print(data[i] + " ");
}
System.out.println();
}
/**
* 获得数组长度
* @return
*/
public int getCount(){
return count;
}