Java数组,简简单单信手沾来~
——数组,一组相同数据类型的数据
一.一维数组
1.数组的基本概念
1)数组用于存储多个同一数据类型的数据
2)数组是数据类型【引用类型】
3)数组的形式:数据类型 + []
4)数组的下标从0开始
5)数组中的元素是通过下标进行访问的
6)数组的长度:数组名.length()
2. 一个小case快速了解数组
public class Test {public static void main(String[] args) {int[] arr1 = {1,2,3,4,5,6};//整型数组:只能存储整型数据//double[] arr2 = {1.2,2.3,3.45,5.6};//浮点数组:只能储存浮点型数据//char[] arr3 = {'a','b','c','d'.'e'};//字符数组:只能储存字符型数据//通过[]中的下标来访问数组System.out.println(arr1[0]);//访问第一个元素System.out.println(arr1[1]);//访问第二个元素System.out.println(arr1[2]);//求数组的长度:数组名.lengthSystem.out.println(arr1.length);//6}
}
3.数组的使用
1)初始化方式1:数据类型[ ] 数组名 = new 数据类型[大小];
public class Test {public static void main(String[] args) {//动态定义double数组,并且数组的大小为5double[] arr = new double[5];Scanner sc = new Scanner(System.in);//输入数据int i = 0;for(i=0;i<arr.length;i++)arr[i] = sc.nextDouble();//打印数据for(i=0;i<arr.length;i++)System.out.println(arr[i]);}
}
2)初始化方式2:数据类型[ ] 数组名 = {元素值1,元素值2,元素值3……}
public class Test {public static void main(String[] args) {//静态初始化数组int[] arr = {1,2,3,4,5,6};//打印数组中的数据int i = 0;for(i=0;i<arr.length;i++) {System.out.println(arr[i]);}}
}
4.数组的使用细节
1)数组是一组相同数据类型的组合
2)数组的数据类型一旦确定,不可改变
public class Test {public static void main(String[] args) {//数组是一组相同数据类型的组合int[] arr = {1,2,3,4,5,6};//全部是整型数据//数组的数据类型一旦确定,不可改变//int[] str = {1,2,3.4,6,6};//错误,整型数组只能储存整型数据,3.4是浮点型数据//int[] str = {'a',1,2,3};//错误,整型数组只能储存整型数据,'a'是字符}
}
3)数组创建后,若数据元素无赋值,则有默认值
int / short / byte / long : 0
float / double : 0.0
char:'\u0000'
boolean : false
String : null
引用类型: null
4)数组的使用步骤
a.声明数组并开辟空间
b.给数组的各个元素赋值
c.使用数组
public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);//i.声明数组并开辟空间int[] arr = new int[5];//ii.给数组的各个元素赋值arr[0] = 1;//直接赋值arr[1] = 2;arr[2] = sc.nextInt();//输入赋值arr[3] = sc.nextInt();//输入赋值arr[4] = 5;//iii.使用数组int i = 0;for(i=0;i<arr.length;i++)System.out.println(arr[i]);}
}
5)数组的下标是从0开始
6)数组的下标必须在指定范围内使用,否则出现:下标越界异常
7)数组属于引用类型,数组型数据是对象
public class Test {public static void main(String[] args) {int[] arr = {1,2,3,4,5};//数组的下标是从0开始System.out.println(arr[0]);//数组的下标必须在指定范围内使用,否则报错:下标越界异常//arr[6] = 0;//ArrayIndexOutOfBoundsException//7)数组属于引用类型,数组型数据是对象System.out.println(arr);//打印出arr数组的地址}
}
5.数组赋值
1)基本数据类型赋值,使用变量存储要存储的值即可
public class Test {public static void main(String[] args) {int a = 10;int b = a;//把a的值赋给bSystem.out.println(b);//10}
}
2)数组之间的赋值是把数组的地址复制过来
public class Test {public static void main(String[] args) {int[] arr = {1,2,3,4,5,6,7};int[] arr1 = arr;//把arr的地址赋给arr1//两者地址(hashcode)相同System.out.println(arr);//[I@4eec7777System.out.println(arr1);//[I@4eec7777arr1[0] = 10;//对数组中值的修改会使指向这个数组的另外一个数组的值也随着改变System.out.println(arr[0]);//10System.out.println(arr1[0]);//10}
}
6.数组拷贝
把一个数组的内容复制到另一个数组
public class Test {public static void main(String[] args) {int[] arr = {1,2,3,4,5,6,7};int[] str = new int[arr.length];int i = 0;for(i=0;i<arr.length;i++) {str[i] = arr[i];}for(i=0;i<arr.length;i++) {System.out.print(str[i] + " "); // 1 2 3 4 5 6 7}}
}
7.数组扩容
当数组的空间不够时,对数组进行动态扩容
注:底层使用Arrays.copyOf()方法进行扩容
import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int[] arr = {1,2,3,4,5,6,7};char ch = '0';do {int[] str = new int[arr.length + 1];//进行扩容int i = 0;for(i=0;i<arr.length;i++) {str[i] = arr[i];}System.out.println("请输入要添加的数据:");str[arr.length] = sc.nextInt();arr = str;for(i=0;i<arr.length;i++) {System.out.print(arr[i] + " ");}System.out.println();//换行System.out.println("是否要继续添加数据(y/n):");ch = sc.next().charAt(0);if(ch == 'n')break;}while(true);}
}
二.二维数组
1.二维数组的基本概念
1)概念:二维数组本质上是以数组作为数组元素的数组,即“数组的数组”
2)定义形式:数据类型[常量表达式][常量表达式] 数组名;
2.一个小case让你快速了解二维数组
public class Test {public static void main(String[] args) {int[][] arr = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};System.out.println("二维数组的元素个数为:" + arr.length);//3,即3个一维数组//遍历二维数组//arr.length --> 二维数组中的第一维(行)的长度//arr[i].length --> 二维数组中第二维(列)的长度int i,j;for(i=0;i<arr.length;i++) {//二维数组的元素个数for(j=0;j<arr[i].length;j++) {//一维数组的元素个数//进行遍历输出System.out.print(arr[i][j] + " ");//1 2 3 4 5 6 7 8 9 10 11 12 }}}
}
3.二维数组的使用
初始化方式1:数据类型[ ][ ] 数组名 = new 数据类型[大小][大小];
import java.util.Scanner;public class Test {public static void main(String[] args) {//初始化方式1:数组中的值都是默认值0,需要我们输入值在数组中去int[][] arr = new int[3][5];//System.out.println(arr[0][0]);//0Scanner sc = new Scanner(System.in);for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {arr[i][j] = sc.nextInt();//输入数据}}//输出数据//arr.length --> 二维数组中的第一维(行)的长度//arr[i].length --> 二维数组中第二维(列)的长度for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j] + " ");}}}
}
初始化方式2:列数不确定
import java.util.Scanner;public class Test {public static void main(String[] args) {//动态初始化:数组中的值都是默认值0,需要我们输入值在数组中去int[][] arr = new int[3][];//System.out.println(arr[0][0]);//0arr[0] = new int[1];//使用二维数组的第一维的第1个元素给二维数组的第二维开辟1个整型空间arr[1] = new int[2];//使用二维数组的第一维的第2个元素给二维数组的第二维开辟2个整型空间arr[2] = new int[3];//使用二维数组的第一维的第3个元素给二维数组的第二维开辟3个整型空间Scanner sc = new Scanner(System.in);//输入数据for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {arr[i][j] = sc.nextInt();}}//输出数据//arr.length --> 二维数组中的第一维(行)的长度//arr[i].length --> 二维数组中第二维(列)的长度for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j] + " ");}}}
}
初始化方式3:数据类型[ ][ ] 数组名 =
{
{数据值1,数据值2……}, {数据值1,数据值2……}, {数据值1,数据值2……}
……}
public class Test {public static void main(String[] args) {//初始化方式3//数据类型[][] 数组名 = {{数据值1,数据值2……},{数据值1,数据值2……},{数据值1,数据值2……}……}int[][] arr = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};//3行4列//遍历arr中的值//arr.length --> 二维数组中的第一维(行)的长度//arr[i].length --> 二维数组中第二维(列)的长度for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j] + " ");}}}
}
4.二维数组的细节讨论
1)二维数组的声明方式:int[ ][ ] arr 或 int[ ] arr[ ] 或 int arr[ ][ ]
//二维数组的声明方式:int[ ][ ] arr 或 int[ ] arr[ ] 或 int arr[ ][ ]
//int arr[][] = new int[3][5];//声明方式1:C语言的声明类型
//int[] arr[] = new int[3][5];//声明方式2
int[][] arr = new int[3][5];//声明方式3:Java最常用的声明方式
2)二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可相同,也可不同
public class Test {public static void main(String[] args) {//两个一维数组的长度不相同:第一个长度是2,第二个长度是4int[][] arr = {{1, 2}, {1, 3, 4, 5}};//遍历输出for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j] + " ");}}}
}
5.杨辉三角
1)第一个元素和最后一个元素均是1
2)中间元素均是上一行元素左右元素的和
public class Test {public static void main(String[] args) {int[][] tangle = new int[12][];for (int i = 0; i < tangle.length; i++) {tangle[i] = new int[i + 1];//开辟空间for (int j = 0; j < tangle[i].length; j++) {if (j == 0 || j == tangle[i].length - 1) {tangle[i][j] = 1;} else {tangle[i][j] = tangle[i - 1][j] + tangle[i - 1][j - 1];//中间元素}}}//输出杨辉三角for (int i = 0; i < tangle.length; i++) {for (int j = 0; j < tangle[i].length; j++) {System.out.print(tangle[i][j]);}System.out.println();//换行}}
}
三.基本排序
1.冒泡排序
1)思想:对待排序数组进行从前向后的依次比较相邻元素的值,如果发现有逆序的数则进行交换,使值较大的/较小的逐渐从前向后移动。
2)时间复杂度:O(n^2)
import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int[] arr = new int[6];int i = 0;for(i=0;i<arr.length;i++)arr[i] = sc.nextInt();bubbleSort(arr);//进行冒泡排序for(i=0;i<arr.length;i++) {System.out.print(arr[i] + " ");}}/*** 冒泡排序实现*/public static void bubbleSort(int[] arr) {int i,j;for(i=0;i<arr.length - 1;i++) {for(j=0;j < arr.length - i - 1;j++) {//进行比较交换if(arr[j] > arr[j+1]) {int temp = arr[j];//临时变量帮助交换arr[j] = arr[j+1];arr[j+1] = temp;}}}}
}
四.基本查找
1.顺序查找
1)思想:从给定的一组数据找查找待查找的数据,判断这组数据中是否存在这个待查找的数据
2)时间复杂度:O(n)
import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int[] arr = {1,2,3,4,5,6,7,8,9,10};int searchData = 7;//待查找值int res = find(arr,searchData);//顺序查找if(res == 0)System.out.println("要查找的值" + searchData + "不存在");elseSystem.out.println("要查找值的下标是:" + res);}/*** 顺序查找* @param arr* @param searchData* @return 数组下标*/public static int find(int[] arr, int searchData) {int i = 0;for(i=0;i<arr.length;i++) {//进行比较if(arr[i] == searchData)return i;}return 0;}
}
2.二分查找
1)思想:从有序的数据中,查找目标值,每次取有序数据的一半,然后和目标值进行比较,若大于,则往左边的找,若小于,则往右边找;往复循环,一直到找不到或找到情况
2)时间复杂度:O(logN)
import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int[] arr = {1,2,3,4,5,6,7,8,9,10};//有序数组int searchData = 7;//待查找值int res = binarySearch(arr,searchData);//二分查找if(res == 0)System.out.println("要查找的值" + searchData + "不存在");elseSystem.out.println("要查找值的下标是:" + res);}public static int binarySearch(int[] arr, int searchData) {int left = 0;int right = arr.length - 1;while(left <= right) {//每次mid都要在查找范围的中间int mid = left + (right - left) / 2;//进行比较if(arr[mid] > searchData) {right = mid - 1;} else if(arr[mid] < searchData) {left = mid + 1;} else {return mid;//返回下标}}return 0;//没有查找到}
}
相关文章:
Java数组,简简单单信手沾来~
——数组,一组相同数据类型的数据 一.一维数组 1.数组的基本概念 1)数组用于存储多个同一数据类型的数据 2)数组是数据类型【引用类型】 3)数组的形式:数据类型 [] 4)数组的下标从0开始 5)数…...
认识SourceTree
一. SourceTree是什么 SourceTree是一款免费的Git和Mercurial版本控制系统,它可以帮助开发人员在一个友好的UI界面中管理代码,方便地进行版本控制和代码同步。支持创建、克隆、提交、push、pull 和合并等操作。 二. SourceTree的安装破解 1. 如果你还…...
python之列表推导式
列表推导式是一种简洁的方式来创建列表。它允许您通过在单个表达式中定义循环和条件逻辑,以一种更紧凑的方式生成新的列表。使用列表推导式可以使代码更简洁,易于阅读,并且通常比传统的迭代方法更快。 列表推导式的一般语法形式为:…...

