数据结构
数据结构
线性结构: 数组、队列、栈、链表、哈希表…
树型结构:二叉树、二分搜索树、AVL树,红黑树、堆、Trie、线段树、并查集…
图结构:邻接矩阵、邻接表
数据结构 + 算法 = 程序
数组
1.数组基础
<1> 用来存储一组类型相同的数据
<2> 在内存中,分配连续的空间,数组创建时要指定容量(大小)
<3> 数据类型[] 数组名 int[] arr = new int[10] int[] arr2 = {1,2,3,4}
<4> 索引—访问数组时通过索引进行操作
<5> 索引从0开始,最大为 arr.length -1
<6> 常见的错误: NullPointException ArrayIndexOutOfBoundsException
<7> 常见的数组: 字符串, 对象数组,哈希表
因为数组具有索引,因此数组最大的优点是可以快速查询。
自定义数组
1,、基于Java中的数组,进行二次封装,制作属于我们自己的数组(可变数组)
具备下列功能:
向数组中添加元素
向指定位置添加元素
向数组头添加元素
获取指定位置的元素和修改指定位置的元素
包含、搜索和删除元素
针对上面的逻辑,我们可以删除指定的元素
//java
import java.util.Random;
public class MyArray {
private int[] data;//底层数组
private int size;//数组的中实际存储
private int capacity;//数组的容积
public MyArray() {
this(100);
}
public MyArray(int capacity) {
this.data = new int[capacity];
this.size = 0;
}
//在数组中添加元素
public void add(int position,int value){
if(position < 0 || position > this.size ){
throw new IllegalArgumentException("position is unvalue");
}else{
for(int i = this.size-1; i >=position; i--){
this.data[i+1] = this.data[i];
}
this.data[position] = value;
this.size += 1;
}
}
//在数组首部添加元素
public void addHead(int value) {
for(int i =this.size-1;i<=0;i--){
this.data[i+1] = this.data[i];
}
this.data[0]=value;
this.size+=1;
}
//在数组尾部添加元素
public void addTile(int value) {
this.data[size] = value;
this.size+=1;
}
//toString方法
public String toString(){
StringBuilder sb = new StringBuilder();
for (int i = 0; i < this.size; i++) {
sb.append(this.data[i] + ",");
}
String result = sb.toString();
return result;
}
public static void main(String[] args) {
MyArray myArray = new MyArray(100);
Random random = new Random();
for (int i = 0; i < 20; i++) {
myArray.add(i, random.nextInt(10));
}
System.out.println(myArray);
}
}