这个是正好是前面讲了一些排序算法,也用到了不少次数组了,所以就在这里想直接说一下。
数据结构有很多,每个都有自己的优点,因为每一个结构的产生都是因为实际的需要。学习数据结构需要,需要牢牢记住一句话:
结构决定功能
每一种结构的特点,决定了他们的用途,功能。
还是用java举例子,我么常用的数组
class Untitled {
public static void main(String[] args) {
int[] num = new int[]{1,2,3,4,5,6};
char[] c = new char[]{'a','b','c','d','e','f'};
for(int i=0;i<num.length;i++)
{
System.out.println(num[i]);
System.out.println(c[i]);
}
}
}
#输出
1
a
2
b
3
c
4
d
5
e
6
f
sandbox> exited with status 0
我们首先来说这样的简单数组,即数值数组,它的特点是由基本元素组成,并且大小固定,例如int char
首先我们创建了数组变量,在编辑器中实际得到的变量名就是指向起始位置的指针。
int[] num = new int[]{1,2,3,4,5,6};

我们可以依靠序号找打对应的元素,原因是什么?? 我特意将int写在了上边,int的长度是四字节,所以所有元素的间隔都是一样的,那么不就很容易根据序号找到对应的元素
我们数组的地址为num 第一个元素位置就为num+0,第二个位置就是num+1*4,以此类推
我们就可以使用 内存位置+序号*元素占空间大小 (num+下标*4) 定位对应的元素内存位置,从而取出元素。

可能有人说,那我字符串数组大小可不一样了,怎么还能使用序号访问?
class Untitled {
public static void main(String[] args) {
String[] ss = new String[]{"asdfd","fdfs"};
for(int i=0;i<ss.length;i++)
{
System.out.println(ss[i]);
}
}
}
#输出
asdfd
fdfs
这就是要说的第二类,对象数组。对象数组不是特定的值,我们java里使用的类就是一个对象,他们根据特定的规则组成,而不是确定的数据组成,在使用的时候,编辑器根据对象的规则解析出里面的数据和方法。需要注意的是,每个对象在内存中分配时也是由变量名指针指向,就拿String举例子

我们是两个字符串放在一个数组中,但是我们放的并不是他们的值,而是他们的指针(字符串的内存地址)。当我们访问对应序号的元素时,得到的是字符串变量的指针,那么我们就可以正常的访问该变量。对稍微复杂的也是如此,比如我们有一个测试的类,创建一个类的数组:
class Untitled {
public static void main(String[] args) {
test t1 = new test("wang");
test t2 = new test("gugu");
test[] tt = new test[2];
tt[0]=t1;
tt[1]=t2;
for(int i=0;i<tt.length;i++) //遍历访问数组元素
{
tt[i].shout();
}
}
}
class test
{
String a;
test(String in)
{
this.a = in;
}
public void shout()
{
System.out.println(this.a);
}
}
#输出
wang
gugu
这个道理是一样的。
虽然自C语言之后,大多数语言已经屏蔽了所谓的指针概念,但是底层难以避免,为的是减少我们的直接使用指针带来的风险。
对于数组这种结构,它的特点就是存储同类型的元素,并且支持使用下标访问对应的元素。
数组分为两种:数值数组好对象数组。数值数组根据变量大小计算内存偏移,而对象数组中存储的是对象的指针,不是具体的数值。

本文深入探讨数组这一数据结构的特性与应用,包括数值数组和对象数组的区别,以及如何在Java中通过下标访问元素。揭示数组在内存中的存储方式,以及其背后的指针概念。
&spm=1001.2101.3001.5002&articleId=100020873&d=1&t=3&u=bb0930b4321a4ac38431ae883b54ad81)
964

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



