1.数据结构概述
1.1 什么是数据结构
1.2 数据结构的分类
- 线性结构: 数组 链表 栈 队列 哈希表
- 树形结构: AVL数 红黑数 B树 堆 Trie 哈夫曼数 并查集
- 图形结构: 邻接矩阵 领接表
2.线性表–数组
2.1 什么是线性表
2.2 线性表由什么?
2.3 什么是数组
- 是一种顺序存储的线性结构,所有的元素地址空间是连续的
- 随机访问速度快 因为访问地址编译器可以直接计算出 ele[ i ] 的 地 址= index + i*每个数据占用字节大小
2.2 数组的内存分布
- int[ ] arr=new int[ ]{1,2,3 };
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c3c66c23b945736beef04a098c8a8fde.png)
2.4 数组缺点
2.5 数组升级–动态数组
- 2.5.1 泛型数组和和基本类型的数组空有什么区别?
- 基本类型数组中存储的是基本类型的值 而泛型数组中存储的对象的地址
- 假如数组中存储对象,在数组初始化还没有add时,数组占用的空间大小依然为对象的空间 这样会浪费掉空间。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0f0ced9f7da84664b222192e83a245bc.png)
- 2.5.2 代码实现
public class DynamicArray2<T> {
private T[] elements;
private int size;
private static final int DEFAULT_CAPACITY = 10;
private static final int ELEMENT_NOT_FOUND = -1;
private static int sumCampacity=0;
public DynamicArray2() {
this(DEFAULT_CAPACITY);
}
public DynamicArray2(int capacity) {
elements = (T[]) new Object[capacity];
}
public int size() {
return size;
};
public boolean isEmpty() {
return size == 0;
} ;
public boolean contains(T ele) {
return indexOf(ele) != ELEMENT_NOT_FOUND;
};
public void add(int index, T ele) {
rangeCheckForAdd(index);
if (size == index) {
int newCampacity=size+(size>>1);
T[] newElements = (T[])new Object[newCampacity];
for (int i = 0; i < size; i++) {
newElements[i]=elements[i];
}
elements=newElements;
for (int i = size-1; i < index; i--) {
elements[i]=elements[i-1];
}
size++;
elements[index]=ele;
}else {
for (int i = size; i > index; i--) {
elements[i]=elements[i-1];
}
size++;
elements[index]=ele; }
};
public void add(T ele) {
add(size, ele);
}
public T get(int index) {
if(index<0||index >=size) throw new IllegalArgumentException