day05(数组)
来源:互联网 发布:linux 加载u盘 编辑:程序博客网 时间:2024/06/05 05:17
一.数组概述和定义格式说明
1.为什么要有数组(容器)
为了存储同种数据类型的多个值
2:数组概念
数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
数组既可以存储基本数据类型,也可以存储引用数据类型。
3:数组定义格式
数据类型[] 数组名 = new 数据类型[数组的长度];
4.输出数组名称和数组元素
输出数组名:[I@659e0bfd
”[“代表一维数组
”I”代表int数据类型
”@659e0bfd”代表内存地址(哈希码)
二.数组的初始化动态初始化
1.数组的初始化
就是为数组开辟连续的内存空间,并为每个数组元素赋予值
2.对数组进行初始化
a:动态初始化只指定长度,由系统给出初始化值
int[] arr = new int[5];
b:静态初始化 给出初始化值,由系统决定长度
3.动态初始化的格式
数据类型[] 数组名 = new 数据类型[数组长度];
4.数组是引用类型的变量
定义数组相当于定义了一个引用变量(也就是定一个了一个指针),这个引用变量还未指向任何有效的内存
三.Java中的内存分配以及栈和堆的区别
1.栈
存储局部变量
存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)
由输出引用数据变量名为内存地址可以证明
栈内存可以理解成线程的私有内存,具体方法执行结束之后,系统自动释放JVM内存资源。
2.堆
存储new出来的数组或对象
堆内存中的对象对所有线程可见,可以被所有线程访问。jvm不定时查看堆中的对象,如果没有引用指向这个对象就回收。
3.方法区
4.本地方法区
和系统相关
5.寄存器
给CPU使用
最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.
6.常量池
存放字符串常量和基本类型常量(public static final)。
四.数组常见的小问题
1.ArrayIndexOutOfBoundsException:数组索引越界异常
原因:你访问了不存在的索引。
2.NullPointerException:空指针异常
原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。
五.数组的常见操作
1.数组遍历
2.获取数组中的最大值最小值
3.数组元素反转
public class Temp3 { public static void main(String[] args) { int[] arr = new int[]{9,5,6,7,8,34,56}; System.out.print("原数组为:"); for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+" "); } int[] revArr = getRever3(arr); System.out.println(); System.out.print("数组反转后为:"); for(int i=0,len=revArr.length;i<len;i++){ System.out.print(revArr[i]+" "); } } //第一种 public static int[] getRever1(int[] arr){ int temp; for(int i=0,len=arr.length;i<len/2;i++){ temp = arr[i]; arr[i] = arr[len-1-i]; arr[len-1-i] = temp; } return arr; } //第二种 public static int[] getRever2(int[] arr){ int temp; for(int i=0,len=arr.length;i<len/2;i++){ arr[i] = arr[i]^arr[len-1-i]; arr[len-1-i] = arr[i]^arr[len-1-i]; arr[i] = arr[i]^arr[len-1-i]; } return arr; } //第三种 public static int[] getRever3(int[] arr){ int temp; for(int i=0,len=arr.length;i<len/2;i++){ arr[i] = arr[i]+arr[len-1-i]; arr[len-1-i] = arr[i]-arr[len-1-i]; arr[i] = arr[i]-arr[len-1-i]; } return arr; }}
4.查找指定元素第一次在数组中出现的索引
public class Temp13 { public static void main(String[] args) { int[] a = new int[]{45,67,25,98,34}; int index = getIndex(a,98); if(index==-1){ System.out.println("不存在该数"); }else{ System.out.println("存在该数,且下标为:"+index); } } public static int getIndex(int[] a,int num){ for(int i=0;i<a.length;i++){ if(num==a[i]){ return i; } } return -1; }}
六.二维数组
1.二维数组的格式
int[][] arr = new int[3][2];
int[][] arr = new int[3][];
int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};
2.二维数组的练习
二维数组的遍历
求和
3.二维数组内存结构
二维数组是由两个一维数组组成
第一个一位数组存放的是内存地址
- day05(数组)
- 数组day05
- day05 java语言基础(数组)
- day05(数组+二维数组)
- day05 数组 排序
- Java-day05数组
- Day05 --二维数组
- Java基础:Day05笔记内容 (方法、数组)
- day05<Java语言基础--数组>
- day05
- Day05
- day05
- day05
- day05
- day05
- day05
- day05
- day05
- C语言的奇技淫巧
- hdu1711 KMP
- 【PAT】【Advanced Level】1013. Battle Over Cities (25)
- 详解C中volatile关键字
- C++案例分析
- day05(数组)
- Android自定义万能Canvas画布
- Excel比较工具SpreadSheet
- Android开发中如何设置字体
- 【PAT】【Advanced Level】1014. Waiting in Line (30)
- sort
- POJ1731 Orders【全排列+字符串排序】
- 第十二周 leetcode 207. Course Schedule(Medium)
- Python tcp编程,TCP服务端和TCP客户端代码编写