selenium自动化测试之搭建测试环境
自动化测试环境: Python3.7Selenium3.141谷歌浏览器76.0/火狐浏览器 1、安装Python并配置环境变量。 下载并安装:配置环境变量:C:\Python37;C:\Python37\Scripts; 2、安装Pycharm开发工具。 下载地址: 注意下载:Co…...

模拟实现消息队列(以 RabbitMQ 为蓝本)
目录 1. 需求分析1.1 介绍一些核心概念核心概念1核心概念2 1.2 消息队列服务器(Broker Server)要提供的核心 API1.3 交换机类型1.3.1 类型介绍1.3.2 转发规则: 1.4 持久化1.5 关于网络通信1.5.1 客户端与服务器提供的对应方法1.5.2 客户端额外…...

WordPress更换域名后-后台无法进入,网站模版错乱,css失效,网页中图片不显示。完整解决方案(含宝塔设置)
我在实际解决问题时用到了 【简单暴力解决方案】的《方法一:修改wp-config.php》 和 【简单暴力-且特别粗暴-的解决方案】 更换域名时经常遇到的几个问题: 1、更换域名后,后台无法进入 2、更换域名后,网站模版错乱,css失效 3、更换域名后,网页中图片不显示 这是为什…...
无法正确识别车牌(Python、OpenCv、Tesseract)
我正在尝试识别车牌,但出现了错误,例如错误/未读取字符 以下是每个步骤的可视化: 从颜色阈值变形关闭获得遮罩 以绿色突出显示的车牌轮廓过滤器 将板轮廓粘贴到空白遮罩上 Tesseract OCR的预期结果 BP 1309 GD 但我得到的结果是 BP 1309…...

