您的位置:首页 > 编程语言 > Java开发

java--数组的学习笔记一之基础知识

2016-10-14 17:04 579 查看
/*java–数组的学习笔记一之基础知识

A.数组

1.数组如何声明?

int[] a=new int[3];

int[]是一个新类型,与int是不同的类型,它是一个引用型类型,特点是,只要是该类型的type,type a的a的本质就是一个指针,而如int b的b不是指针

因此a一开始的值是null,必须先指向实体,而int[3]就是一个实体,我们用new操作符创造一个实体,所谓实体,是指内存空间中有确定地址和大小的一段区域

int[] a=new int[3]—这是数组的创建,而同是引用型数据类型的String(实际上就是类)是这样创建的;

String arr=”xxxx”;这是直接的初始化字符串初始化比较特殊,因为字符串是直接在内存中分配的,并且是不可分割的,它并不需要new,但arr同样是指针。

还有比如String[]类型与String类型是不同的;

String[] str=new String[3];

意思是创建一个能放下3个字符串的数组,当然,实际上该数组里每个元素都不是字符串,而是指向字符串的指针

对于引用型数据类型,大多数类对象都是该数据类型:

Scanner in=new Scanner(System.in);

如上面,类的创建,左边的in是该Scanner类的对象变量(不是对象),实际上是放在栈中的指针,而Scanner(System.in)是实体,也就是真正的对象

一旦上面表达式成立,那么in才能指向该对象,从而in变为该对象的一个表示名称,in可以指代该对象。

通用格式是:

类 对象变量=new 类();

类()代表了实体,有时括号里有东西,有时没有;

2.数组如何初始化?可以重新初始化吗?匿名数组呢?

int[] a={12,32,42};

a=new int[]{12,43,24,43};

int[] b=new int[]{12,43,24,43,43};

以上都可以正确初始化,第二种更是可以重新初始化a,这一点比C强大,C只能初始化一次数组。但是本质没有任何不同

因为C语言的数组名不是指针,而java的数组名是指针,既然是指针,重新指向一个int类型的数组便很正常。

java数组也可以有匿名数组:new int[]{12,43,24,43}便是匿名数组

3.数组的操作?

3.1直接打印数组名会如何?

出现此类值I@15db9742m,@右边是哈希值,左边[I代表整型一维数组

3.2数组主要使用Arrays方法

首先是在源代码顶部import java.util.;意思是导入java.util包中的类,表示任意类型;

Arrays方法一般有;

1)String toString(type[] a);

2)void sort(type[] a);

3)int binarySearch(type[] a,type v);二分法查找数组中有无V,若成功,返回其下标值

4)int binarySearch(type[] a,int start,int end,type v);

5)void fill(type[] a,type v);将所有元素值设置为v;

6)boolean equals(type[] a,type[] b);如果两个数组大小相同,返回true.类似c语言strcmp()函数;该方法String类中也有

4.数组的内存实现以及数组的拷贝:

以int[] a={12,32,42};为例,数组名是存放在栈中的指针,而右边的实体是存在堆中的,实体的地址赋给了a。

a实际上就是指针,因此a可以被赋其他的同类型地址,如果有 int[] b={2,3,,3,3,2};

a=b或b=a不会有任何问题,这就叫做数组的拷贝

5.二维数组

5.1如何声明?

int [][]c=new int[3][4];//实际上是一个包含了3个指针的数组,每个指针指向一维数组

int [][]c=new int[3][];

以上两种声明都可以,但有区别;第一种规定了每一个存储在二维数组中的一维数组的大小,都是4;而第二种却可以让一维数组有不同的

大小;这个与C语言不同,C语言只能有第一种数组的功能;

#二维数组c的c[0],c[1],c[2]存储的并不是一维数组,而是一维数组的地址;而第二维的数组的地址又给了c;

因此c[0],c[1],c[2]的值在没有初始化的情况下,值都是null,而指向的一维数组们每个元素的值都默认为0;这也是跟C语言不同之处

5.2如何初始化?

int [][]d=new int[][]{{12,32,54},{23,45,23,65,23,3},{1,2}};

5.3.二维数组与一维数组的长度

与C语言不同,java数组的长度指的就是元素个数,对于c[3][4],c.length指的就是二维数组第二维有几个元素,显然是3个;

而c[1].length的值就是4个;

5.4.JAVA多维数组的本质是?

JAVA实际上没有多维数组,只有一维数组!多维数组是数组的数组,高维存储的都是指向

低维的地址,故而可以有不规则数组出现

5.5.如何快速打印二维数组列表?

使用Arrays.deepTostring()方法;

6.for each语句

6.1如何用?

for each应用于数组:

int arr[] = {2, 3, 1};

for (int x : arr)

System.out.println(x);

这样便把arr数组的每个值每次赋到x中打印出来

6.2二维数组中如何用?

for(double[] row:a)//double[] 表明了row的类型,JAVA中只要不是基本类型的,必然是指针类型,double[]便是指针类型

for(double value;row)

do something

7.java使用命令行参数

void main(String[] args)表明在命令行中可以输入一个字符串数组,可以自定义功能

*/

import java.util.*;
//  import java.lang.*;String类方法是在main中预定义好的,因此可以省略
public class ArrayLearn
{
public static void main(String[] args)
{
//数组的操作演示
int[] a={12,32,42};
System.out.println(a);//[I@15db9742//@右边是哈希值,左边[I代表整型一维数组
System.out.println(Arrays.toString(a));
a=new int[]{12,43,24,43};
System.out.println(a);//[I@6d06d69c
System.out.println(Arrays.toString(a));
int[] b=new int[]{12,43,24,43,43};
//int[] b=new int[]{12,43,24,43,43,43,34}//但第二次使用时,必须去掉左边的int[],否则编译器会判断其重复声明,无法通过
//a={12,32,42,43};也不能第二次这样进行初始化,必须用new操作符
//数组的操作演示

//字符串
String str="Hello world";
System.out.println(str);
System.out.println(str.length());//数组是arr.length,字符串是str.length();
//字符串

//二维数组
int [][]c=new int[3][4];
System.out.println(c);//[[I@7852e922
System.out.println(c[0]);//[I@4e25154f//只要是实体,必定有地址
System.out.println(c[1][2]);//结果是0

int [][]d=new int[3][];
System.out.println(d);//[[I@70dea4e
System.out.println(d[0]);//null,因为无法找到一维数组
//System.out.println(d[0][0]);//无法找到指针,因为没有一维数组 ,执行到此会报错
//int [][]f=new int[3][]{{12,32,54},{23,45,23,65,23,3},{1,2}};
//二维数组

//遍历二维数组
int [][]e=new int[][]{{12,32,54},{23,45,23,65,23,3},{1,2}};
for(int x=0;x<e.length;x++)
for(int y=0;y<e[x].length;y++)
System.out.print(e[x][y]+" ");
System.out.println();
System.out.println(Arrays.toString(e));//[ [I@5c647e05, [I@33909752, [I@55f96302 ];
//结果显而易见,第二维存储的是地址
System.out.println(Arrays.deepToString(e));
//遍历二维数组
}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 指针 class 数组