Java基础系列--04_数组
一维数组:
(1)数组:存储同一种数据类型的多个元素的容器。
(2)特点:每一个元素都有编号,从0开始,最大编号是数组的长度-1。
编号的专业叫法:索引
(3)定义格式
A:数据类型[] 数组名;(一般用这种写法)
B:数据类型 数组名[];
(4)数组的初始化
A:动态初始化
只给长度,系统给出默认值
举例:int[] arr = new int[3];
B:静态初始化
给出值,系统决定长度
举例:int[] arr = new int[]{1,2,3};
或:int[] arr = {1,2,3};
(5)Java的内存分配
A:栈 存储局部变量(基本类型)
B:堆 存储所有new出来的(引用类型)
C:方法区(类和接口的方法)
D:本地方法区(系统相关)
E:寄存器(CPU使用)
注意:
a:局部变量 在方法定义中或者方法声明上定义的变量。
b:栈内存和堆内存的区别
栈:数据使用完毕,就消失。
堆:每一个new出来的东西都有地址
c:每一个变量都有默认值,并且数据使用完毕后,在垃圾回收器空闲的时候回收。
byte,short,int,long | 0 |
float,double | 0.0 |
char | '\u0000' |
boolean | false |
引用类型 | null |
(6)数组的常见操作
A:遍历
- //方式一:
- public static void printArray(int[] arr) {
- for(int x = 0; x < arr.length; x++) {
- System.out.println(arr[x]);
- }
- }
- //方式2:
- public static void printArray(int[] arr) {
- System.out.print("[");
- for(int x=0; x<arr.length; x++) {
- if(x == arr.length-1) {
- System.out.println(arr[x]+"]");
- }else {
- System.out.println(arr[x]+", ");
- }
- }
- }
B:最值
- //最大值
- public static int getMax(int[] arr) {
- int max = arr[0]; //假设第一个元素就是最大值
- for(int x = 1; x < arr.length; x++) {
- if(arr[x] > max) { //将假设的最大值与其他元素比较,若发现有更大的则直接赋值。
- max = arr[x];
- }
- }
- return max; //返回查找的最大值
- }
- //最小值:
- //与查找最大值的思想是一样的,假设第一个就是最小值,然后逐个进行比较
- public static int getMin(int[] arr) {
- int min = arr[0];
- for(int x = 1; x < arr.length; x++) {
- if(arr[x] < min) {
- min = arr[x];
- }
- }
- return min;
- }
C:逆序
- //方式1:
- public static void reverse(int[] arr) {
- for(int x = 0; x < arr.length/2; x++) {
- int temp = arr[x];
- arr[x] = arr[arr.length-1-x];
- arr[arr.length-1-x] = temp;
- /*使用异或位运算符交换
- arr[x] = arr[x]^arr[arr.length-1-x];
- arr[arr.length-1-x] = arr[x]^arr[arr.length-1-x];
- arr[x] = arr[x]^arr[arr.length-1-x]
- */
- }
- }
- //方式2:
- public static void reverse(int[] arr) {
- for(int start=0,end=arr.length-1; start<=end; start++,end--) {
- int temp = arr[start];
- arr[start] = arr[end];
- arr[end] = temp;
- }
- }
23 //两种方式的思想其实都是一样的,方式一利用了两个元素的索引相加为数组的长度减一;而方式二则是利用了两个变量分别从数组的始末位置相互靠拢,直到两个变量相遇
24 //推荐使用方式一,因为缺少一个变量,代码也更加的简洁,专业。
D:查表
- //根据某个元素吵着在数组中所在的值,不存在返回-1
- public static String getString(String[] strArray,int index) {
- return strArray[index];
- }
E:基本查找
- //方式1:
- public static int getIndex(int[] arr,int value) {
- for(int x=0; x<arr.length; x++) {
- if(arr[x] == value) {
- return x; //找到了就返回索引
- }
- }
- return -1; //没找到就返回-1
- }
- //方式2:比较专业
- public static int getIndex(int[] arr,int value) {
- int index = -1;
- for(int x = 0; x < arr.length; x++) {
- if(arr[x] == value) {
- index = x;
- break; //找到了,修改索引,并跳出循环
- }
- }
- return index; //没找到,返回-1
- }
F:二分查找(数组必须是有序的,假设是从小到大排序)
- public static int getIndex(int[] arr,int value)
- {
- int maxIndex = arr.length-1;
- int minIndex = 0;
- int midIndex = (maxIndex+minIndex)/2;
- while(arr[midIndex]!=value)
- {
- //查找的元素在左边
- if(arr[midIndex]>value){
- maxIndex = midIndex - 1;
- }
- //查找的元素在左边
- else if (arr[midIndex]<value) {
- minIndex = midIndex + 1;
- }
- //找不到
- if(minIndex > maxIndex){
- return -1;
- }
- //每查找一次,就重新定位中间元素的索引
- midIndex = (maxIndex+minIndex)/2;
- }
- return midIndex;
- }
二维数组:
(1)元素是一维数组的数组。
(2)格式:
A:数据类型[][] 数组名 = new 数据类型[m][n];
B:数据类型[][] 数组名 = new 数据类型[m][];
C:数据类型[][] 数组名 = new 数据类型[][]{{...},{...},{...}};
D:数据类型[][] 数组名 = {{...},{...},{...}};
(3)双重for循环遍历
A:二维数组的遍历
B:二维数组的求和
C:杨辉三角形
结论:其实二维数组可以看成是一张表,每一行都相当于是一个一维数组。其实际的操作无非就是从二维转到一维,在使用一维的想想去解决问题
注意:
(1)Java中的参数传递问题
Java中只有值传递。
基本类型:形式参数的改变不影响实际参数
引用类型:形式参数的改变直接影响实际参数
- //参数为基本类型
- public static void main(String[] args){
- int a = 10;
- int b = 20;
- String aStr = "hello";
- String bStr = "world";
- change(a, b);
- changer(aStr, bStr);
- System.out.println("a="+a+"; b="+b); //a=10;b=20
- System.out.println("aStr="+aStr+"; bStr="+bStr); //aStr=world;bStr=hello
- }
- //两个整型交换变量
- public static void change(int a,int b){
- int tem = a;
- a = b;
- b = temp;
- }
- //方法的重载;两个字符串的交换
- public static void change(String aStr,String bStr){
- String tem = aStr;
- aStr = bStr;
- bStr = tempStr;
- }
Java基础系列--04_数组的更多相关文章
- Java基础系列 - 查找数组的最大值和最小值
package com.test6; public class test5 { public static void main(String[] args) { int[] arr = {1, 2, ...
- Java基础系列-ArrayList
原创文章,转载请标注出处:<Java基础系列-ArrayList> 一.概述 ArrayList底层使用的是数组.是List的可变数组实现,这里的可变是针对List而言,而不是底层数组. ...
- Java基础系列--HashMap(JDK1.8)
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/10022092.html Java基础系列-HashMap 1.8 概述 HashMap是 ...
- 夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!
目录 目录 string基础 Java String 类 创建字符串 StringDemo.java 文件代码: String基本用法 创建String对象的常用方法 String中常用的方法,用法如 ...
- 夯实Java基础系列4:一文了解final关键字的特性、使用方法,以及实现原理
目录 final使用 final变量 final修饰基本数据类型变量和引用 final类 final关键字的知识点 final关键字的最佳实践 final的用法 关于空白final final内存分配 ...
- 夯实Java基础系列5:Java文件和Java包结构
目录 Java中的包概念 包的作用 package 的目录结构 设置 CLASSPATH 系统变量 常用jar包 java软件包的类型 dt.jar rt.jar *.java文件的奥秘 *.Java ...
- 夯实Java基础系列6:一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别!
目录 抽象类介绍 为什么要用抽象类 一个抽象类小故事 一个抽象类小游戏 接口介绍 接口与类相似点: 接口与类的区别: 接口特性 抽象类和接口的区别 接口的使用: 接口最佳实践:设计模式中的工厂模式 接 ...
- 夯实Java基础系列9:深入理解Class类和Object类
目录 Java中Class类及用法 Class类原理 如何获得一个Class类对象 使用Class类的对象来生成目标类的实例 Object类 类构造器public Object(); register ...
- 夯实Java基础系列10:深入理解Java中的异常体系
目录 为什么要使用异常 异常基本定义 异常体系 初识异常 异常和错误 异常的处理方式 "不负责任"的throws 纠结的finally throw : JRE也使用的关键字 异常调 ...
随机推荐
- Android studio无法创建类和接口问题解决办法。提示 Unable to parse template "Class"
重新配置了studio 的工作环境, 没问题,后来加需求要新增java类和接口,这就出现问题了,新建的时候,就会报错: Unable to parse template "Interface ...
- python3 购物车
今天干了啥?喂了喂龟,看了看鱼... 然后就是学习了两个模块:sys模块和os模块,突然觉得python真的好,只要英语学的好,看代码超级舒服的说,嗯,我要好好学英语,今天背了几个啥,唉.写完博客再背 ...
- Java小白如何一步步学好Java,听听企业Java培训师的实践经验吧
今天我准备给小主展示一篇Java培训老师的文章,希望能给Java小白一个学好Java的路径或者提示.以下就是原文: 从大学到现在,我使用Java已经将近20年,日常也带实习生,还在公司内部做train ...
- Amqp整合com.rabbitmq.client.ShutdownSignalException: channel error; protocol method异常处理
java.io.IOException at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:126) at com.rabbitmq ...
- Java转PHP的心路历程
首先,我要批评一下自己,已经好久没发博客了.总是拿奇奇怪怪的理由来妨碍自己写博客. emmmm,现在心里舒服一点了. 前提 在2018年的11月7号,我从广州跳槽到一个三线的小城市工作.跳槽原因比较羞 ...
- PHP全栈学习笔记3
trim()函数,用于去除字符串首尾空格和特殊字符 返回的是去掉的空格和特殊字符后的字符串 string trim(string str [,string charlist]); str 要操作的字符 ...
- 用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识
什么是REST REST 是 Representational State Transfer 的缩写. 它是一种架构的风格, 这种风格基于一套预定义的规则, 这些规则描述了网络资源是如何定义和寻址的. ...
- 使用 Moq 测试.NET Core 应用 -- Mock 行为
第一篇文章, 关于Mock的概念介绍: https://www.cnblogs.com/cgzl/p/9294431.html 第二篇文章, 关于方法Mock的介绍: https://www.cnbl ...
- DS控件库 一个简单的血条颜色渐变方案
Private Sub DS按钮1_ButtonClick(Sender As Object) Handles DS按钮1.ButtonClick Dim T As New Threading.Thr ...
- DSAPI 键盘鼠标钩子
通常,说到Hook键盘鼠标,总需要一大堆代码,涉及各种不明白的API.而在DSAPI中,可以说已经把勾子简化到不能再简化的地步.甚至不需要任何示例代码即会使用.那么如何实现呢? Private Wit ...