VSCODE[配置ssh免密远程登录]
配置ssh免密远程登录 本文摘录于:https://blog.csdn.net/qq_44571245/article/details/123031276只是做学习备份之用,绝无抄袭之意,有疑惑请联系本人! 这里要注意如下几个地方: 1.要进入.ssh目录创建文件: 2.是拷贝带"ssh-…...

Multi-object navigation in real environments using hybrid policies 论文阅读
论文信息 题目:Multi-object navigation in real environments using hybrid policies 作者:Assem Sadek, Guillaume Bono 来源:CVPR 时间:2023 Abstract 机器人技术中的导航问题通常是通过 SLAM 和规划的结合来解决的。 最近…...

初始多线程
目录 认识线程 线程是什么: 线程与进程的区别 Java中的线程和操作系统线程的关系 创建线程 继承Thread类 实现Runnable接口 其他变形 Thread类及其常见方法 Thread的常见构造方法 Thread类的几个常见属性 Thread类常用的方法 启动一个线程-start() 中断…...
论坛项目day3|开发社区首页
在典型的基于层次结构的软件架构中,特别是在使用MVC(模型-视图-控制器)设计模式的情况下,Controller、Service、DAO(数据访问对象)和Entity通常扮演着不同的角色,并且它们之间有清晰定义的关系。…...

