J2SE_数组学习笔记
来源:互联网 发布:魔兽世界网络卡 编辑:程序博客网 时间:2024/05/17 06:58
1. 如何定义一个数组?
(1) int[] a ;
(2) int a[] ;
其中:
int 表示数组中存放的元素为int类型
[] 表示数组
a为数组名称
2. 如何初始化一个数组
动态和静态(常用是静态)
动态: 给出数组的长度,初始化值由系统自动分配
数据类型[] 数组名 = new 数据类型[数组长度];
静态:初始化时指定每个数组元素的初始值,由系统决定数组长度。
数据类型[] 数组名 = new 数据类型[] {数组值1,数组值2...}
简化版本为: 数据类型[] 数组名 = {数组值1,数组值2...}
例如:
int [] a = new int{3};
int[] a = new int[]{1,3,4};
简化后:int[] a = {1,3,4};
注意:不能在给定系统长度的同时给数组初始化
3. JAVA中的内存分配:
Java在程序运行时,需要在内存中分配空间,为了提高效率,对空间进行了区域划分,每一片区域都有特定的处理数据方式和内存管理方式。
栈 存储局部变量
堆 存储new出来的东西
方法区
本地方法区(和系统相关)
寄存器(给CPU相关)
后面两个是JAVA不能修改的,重点讲解前三块。
局部变量:在方法定义中或者方法声明上的变量称为局部变量
堆内存的特点:
A:每一个new出来的东西都有地址值
B:每个变量都有默认值
byte,short,int,long 0
float,double 0.0
char '\u0000'
boolean false
引用类型 null
C: 使用完毕就变成垃圾,但是没有立即回收,需要等垃圾回收器空闲的时候进行回收。
4.动态数组Demo
练习一:
定义一个数组,无初始化和有初始化的输出
练习二:定义两个数组,分别输出两个数组各自的数组名及元素值
然后给每个数组的元素重新赋值,再次分别数组两个数组的数组名和元素值
练习三:
定义第一个数组,定义完毕后,给数组元素赋值,赋值完毕后,再输出数组名称和元素值;
定义第二个数组,定义完毕后,给数组元素赋值,赋值完毕后,再输出数组名称和元素值;
定义第三个数组,把第一个数组的地址值赋值给它,通过第三个数组的名称去把数组元素赋值,再次输出第一个数组数组名称和元素。
5. 静态数组练习
练习一:静态数组初始化
6. 数组操作的常见两个小问题
ArrayIndexOutOfBounds 数组索引越界异常
原因:访问了不存在的索引
NullPointerException 空指针异常
原因:数组已经不在指向堆内存,仍然用数组名来访问元素会报错
7. 数组的综合练习
综合练习一:数组元素的遍历
功能:以此输出数组中的每一个元素
注意:数组提供了一个属性length,用于获取数组的长度
格式:数组名.长度
数组元素的下标从0开始,利用属性length获取数组的长度
格式:数组名.length 返回数组的长度
/*遍历数组的方法
两个明确:
返回值类型:void
参数列表: int[] arr
*/
/*遍历数组的方法(改进)
两个明确:
返回值类型:void
参数列表: int[] arr
*/
public static void printArray2(int[] arr)
{
for(int x = 0;x<arr.length;x++)
{
if(x == arr.length-1)
System.out.println(arr[x]);
else
System.out.println(arr[x]+",");
}
}
两个明确:
返回值类型:void
参数列表: int[] arr
*/
public static void printArray(int[] arr) { for(int x = 0;x<arr.length;x++) { System.out.println(arr[x]); } }
/*遍历数组的方法(改进)
两个明确:
返回值类型:void
参数列表: int[] arr
*/
public static void printArray2(int[] arr)
{
for(int x = 0;x<arr.length;x++)
{
if(x == arr.length-1)
System.out.println(arr[x]);
else
System.out.println(arr[x]+",");
}
}
/*综合练习二:获取数组最大值和最小值*/ public static void MaxMinArray(int[] arr1) { int[] arr = {10,20,30,40,50}; int maxVal,minVal; maxVal = arr[0]; minVal = arr[0]; //获取数组最大值 for(int x = 1;x<arr.length;x++) { if(arr[x] > maxVal) maxVal = arr[x]; if(arr[x] < minVal) minVal = arr[x]; } System.out.println(maxVal+"---"+minVal); } /*综合练习三: 数组元素逆序(把数组元素对调) A分析:定义一个数组,静态初始化 B思路: 把1索引和arr.length-1数据交换 把2索引和arr.length-2数据交换 ...... 只要做到arr.length/2的时候即可。 两个明确: 返回值类型:void(不需要返回逆序后的数组,因为数组实际上是引用变量,传入的数组和逆序后的数组为同一个数组 参数列表:数组名int[] arr */ public static void reversePrint(int[] arr) { int temp = arr.length/2; int tempVal; for (int x = 0;x<=temp ;x++ ) { tempVal = arr[x]; arr[x] = arr[arr.length-1-x]; arr[arr.length-1-x] = tempVal; } } public static void reversePrint2(int[] arr) { int startIndex = 0; int endIndex = arr.length -1; int tmp; while(startIndex<endIndex) { tmp = arr[startIndex]; arr[startIndex] = arr[endIndex]; arr[endIndex] = tmp; startIndex++; endIndex--; } } /*综合练习四:查找数据1 根据键盘录入索引,查找对应星期*/ public static void searchDate() { String[] strArr = {"星期一","星期二","星期三","星期四","星期五","星期六","星期日"}; Scanner sc = new Scanner(System.in); System.out.println("请输入一个数据0-6"); int index = sc.nextInt(); System.out.println("日期为:"+strArr[index]); } /*综合练习五:查找数据2 查找指定元素第一次在数组中出现的索引 思路:定义一个数组,静态初始化 写一个功能:遍历数组,依次获取数组中的每一个元素,和已知的数据进行比较 如果相等,返回当前的索引值 明确: 返回值类型: int 参数列表: int[] arr,int data 注意: 如果查找的数据在数组中不存在,找不到数据,一般用负数表示不存在,一般为-1 只要是判断if就有可能有false值存在,需要细心 */ public static int getFirstLoc(int[] arr,int data) { for(int x = 0;x<arr.length;x++) { if (arr[x] == data) return x; } return -1; } public static int getFirstLoc2(int[] arr,int data) { //定义一个索引 int index = -1; for(int x = 0;x<arr.length;x++){ if(arr[x] == data){ index = x; break; } } //返回index return index; }
8. 数组学习总结:
(1)数组:存储同一种数据类型的多个元素的容器。
(2)特点:每一个元素都有编号,从0开始,最大编号是长度-1。
编号的专业叫法:索引
(3)定义格式
A:数据类型[] 数组名;
B:数据类型 数组名[];
推荐是用A方式,B方法就忘了吧。
但是要能看懂
(4)数组的初始化
A:动态初始化
只给长度,系统给出默认值
举例:int[] arr = new int[3];
B:静态初始化
给出值,系统决定长度
举例:int[] arr = new int[]{1,2,3};
简化版:int[] arr = {1,2,3};
(5)Java的内存分配
A:栈 存储局部变量
B:堆 存储所有new出来的
C:方法区(面向对象部分详细讲解)
D:本地方法区(系统相关)
E:寄存器(CPU使用)
注意:
a:局部变量 在方法定义中或者方法声明上定义的变量。
b:栈内存和堆内存的区别
栈:数据使用完毕,就消失。
堆:每一个new出来的东西都有地址
每一个变量都有默认值
byte,short,int,long 0
float,double 0.0
char '\u0000'
boolean false
引用类型 null
数据使用完毕后,在垃圾回收器空闲的时候回收。
(6)数组内存图
A:一个数组
B:二个数组
C:三个数组(两个栈变量指向同一个堆内存)
(7)数组的常见操作
A:遍历
方式1:
public static void printArray(int[] arr) {
for(int x=0; x<arr.length; x++) {
System.out.println(arr[x]);
}
}
方式2:
public static void printArray(int[] arr) {
System.out.print("[");
for(int x=0; x<arr.length; x++) {
if(x == arr.length-1) {
System.out.println(arr[x]+"]");
}else {
System.out.println(arr[x]+", ");
}
}
}
B:最值
最大值:
public static int getMax(int[] arr) {
int max = arr[0];
for(int x=1; x<arr.length; x++) {
if(arr[x] > max) {
max = arr[x];
}
}
return max;
}
最小值:
public static int getMin(int[] arr) {
int min = arr[0];
for(int x=1; x<arr.length; x++) {
if(arr[x] < min) {
min = arr[x];
}
}
return min;
}
C:逆序
方式1:
public static void reverse(int[] arr) {
for(int x=0; x<arr.length/2; x++) {
int temp = arr[x];
arr[x] = arr[arr.length-1-x];
arr[arr.length-1-x] = temp;
}
}
方式2:
public static void reverse(int[] arr) {
for(int start=0,end=arr.length-1; start<=end; start++,end--) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
}
D:查表
public static String getString(String[] strArray,int index) {
return strArray[index];
}
E:基本查找
方式1:
public static int getIndex(int[] arr,int value) {
for(int x=0; x<arr.length; x++) {
if(arr[x] == value) {
return x;
}
}
return -1;
}
方式2:
public static int getIndex(int[] arr,int value) {
int index = -1;
for(int x=0; x<arr.length; x++) {
if(arr[x] == value) {
index = x;
break;
}
}
return index;
}
0 0
- J2SE_数组学习笔记
- C++学习笔记--数组
- PHP学习笔记-数组
- java数组学习笔记
- 数组学习笔记
- PHP学习笔记-数组
- Javascript学习笔记-----数组
- 树状数组学习笔记
- 树状数组学习笔记
- 学习笔记----树状数组
- 后缀数组 学习笔记
- Java学习笔记--数组
- JS学习笔记-数组
- javase学习笔记------------数组
- php学习笔记--数组
- 后缀数组学习笔记
- JavaScript学习笔记:数组
- 学习笔记----后缀数组
- MVC模式和文档/视图结构
- iOS学习8:iOS沙盒(sandBox)机制(二)之沙盒文件操作
- Java第一周:1.4
- hdu4961 Boring Sum(数学)
- iOS开发笔记之NSFileManager的使用
- J2SE_数组学习笔记
- Linux内核最新的连续内存分配器(CMA)——避免预留大块内存
- Java第一周:1.5
- BestCoder Round #54 (div.2) HDOJ 5427 A problem of sorting(模拟)
- UISegmentedControl的详细使用
- CCLabelAtlas,CCLabelTextFormatter解析
- 【各种系列教程】fms p2p视频教程 第二节FMS通信
- 自学QT之字体选择对话框
- 位运算