一维数组:
  (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_数组的更多相关文章

  1. Java基础系列 - 查找数组的最大值和最小值

    package com.test6; public class test5 { public static void main(String[] args) { int[] arr = {1, 2, ...

  2. Java基础系列-ArrayList

    原创文章,转载请标注出处:<Java基础系列-ArrayList> 一.概述 ArrayList底层使用的是数组.是List的可变数组实现,这里的可变是针对List而言,而不是底层数组. ...

  3. Java基础系列--HashMap(JDK1.8)

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/10022092.html Java基础系列-HashMap 1.8 概述 HashMap是 ...

  4. 夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!

    目录 目录 string基础 Java String 类 创建字符串 StringDemo.java 文件代码: String基本用法 创建String对象的常用方法 String中常用的方法,用法如 ...

  5. 夯实Java基础系列4:一文了解final关键字的特性、使用方法,以及实现原理

    目录 final使用 final变量 final修饰基本数据类型变量和引用 final类 final关键字的知识点 final关键字的最佳实践 final的用法 关于空白final final内存分配 ...

  6. 夯实Java基础系列5:Java文件和Java包结构

    目录 Java中的包概念 包的作用 package 的目录结构 设置 CLASSPATH 系统变量 常用jar包 java软件包的类型 dt.jar rt.jar *.java文件的奥秘 *.Java ...

  7. 夯实Java基础系列6:一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别!

    目录 抽象类介绍 为什么要用抽象类 一个抽象类小故事 一个抽象类小游戏 接口介绍 接口与类相似点: 接口与类的区别: 接口特性 抽象类和接口的区别 接口的使用: 接口最佳实践:设计模式中的工厂模式 接 ...

  8. 夯实Java基础系列9:深入理解Class类和Object类

    目录 Java中Class类及用法 Class类原理 如何获得一个Class类对象 使用Class类的对象来生成目标类的实例 Object类 类构造器public Object(); register ...

  9. 夯实Java基础系列10:深入理解Java中的异常体系

    目录 为什么要使用异常 异常基本定义 异常体系 初识异常 异常和错误 异常的处理方式 "不负责任"的throws 纠结的finally throw : JRE也使用的关键字 异常调 ...

随机推荐

  1. Chrome启动后打开第一个网页很慢的解决方案

    Chrome启动后打开第一个网页很慢的解决方案 Chrome/Chromium以速度快著称,最近每当打开chrome的时候,打开第一个页面都非常慢,往往需要数十秒的时间,经分 析,应该是卡在了域名解析 ...

  2. redis数据操作

    数据结构 redis是key-value的数据结构,每条数据都是一条字符串.注意:键的类型是字符串,并且不能重复. 值的类型分5种: 字符串string 哈希hash 列表list 集合set 有序集 ...

  3. 使用WSL吧

    WSL(Windows Subsystem for Linux)已经装在电脑上好一阵子了,谁如果还没装的,可以看看本文,至少知道个大概,觉得有用的话知道该如何做. 简介 WSL简单说就是一个能让你在W ...

  4. ansible基础-变量

    一 变量的命名规范 变量的命名应该符如下合两个规范: 变量应该由字母.数字.下划线组成 变量应该以字母开头 例如:host_port.HOST_PORT.var5是符合命名规范的,foo-port. ...

  5. ArrayBlockQueue源码解析

    清明节和朋友去被抖音带火的一个餐厅,下午两点钟取晚上的号,前面已经有十几桌了,四点半餐厅开始正式营业,等轮到我们已经近八点了.餐厅分为几个区域,只有最火的区域(在小船上)需要排号,其他区域基本上是随到 ...

  6. colly源码学习

    colly源码学习 colly是一个golang写的网络爬虫.它使用起来非常顺手.看了一下它的源码,质量也是非常好的.本文就阅读一下它的源码. 使用示例 func main() { c := coll ...

  7. MyX5TbsPlusDemo【体验腾讯浏览服务Android SDK (TbsPlus 版)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 按照官网上的说明:只需接入aar文件和调用一个接口即可完成TBS接入,我们会通过全屏Activity展示TBS WebView,适用 ...

  8. unity中ScriptableObject在assetbundle中的加载

    转载请标明出处:http://www.cnblogs.com/zblade/ 以前都是写一些个人的调研博客,从今天开始,也写一些个人在开发中遇到的一些可以分享的趟坑博客,为后续的开发人员提供一些绵薄之 ...

  9. .NET Core 技巧汇总篇

    前言 本篇幅会专门记录在工作中实际碰到的问题场景,和一些比较好的实现方法作为汇总,可以供各位借鉴和参考,当然 本人入行不深,能力有限,仅供各位借鉴和参考.欢迎补充 技巧一:引入其他项目类库文件 做项目 ...

  10. SpringBoot系列——jar包与war包的部署

    前言 Spring Boot支持传统部署和更现代的部署形式.jar跟war都支持,这里参考springboot参考手册学习记录 两种方式 jar springboot项目支持创建可执行Jar,参考手册 ...