Server - 文字转语音 (Text to Speech) 的在线服务 TTSMaker
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/132287193 TTSMaker 是一款免费的文本转语音工具,提供语音合成服务,支持多种语言,包括英语、法语、德语、西班…...

Python学习笔记_基础篇_数据类型之字符串
一.基本数据类型 整数:int 字符串:str(注:\t等于一个tab键) 布尔值: bool 列表:list 列表用[] 元祖:tuple 元祖用() 字典:dict 注:所有的数据类型都存在想对应…...

(二分查找) 11. 旋转数组的最小数字 ——【Leetcode每日一题】
❓剑指 Offer 11. 旋转数组的最小数字 难度:简单 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转…...
docker 制作tomcat镜像
需要下载tomcat安装包和jdk安装包,我这边下载的jdk版本分别为(jdk和tomcat版本需要对应上) apache-tomcat-9.0.78.tar.gzjdk-8u381-linux-x64.tar.gz创建一个readme.txt空文件 readme.txt创建一个Dockerfile文件 # centos系统作为底层 FROM …...

年之年的选择,组装版
组件:<!--* Author: liuyu liuyuxizhengtech.com* Date: 2023-02-01 16:57:27* LastEditors: wangping wangpingxizhengtech.com* LastEditTime: 2023-06-30 17:25:14* Description: 时间选择年 - 年 --> <template><div class"year-range-pick…...
英语词法——代词
代词是用来代替名词、起名词作用的短语、分句和句子的词。英语中代词根据其意义和作用可分为九类:人称代词、物主代词、反身代词、相互代词、指示代词、疑问代词、不定代词、关系代词和连接代词。 第一节 人称代词 一、人称代词的形式和用法 人称代词单数复数第一人称第二人…...

1475.商品折扣后的最终价格
文章目录 题目描述解题思路:方法一:通俗解法方法二:单调栈 leetcode原题链接 1475. 商品折扣后的最终价格 题目描述 给你一个数组 prices ,其中 prices[i] 是商店里第 i 件商品的价格。 商店里正在进行促销活动,如果你…...
php、 go 语言怎么结合构建高性能高并发商城。
一、php、 go 语言怎么结合构建高性能高并发商城。 将PHP和Go语言结合起来构建高性能高并发的商城系统可以通过多种方法实现,以利用两种语言的优势。下面是一些可能的方法和策略: 1. **微服务架构:** 使用微服务架构,将系统拆分…...

ubuntu 部署 ChatGLM-6B 完整流程 模型量化 Nvidia
ubuntu 部署 ChatGLM-6B 完整流程 模型量化 Nvidia 初环境与设备环境准备克隆模型代码部署 ChatGLM-6B完整代码 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术&#x…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...