Java深入浅出数组的定义与使用上篇
作者:K媾? 发布时间:2022-03-10 22:32:58
一、数组的基本用法
1.什么是数组
数组:存储一组相同数据类型的数据的集合。
2.定义数组
int[] :int类型数组
double[] :double类型数组
通过类型就可以定义变量,比如:
int[] array,array就是这个类型的变量,这个变量是存储一组相同数据的变量。
三种数组定义的方式:
第一种:
int[] array = {1,2,3,4,5,6};
定义一个数组且初始化
虽然没写new,但实际上也是一个对象
注意事项:
int[10] array = {1,2,3,4,5,6};
写法错误,int[] 属于类型,中括号里面不能加任何的数字,相当于在这里破坏了它的类型。
第二种:
int[] array2 = new int[3];
定义数组未初始化
第三种:
int[] array3 = new int[]{1,2,3,4,5,6};
定义且初始化
三种当中用的最多的就是第一种
3.数组的使用
获取数组长度:
Java里面可以直接通过数组名array.length 求出当前数组的长度
访问数组元素:
访问数组下标为4的元素
越界访问数组元素:
Java语言越界直接报错
更改数组元素:
通过数组名中括号的方式,不仅仅可以访问下标的内容,也可以往下标里面写一些数据
打印数组:
第一种:(for循环)
第二种:(增强for循环,for each循环)
for循环和for each循环的区别:
for循环是可以拿到下标的,
for each循环是拿不到下标的,更多的是用于集合中
第三种:借助Java的操作数组工具类 Arrays
二、数组作为方法的参数
基本用法
JVM简单介绍
局部变量在内存中的储存:
引用不指向对象写法:
这个引用不指向任何的对象
一个引用能不能同时指向多个对象吗?
对于这个代码来说只能指向一个对象,存一个对象的地址。最终只保存了最后一个对象的地址
数组作为方法的参数传递的过程:
求解打印结果:
前两种求解:
fun2打印结果:
分析例子:下图代表什么
代表array2这个引用,指向了array1这个引用指向的对象。
下图就代表了上面例子的意思:
注意事项:
引用指向引用这句话 是错误的,引用只能指向对象
引用一定在栈上吗?
不一定,一个变量在不在栈上,是你变量的性质决定的,如果你就是一个局部变量,一定是在栈上的。如果不是,例如,实例成员变量那就不一定就是在栈上的。
三、数组练习题
1.交换两个变量的值
public class TestDemo {
public static void swap(int[] array){
int tmp = array[0];
array[0] = array[1];
array[1] = tmp;
}
public static void main(String[] args) {
int[] array = {10,20};
System.out.println("交换前: "+array[0]+" "+array[1]);
swap(array);
System.out.println("交换后: "+array[0]+" "+array[1]);
}
打印结果:
2.写一个方法, 将数组中的每个元素都 * 2
/**
* 在原来的数组上扩大2倍
* @param array
*/
public static void enlarge(int[] array){
for (int i = 0; i <array.length ; i++) {
array[i] = array[i]*2;
}
}
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7};
enlarge(array);
System.out.println(Arrays.toString(array));
}
打印结果:
把原来数组扩大2倍的值放在一个新的数组中
/**
* 把原来数组扩大2倍的值放在一个新的数组中
* @param array
* @return
*/
public static int[] func(int[] array) {
int[] ret = new int[array.length];
for (int i = 0; i < array.length; i++) {
ret[i] = array[i] * 2;
}
return ret;
}
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7};
int[] ret = func(array);
System.out.println(Arrays.toString(ret));
}
3.模拟实现tostring函数
public static String myToString(int[] array){
String str = "[";
for (int i = 0; i <array.length ; i++) {
str = str+array[i];
if(i != array.length-1){
str+= ",";
}
}
str= str + "]";
return str;
}
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7};
String str = myToString(array);
System.out.println(str);
}
打印结果:
4.找数组中的最大元素
public static int maxNum(int[] array){
if(array == null) return -1;
if (array.length == 0) return -1;
int max = array[0];
for (int i = 1; i <array.length ; i++) {
if(max < array[i]){
max = array[i];
}
}
return max;
}
public static void main(String[] args) {
int[] array = {12,8,14,26,5,7,8};
int max = maxNum(array);
System.out.println(max);
}
打印结果:
5.查找数组中指定元素(顺序查找)
public static int findNum(int[] array,int key){
for (int i = 0; i <array.length ; i++) {
if(array[i] == key){
return i;
}
}
return -1;
}
public static void main(String[] args) {
int[] array = {2,4,5,6,11,7,8,9};
System.out.println(findNum(array, 7));
}
打印结果:
6.查找数组中指定元素(二分查找)
二分查找的必要条件是必须有序的数列
public static int binarySearch(int[] array,int key){
int left = 0;
int right = array.length-1;
while(left <= right){
int mid = (left+right)/2;
if(array[mid] > key){
right = mid - 1;
}else if(array[mid] < key){
left = left + 1;
}else{
return mid;
}
}
return -1;
}
public static void main(String[] args) {
int[] array = {12,14,15,16,18,23};
System.out.println(binarySearch(array, 15));
}
打印结果:
总结:
本文简单介绍了什么是数组、数组的写法、如何打印数组、数组的简单使用。通过简单例题的方式加深对数组的理解。上述就是今天的内容,文章哪里出现了问题我都会积极改正,也希望大家能更快的掌握自己想要的知识,让我们一起加油!!!!!
来源:https://blog.csdn.net/m0_64397675/article/details/123271586
猜你喜欢
- 6.0的手机对于写入手机需要申请权限的我做了如下处理下面我贴出代码package com.example.admin.sdapplicati
- 这篇文章主要介绍了springboot 定时任务@Scheduled实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的
- 在Android中,线程内部或者线程之间进行信息交互时经常会使用消息,这些基础的东西如果我们熟悉其内部的原理,将会使我们容易、更好地架构系统
- 在开发应用过程中,客户端与服务端经常需要进行数据传输,涉及到重要隐私信息时,开发者自然会想到对其进行加密,即使传输过程中被“有心人”截取,也
- 一,栈1,概念在我们软件应用 ,栈这种后进先出数据结构的应用是非常普遍的。比如你用浏 览器上网时不管什么浏览器都有 个"后退&qu
- 概念Java中的集合就是一种容器,可以容纳不同种类的数据,这些容纳是建立在未知的基础上。优点1.可以动态保存任意多个对象,使用比较方便。2.
- java的jar是一个打包工具,用于将我们编译后的class文件打包起来,这里面主要是举一个例子用来说明这个工具的使用。在C盘下的temp文
- 打包发布jar包部署相对较为简单,尤其是在分布式服务比较多的情况下。单体项目如果是单体项目,只需要找到maven的插件,点击package运
- 什么是JMMJMM全称Java Memory Model, 中文翻译Java内存模型,一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问
- 应用启动数据初始化接口CommandLineRunner和Application详解在SpringBoot项目中创建组件类实现Command
- 本文实例讲述了Java设计模式之享元模式。分享给大家供大家参考,具体如下:解释一下概念:也就是说在一个系统中如果有多个相同的对象,那么只共享
- 时间处理相关类:1.java.util.Date:时间类2.java.text.DateFormat:时间格式化类(抽象类),实现类:jav
- 引言用过Spring Cloud的同学都知道在使用动态配置刷新的我们要配置一个 @RefreshScope,在类上才可以实现对象属性的的动态
- Comparable 比较器,内置定义的比较方法,实现比较 较简单Comparator 策略模式,需要定义不同的策略和比较的对象,实现比较
- 由于最近公司在开发一款后台与安卓的更新系统,经过再三研究之后,也是选择Mqtt这个目前流行的框架。为了能够让项目运营起来,最终虽说是选择Ac
- sms4j 2.0 全新来袭即sms-aggregation成功加入dromara之后,很多人向我们反应了项目名称太长不好记,也太绕口, 在
- 将图片上传到webapp路径下 路径获取方式此方法获取到工程webapp文件夹下String contexPath= request.get
- 一、IO流的分类字符流ReaderInputStreamReader(节点流)BufferedReader(处理流)WriterOutput
- 1,compareTo(Object o)方法是java.lang.Comparable<T>接口中的方法,当需要对某个类的对象
- 序列化和反序列化Java是面向对象的语言,与其他语言进行交互(比如与前端js进行http通信),需要把对象转化成一种通用的格式比如json(