数组的定义
存储一组数据的容器
数组的特点
数据类型完全一致
大小固定
存值有顺序,数组有下标
声明数组
int[] a;(声明)
int a[];
静态初始化
int[] a={1,5,6,9};(推荐)
int a[]={1,5,6,9};
动态初始化
String[] a=new String[5];(推荐)
String a[] =new String[5];
数组的遍历
package com.qf;
public class test4 {
public static void main(String[] args) {
int[] a = {1,3,5,7,9,8};
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
}
}
因为数组中有下标,可以通过下标去寻找对应的数的位置,数组适合做增删改查中的查找和更改。
数组的查找
package com.qf;
public class test4 {
public static void main(String[] args) {
int[] a = {1,43,25,37,94,18};
for(int i=0;i<a.length;i++){
if(a[i]==25){
System.out.println("数组中存在数25下标为"+i);
}
}
}
}
数组的更改
package com.qf;
import java.lang.reflect.Array;
import java.util.Arrays;
public class test4 {
public static void main(String[] args) {
int[] a = {1,43,25,37,94,18};
for(int i=0;i<a.length;i++){
if(a[i]==25){
a[i]=40;
}
}
System.out.println(Arrays.toString(a));
}
}
Arrays工具类的使用
现有数组int[] a = {1,23,45,65,-21,92,89};
a.排序: Arrays.sort(a);
b.复制 : int[] b = Arrays.copyOf(a,a.length);
c.查找 :查找需要先对数组进行升序再查找
查找结果如果由下标则得到下标,否则结果为负数
int b = Arrays.binarySearch(a,36)
d.填充 :将所有的值都填充为某一个值
Arrays.fill(a,11);
e.把数组中的元素拼接成一个字符串 等同于遍历
String b = Arrays.toString(a);
冒泡排序
package com.qf;
import java.lang.reflect.Array;
public class test4 {
public static void main(String[] args) {
int[] a = {1,43,25,37,-5,-9,94,18};
//冒泡排序
//外层循环,表示循环的次数
for(int i =0;i<a.length-1;i++){
//内层循环表示从第一个数值开始向后比较,比较a.length-1-i次
for(int j=0;j<a.length-1-i;j++){
if(a[i]>a[j+1]){
int temp = 0;
temp = a[i];
a[j+1]=a[i];
a[j+1]=temp;
}
}
}
}
}
选择排序
package com.qf;
import java.lang.reflect.Array;
import java.util.Arrays;
public class test4 {
public static void main(String[] args) {
int[] a = {1,43,25,37,-5,-9,94,18};
//选择排序
//外层循环,表示循环的次数
for(int i =0;i<a.length-1;i++){
//内层循环表示选择和剩下的多少个值进行比较
for(int j=i+1;j<a.length;j++){
if(a[i]>a[j]){
int temp = 0;
temp = a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
System.out.println(Arrays.toString(a));
}
}
基本数据类型和引用数据类型的内存分析
a.内存模型广义上分为堆内存和栈内存
b.栈内存存值有顺序,基本数据类型都是存储在栈内存中
c.堆内存存值无顺序,引用数据类型都是存储在堆内存中
d.所有的变量都是存储在栈内存中,并且变量中存储的都是内存地址
e.java中所有的参数传递都是值传递,值传递本质就是传递内存地址
方法的传参和返回值
1.基本数据类型作为参数进行传递时
形参做任何改变,实参不受影响
public class test4 {
public static void change(int a){
a = 15;
System.out.println(a);
}
public static void main(String[] args) {
int a =10;
System.out.println(a);
test4.change(a);
System.out.println(a);
}
}
2.引用数据类型作为参数进行值传递时
String类型较为特殊,当其实参使用静态初始化时(String a=“123”),其结果可以看做和基本数据类型一样
除此之外,其它引用数据类作为参数进行传递时,形参只要不重新new,形参对内容发生任何更改,对实参有影响
import java.lang.reflect.Array;
import java.util.Arrays;
public class test4 {
public static void change(int[] a){
//a=new int[]{1,2};
a[0]=18;
System.out.println(Arrays.toString(a));
}
public static void main(String[] ss){
int[] b=new int[]{1,2,3,4,5,6};
System.out.println(b);
System.out.println(Arrays.toString(b));//[1,2,3,4,5,6]
test4.change(b);
System.out.println(Arrays.toString(b));//[18,2,3,4,5,6]
}
}
- 解释:java中所有的参数传递都是值传递,值传递本质就是传递内存地址
- 总结:在做参数传递时
- 1.如果参数是基本数据类型时,那么传递是具体值(等同于内存地址)
- 2.如果参数是引用数据类型时,那么传递是该变量所指向的内存地址