Java数组学习笔记(遍历、排序、多维数组、命令行参数)
文章目录
- 数组的遍历和快速打印
- 冒泡排序和快速排序
- 数组和字符串排序的区别
- 多维数组建立和输出
- 命令行向main()传递参数
数组的遍历和快速打印
一、数组的遍历
数组的遍历有两种方法,一种是使用for循环,另一种是使用for each。
for each的基本使用方法为:
for (int element:ns) {System.out.println(element); // element直接返回ns数组里面的元素
}
需要注意的是:
- 使用for each看起来更加简洁
- 但是在使用for each的时候,是不能得到数组的索引的
- 返回类型诸如int容易遗漏
二、数组的快速打印
数组的打印也有两种方法,一种是使用for循环或者for each挨个打印元素,另一种是转换成字符串直接打印。
转换成字符串直接打印看起来更加简洁,需要使用到方法Arrays.toString()
,使用方法之前需要import java.util.Arrays
,这个编译器会自动帮你生成。
import java.util.Arrays; // 导入标准库函数
System.out.println(Arrays.toString(ns)); // 转化成字符串打印输出
需要注意的是:
如果是使用
ns.toString()
返回的是字符串的地址只有使用
Arrays.toString(ns)
返回的才是字符串本身数组在转换成字符串在打印的时候,不会自动添加换行
三、代码案例
import java.util.Arrays;public class ArrayOperation {public static void main(String[] args) {// 新建一个数组int[] ns = {1,4,9,16,25};// 1,使用for循环遍历数组for (int i=0;i<ns.length;i++){System.out.println(ns[i]);}// 2,使用for each 遍历数组
// for each循环更加简洁,但是拿不到下标索引
// 这里的element不是一个索引!
// 这里的element相当于一个迭代器,从ns[]这个数组里面挨个提取内容for (int element:ns) {System.out.println(element);}// 3,快速打印数组里面的内容
// 要想快速打印数组里面的内容,需要把数组转变成字符串
// Java标准库里面提供了这种方法:Arrays.toString()
// 3.1 注意这个写法是错误的,将会返回字符串的引用地址!System.out.println(ns.toString());
// 3.2 这个写法才能返回字符串里面的内容System.out.println(Arrays.toString(ns)); }
}
冒泡排序和快速排序
一、冒泡排序
数组冒泡排序最容易错的有两点:
- 数组本身是一个引用,所以必须直接改变数组本身的引用关系,否则是不会对值产生改变的。
- 冒泡排序的第二层循环变量范围,应该是[左边第一个未排序,右边最后一个排好序]的下标。
数组冒泡排序的核心代码
for (int i=0;i<ns.length-1;i++) {for (int j=1;j<ns.length-i;j++) {// 开始比较大小,小的在前,大的在后if (ns[j-1]>ns[j]) { // 进行交换int temp = ns[j-1]; ns[j-1] = ns[j]; ns[j] = temp; } } }
System.out.println(Arrays.toString(ns));
二、快速排序
Java标准库内置了一个Arrays.sort()
方法,可以直接调用
三、代码示例
这里面包含了自己身上犯的两个常见错误
import java.util.Arrays;public class ArrayOperation {public static void main(String[] args) {// 新建一个数组int[] ns = {28, 12, 89, 73, 65, 18, 96, 50, 8, 36}; // 1, 练习冒泡排序for (int i=0;i<ns.length-1;i++) {for (int j=i+1;j<ns.length;j++) {int left = ns[j-1];int right = ns[j];
// 进行排序,小的在前,大的在后if (left>right){// 交换大小int temp = left;left = right;right = temp;} //end if} // end for j} // end for i
// 你会惊讶地发现,数组没有发生任何改变!
// 怎么回事?
// 因为数组的本质是引用System.out.println(Arrays.toString(ns));//[28, 12, 89, 73, 65, 18, 96, 50, 8, 36]// 2, 重来冒泡排序for (int i=0;i<ns.length-1;i++) {for (int j=i+1;j<ns.length;j++) {// 开始比较大小,小的在前,大的在后
// 直接使用数组下标索引试试看if (ns[j-1]>ns[j]) {// 进行交换int temp = ns[j-1];ns[j-1] = ns[j];ns[j] = temp; } //end if}//end for j}//end for i
// 你会惊讶地发现,仍然出错了,咋回事?
// 想象一下,大的泡泡一直往后冒,所以最后一个元素是确定的
// 所以第二层遍历应该是从最左边到排好序的那个元素,
// 即j的范围应该是[1,ns.length-i]System.out.println(Arrays.toString(ns));//12, 28, 18, 50, 8, 36, 65, 73, 89, 96]// 3, 再来冒泡排序for (int i=0;i<ns.length-1;i++) {for (int j=1;j<ns.length-i;j++) {// 开始比较大小,小的在前,大的在后if (ns[j-1]>ns[j]) {// 进行交换int temp = ns[j-1];ns[j-1] = ns[j];ns[j] = temp; } //end if}//end for j}//end for iSystem.out.println(Arrays.toString(ns));//[8, 12, 18, 28, 36, 50, 65, 73, 89, 96] 成功!// 4,使用系统自带的排序方法ns = new int[] {23,45,67,89,10};Arrays.sort(ns);System.out.println(Arrays.toString(ns));// [10, 23, 45, 67, 89]}
}
数组和字符串排序的区别
对数组的排序,修改了数组本身的顺序
对字符串数组的排序,实际上修改的是引用(指向)的关系
多维数组建立和输出
1,多维数组的新建使用int[][]
类型
2,多维数组使用.length()
方法得到的长度和实际长度是不一样的,其本质是一维数组的嵌套
3,多维数组的打印使用Arrays.deepToString()
这个函数
import java.util.Arrays;public class ArrayOperation {public static void main(String[] args) {// 多维数组
// 新建的时候需要注意返回类型是int[][]int[][] new_ns = {{ 1, 2, 3, 4 },{ 5, 6, 7, 8 },{ 9, 10, 11, 12 }};System.out.println(new_ns.length); //3System.out.println(new_ns[0].length); //4
// 多维数组的打印输出使用deepToString这个函数System.out.println(Arrays.deepToString(new_ns));}
}
命令行向main()传递参数
main函数是可以引入字符串变量的,通过不同的字符串变量可以得到不同的结果,例如查询版本号。
main函数的变量是在运行时候传递的,所以这里使用命令行进行编译运行。
使用
Arrays.equals()
判断两个字符串是否相等
首先在终端中新建一个文件
touch ArrayArgs.java # 注意和public class后面的类名保持一致
open -e ArrayArgs.java
然后在里面填写下面的函数
public class ArrayArgs{public static void main(String[] args){System.out.println("test if is ok");for (String arg:args){if ("-version".equals(arg)){ // Array.equals()函数判断字符串是否相等System.out.println("Version: v1.0");break;}// end if}// end for}// end main
}// end class
最后编译运行
javac ArrayArgs.java
java ArrayArgs.java -version
# 效果如下
test if is ok
Version: v1.0
参考文章
https://www.liaoxuefeng.com/wiki/1252599548343744/1255945064769408
Java数组学习笔记(遍历、排序、多维数组、命令行参数)相关推荐
- 学习笔记_给二维数组赋值
实例一 P89 给二维数组赋值 2020-03-20 12:27:11 一个私人书柜有3层2列,分别向该书柜第1层1列放入历史类读物,向该书柜第二层第一例放入经济类读物,向第二层第二列放入现代科学读物 ...
- openjudge 二维数组右上坐下遍历(二维数组)
二维数组右上左下遍历 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按 ...
- linux学习笔记:1.基础知识和命令行基本操作
初次学习linux系统,想在这里记录自己的学习痕迹,如发现有不足之处,希望能指出,谢谢啦,之后的学习是在虚拟机VMware 10下的Red Hat Enterprise linux 6 的操作. 一. ...
- Android学习笔记Android必备开发工具之一命令行创建Git库
提供相关文章介绍 http://hi.baidu.com/baixuejiyi1111/blog/item/e7a475a2589123e19152eed9.html http://www.2cto. ...
- Linux操作系统学习笔记3【图形界面与命令行】
文章目录: 本章讨论: 1.Linux图形化管理系统组成部分 2.什么是X Window系统 3.X Window组成 4.什么是KDE桌面 5.什么是GNOME桌面 6. Red Hat Linux ...
- Java中大数据数组,Java基础学习笔记之数组详解
摘要:这篇Java开发技术栏目下的"Java基础学习笔记之数组详解",介绍的技术点是"java基础学习笔记.基础学习笔记.Java基础.数组详解.学习笔记.Java&qu ...
- 【java进阶06:数组】使用一维数组模拟栈数据结构 使用二维数组模拟酒店,酒店管理系统 Arrays工具类 冒泡排序算法、选择排序算法、二分法
目录 数组 二维数组 总结 作业 Arrays工具类 数组 数组总结 及 静态初始化一维数组 /* Array:1.java语言中的数组是一种引用数据类型,不属于基本数据类型,数组的父类是Object ...
- 《Java JDK8学习笔记》读书笔记(4)
第4章 认识对象 学习目标 区分基本类型与对象类型 了解对象与引用的关系 从打包器认识对象 以对象观点看待数组 认识字符串的特性 4.1 类与对象 第3章讲的都是基本类型,这一章开 ...
- JAVA SE 学习笔记
笔记 一·Java程序基础 代码练习合集 1.Hello,world 2.BMI 3.Grade 4.InputNum 5.Gamecaiquan 6.Main 7.Reserve_arrays 8. ...
最新文章
- Micronaut教程:如何使用基于JVM的框架构建微服务
- POI之excel导入导出
- 14 图的基础知识-几种常用的存储结构
- java二次封装_基于OKhttp+Rxjava2+Retrofit进行二次封装
- python使用手册-Python参考手册(第4版)
- Normal Data Structure Tricks
- 红薯叶有什么营养价值?
- 百度大脑EasyMonitor升级2.0,全新发布软硬一体方案EM-BOX 边缘部署易集成
- (详解)11年真题:求两个序列合并后的的中位数
- Java基础面试题大全
- 等保 2.0 二级 VS 三级
- Ubuntu 22.04 下安装uhd和gnuradio的快捷方法
- 怎样用电脑收发短信?
- js中读取json对象
- Linux下自动化运维工具ansible
- python编写科学计算器_Python实现计算器
- java计算机毕业设计旅游网站源程序+mysql+系统+lw文档+远程调试
- java 利用飞信,Java利用飞信API给自己或者好友发信息
- python 有没有 hold on的用法
- .bashrc 文件
热门文章
- springCloud工作笔记090---SpringCloud_redis配置多数据源_redis多数据源
- JPA开发求助---JPA生成数据表的时候:log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotat
- multi-view face detection using deep convolutional neural networksz
- js 跳转传递汉字参数
- JAVA redis 常用函数
- linux共享内存变量 tiaojianbianliang,低压集抄系统中Linux共享内存使用分析
- 3d激光雷达开发(生成RangeImage)
- 嵌入式电路设计(linux soc电路设计)
- 一步一步写算法(之内存)
- tts android,Android系统自带的TTS实现语音播报