Java学习日记——基础梳理(4) 20190228
程序员文章站
2022-03-20 18:03:59
...
LEARNING
数组:
数组作为对象,允许使用new运算符进行内存分配1)一维数组(一组相同类型数据的线性集合)
①创建:先声明后分配(2种)
声明
数组元素类型 数组名[ ];
数组元素类型[ ] 数组名;
分配内存空间
数组名 = new 数组元素类型[数组元素的个数]
两者结合
int month[ ] = new int[12];
②初始化(2种)
int a1[ ] = new int[]{1,2,3,4,5};
int a2[ ] = {6,7,8};
③使用
2)二维数组
①创建+分配内存
int a[][] = new int[2][3]; //可分配每一维
②初始化
int a[][] = {{1,2},{2,4}};
③遍历
for(i=0;i<=a.length;i++)
for(j=0;j<=a[i].length;j++)
System.out.print(a[i][j]);
3)数组的基本操作
①遍历:for循环,foreach语句
int a[][] = {{1,2},{3,4}};
for( int x[]:a){ //外层循环遍历为一维数组
for(int e:x){ //循环遍历每一个数组元素
if(e==x.length) System.out.print(e); //判断遍历是否为二维数组最后一个元素
else System.out.print(e+"、");
}
}
②填充替换数组元素
通过Arrays类的静态方法fill()
fill(int a[] , int value) //将value指赋给数组a[]的每个元素
fill(int a[] , int formIndex , int toIndex , int value)
//用formIndex和toIndex指定填充范围,但是formIndex<=m<toIndex
注:需要导入Arrays类import java.util.Arrays;,然后引用Arrays.fill()
③排序
通过Arrays类的静态方法sort()
Arrays.sort(a) //a为数组名 数字>大写字母>小写字母
④复制
通过Arrays类的copyOf()和copyOfRange()
copyOf(a,int newlength)
copyOfRange(a,int formIndex,int toIndex)
⑤查询
通过Arrays类的binarySearch() 使用前需要进行排序!!
int Index = binarySearch(a,int key); //值都小于key,则返回a.length
int Index = binarySearch(a,int formIndex,int toIndex,int key);
//若数组a中无key,则返回"-"插入点,比如1,2,3,索引位置是1-2即插入位置
//为2之后,3之前,此时插入点为3的索引值2,所以Index值为-2。若所有的
//值都小于key,则返回toIndex
4)数组排序算法
①冒泡排序(双层循环)
外层:控制排序轮数
内层:比较临近元素大小
for(i=1;i<a.lengtn;a++)
for(j=0;j<a.length-i;j++){ //由于数组是下标为0开始,所以需要长度减一
if a[j]>a[j+1]{
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp; //交换a[j]和a[j+1]
}
}
②直接选择排序(交换次数少,速度比冒泡快)
将指定排序位置与其他数组元素对比,若满足条件则交换。
int flag;
for(int i=1;i<a.length;i++){
flag = 0;
for(int j = 0;j<a.length-i;i++){
if(a[j]>a[flag]) flag = j;
int temp = a[a.length-i];
int a[a.length-i] = a[flag];
a[flag] = temp;
}
}
③翻转排序
以相反的顺序重新排序。
for(int i=0;i<a.length/2;i++){
temp = a[i];
a[i]=a[a.length-1-i];
a[lengtn-1-i]=temp;
}
PRATICING
1.Java程序:创建数组a1,a2,将a1中索引位置是0-3的元素复制到a2中。
package Pratices;
import java.util.Arrays;
public class Pratice11 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int a[]= {1,1,2,8,5};
int b[]=Arrays.copyOfRange(a,0,3);
for(int i=0;i<a.length;i++)
System.out.print(a[i]);
System.out.println();
for(int j=0;j<b.length;j++)
System.out.print(b[j]);
}
}
2.Java程序:将数组中最小元素输出。
package Pratices;
import java.util.Arrays;
public class Pratice12 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int a[]= {6,6,2,8,5};
Arrays.sort(a);
System.out.print(a[0]);
}
}
3.Java程序:实现将数组a中索引位置为2的元素替换成"bb"。
package Pratices;
import java.util.Arrays;
public class Pratice13 {
public static void main(String[] args) {
String a[]= {"J","a","n","e"};
for(int j=0;j<a.length;j++)
System.out.print(a[j]);
System.out.println();
Arrays.fill(a,2,3,"bb");
for(int i=0;i<a.length;i++)
System.out.print(a[i]);
}
}
4.Java程序:将二维数组中的行列互调显示出来。
错误程序+改正
package Pratices;
public class Pratice14 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int a[][] = {{1,2,3},{4,5,6},{7,8,9}};
for(int i=0;i<a.length;i++)
for(int j=0;j<a[i].length;j++) { //j<i而不是j<a[i].length
int temp = a[i][j];
a[i][j] = a[j][i];
a[j][i] = temp;
}
for(int i=0;i<a.length;i++)
for(int j=0;j<a[i].length;j++) {
System.out.print(a[i][j]);}
}
}
因为j<i则j在下三角数组中交换,只交换一次,而j<a[i].length则j的取值范围是a[i]行的长度,那么j在a[i][j]所做的交换会在a[j][i]再做一次导致数组无变化!
法2
package Pratices;
public class Pratice14 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int a[][] = {{1,2,3},{4,5,6},{7,8,9}};
int newa[][] = new int[a.length][a[0].length];
for(int i=0;i<a.length;i++)
for(int j=0;j<a[i].length;j++) {
System.out.print(a[i][j]);}
System.out.println();
for(int i=0;i<a.length;i++)
for(int j=0;j<a[i].length;j++) {
newa[i][j] = a[j][i];
}
for(int i=0;i<a.length;i++)
for(int j=0;j<a[i].length;j++) {
System.out.print(newa[i][j]);}
}
}
上一篇: matplotlib 图例