Java/Python/Go不同开发语言基础数据结构和相关操作总结
由于最近频繁在java、python、go三种开发语言中不断切换,有时候针对基础的数据结构和日常操作搞混了,因此本文进行相关梳理。文中涉及的相关数据结构和日常操作并不复杂,权当增强记忆和理解。
1. Java
在这三种语言中,java已经实现的数据结构是最多,功能最丰富的,这归功于java社区的不断发展,相关的开发者能够不断的利用更方便、更使用的数据结构。相应的,在引用一个陌生的数据结构时,应当重视底层的实现,避免有意想不到的情况出现,导致程序的运行不符合预期。
1.1 静态数组Object[]
- 静态数组的长度一旦定义就不能更改,无法动态扩容数组的长度。如果需要更改数组长度,通常的做法是创建一个新的数组,并将相关的数据拷贝到新数据上
- 由于定义了数组长度,因此每个元素可以通过下标获取,读取的成本比较小,时间长度是O(1)
- 如果需要再指定位置增、删元素,需要移动后续的相关元素,因此写的成本较大,时间长度是O(n)
- 返回Go静态数组
- 返回Python静态数组
1.1.1 数据结构和定义方式
# 定义空数据
int[] list = new int[5];
# 初始化定义数组
int[] list = new int[]{
1,2,3,4,5,9};
1.1.2 增加
由于数组Object[]在初始化的时候,已经确定了数组的长度,因此不能进行增加操作,只能在现有的数组基础上做数据调整。如果需要添加元素
- 需要复制一个新数据,并且size+1
- 复制原有数组,根据情况拷贝相关的值到新数据中
- 根据需要添加的位置,并将后续的元素进行移动
如下方法可以在指定位置,在list数组中添加新元素,实现的效果等于List<Object>的void add(int index, E element);
# 指定index后添加元素
int index = 2;
int value = 5;
int[] array = new int[]{
1,2,3,4};
int[] newArray = new int[array.length + 1];
for (int i = 0; i < array.length; i++) {
newArray[i] = array[i];
}
# 从后往前移动位置,并在index位置留空,便于后续调整index位置的值
for (int i = newArray.length - 1; i > index; i--) {
newArray[i] = newArray[i - 1];
}
newArray[index] = value;
array = newArray;
1.1.3 修改
# 设置index的值
list[int index] = element;
list[1]=2;
1.1.4 查询
# 获取index的值
list[int index];
list[1];
1.1.5 删除
由于数组Object[]在初始化的时候,已经确定了数组的长度,因此不能进行增加操作,只能在现有的数组基础上做数据调整。如果需要添加元素
- 需要复制一个新数据,并且size-1
- 复制原有数组,根据情况拷贝相关的值到新数据中
- 根据需要删除的位置,并将后续的元素进行移动
如下方法可以在指定位置,在list数组中添加新元素,实现的效果等于List<Object>的void remove(int index);
# 指定index后删除元素
int index = 2;
int value = 5;
int[] array = new int[]{
1,2,3,4};
int[] newArray = new int[array.length + 1];
for (int i = 0; i < array.length; i++) {
# 移除index位置的元素
if(i != 2) {
newArray[i] = array[i];
}
}
array = newArray;
1.1.6 获取元素的位置
没有原生的方法能够直接获取元素的位置,需要通过遍历查找的方法进行获取
# 获取object的索引位置,-1表示没有该元素
int index = Arrays.binarySearch(Object[] list, Object key);
int index = Arrays.binarySearch(list, Object key)
1.1.7 获取总长度
# 获取list的总长度
int length = list.length
1.1.8 正向排序
Arrays.sort(list);
1.1.9 逆向排序
Arrays.sort(list, Collections.reverseOrder());
1.2 动态列表List<Object>
声明不固定长度的列表,因此能够提供更加丰富的api和操作方法,也是最常用的数据结构。
1.2.1 数据结构和定义方式
# 定义空列表
List<Integer> list = new ArrayList<>();
# 初始化定义数组
ArrayList<Integer> obj = new ArrayList<Integer>() {
{
add(Object o1);
add(Object o2);
}};
# 初始化定义数组,T对象
ArrayList<T> obj = new ArrayList<T>() {
{
add(Object o1);
add(Object o2);
}};
1.2.2 增加
# 指定index后添加元素
void add(int index, E element);
list.add(1,2);
# 默认在最后添加元素
void add(E element);
list.add(1);
1.2.3 修改
# 设置index的值
list.set(int index, E element);
list.set(1, 2);
1.2.4 查询
# 获取index的值
list.get(int index);
list.get(1);
1.2.5 删除
# 指定index后删除元素
list.remove(int index);
list.remove(1);
1.2.6 获取元素的位置
# 获取object的索引位置,-1表示没有该元素
int index = list.indexOf(Object o);
int index = list.indexOf(1);
1.2.7 获取总长度
# 获取list的总长度
int length = list.size();
int length = list.size();

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



