数组常用的遍历方式
- for vs foreach
for循环可以获得数组的索引,foreach不能。
for循环不仅可以获取数组元素,还可以修改数组元素。foreach只能用于获取数组元素。
数组的排序算法
- 冒泡排序
public class Demo{
public static void main(String[] args){
int array = {1, 3, 7, 5};
//升序
for(int i = 0; i < array.length - 1; i ++){
for(int j = 0; j < array.length - i -1; j ++){
if(array[j] > array[j + 1]){
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
for(int i : array){
System.out.println(i + " ");
}
}
}
实现数组的自动扩容
public class Demo{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
double[] scores = new double[3];
for(int i = 0; i < 10; i ++){
//如果索引越界
if(i > scores.length - 1){
//将原数组的变量名指向新数组
scores = Arrays.copyOf(scores, scores.length + 1);
}
System.out.println("请输入第"+ (i + 1) +"个学生的成绩:");
scores[i] = input.nextDouble();
}
for(double score : scores){
System.out.println(score + " ");
}
input.close();
}
}
Arrays工具类的常用方法
-
toString(需要格式化的数组):返回固定格式的字符串。
-
sort(需要排序的数组):没有返回值,直接在原数组上做排序。
注意:基本数据类型数组使用快速排序算法,引用数据类型数组使用并归排序算法。 -
binarySearch(目标数组, 要查找的值):查找指定值在数组中的下标。如果没找到,返回负数。
注意:二分查找一定要先排序(升序)。 -
copyOf(原数组, 新长度):返回新数组。
注意:如果新长度比原数组容量小,复制时会舍弃多余的元素。
如果新数组比原数组容量大,复制时会补全默认值。 -
fill(目标数组, 指定数值):使用指定数值填充整个数组。
-
equals(数组1, 数组2):比较两个数组是否相等。
public class Demo02 {
public static void main(String[] args) {
int[] nums = {132, 34, 45, 46, 23, 13, 345};
//Arrays.toString()
String str = Arrays.toString(nums);
System.out.println(str);
//sort()
Arrays.sort(nums);
System.out.println(Arrays.toString(nums));
//copyOf()
int[] newNums = Arrays.copyOf(nums, 10);
System.out.println(Arrays.toString(newNums));
//binarySearch()
int result = Arrays.binarySearch(newNums, 13);
System.out.println(result);
//fill()
Arrays.fill(nums, 4);
System.out.println(Arrays.toString(nums));
//equals()
boolean b = Arrays.equals(nums, newNums);
System.out.println(b);
}
}
Arrays扩展方法
- stream
public class Demo{
public static void main(String[] args){
double scores[] = {33, 44, 55, 66, 77, 88, 99};
//遍历
Arrays.stream(scores).forEach(x -> {
x += 10;
System.out.println(x);
});
System.out.println("==========================");
//筛选
Arrays.stream(scores)
.filter(x -> x >= 60)
.forEach(x -> System.out.println(x));
System.out.println("==========================");
//统计
Arrays.stream(scores).filter(x -> x >= 60).count();
System.out.println(count);
}
}