数组

概念:同一种类型数据的集合,其实数组就是一个容器.

数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素.

格式1:元素类型[] 数组名 = new 元素类型[元素个数];

格式2:元素类型[] 数组名 = new 元素类型[]{元素1,元素2,元素3,....,元素N};

内存的划分:
1:寄存器
2:本地方法区
3:方法区
4:栈内存
  存储的都是局部变量
  而且变量所属的作用域一旦结束,该变量就自动释放
5: 堆内存
存储的是数组和对象(其实数组就是对象) 凡是new 建立的都在堆中.
特点:
1.每一个实体都有首地址值
2.堆内存中的每一个变量都有默认初始化值,根据类型的不同而不同.

class ArrayDemo
{
public static void main(String[] args)
{
int[] arr = new int[3];
System.out.println(arr(3)); //ArrayIndexOutOfBoundsException
//当访问到数组中不存在的角标时,就会发生该异常. arr = null;
System.out.println(arr[0]);//NullpointerExeception
//当引用变量没有任何实体指向时,还在用其操作实体,就会发生该异常.
}
}

对数组操作最基本的动作就是存和取。
核心思想:就是对角标的操作。

常见数组应用算法

数组遍历

int[] arr = {89,34,280,15};
for (int x = 0; x<arr.length ; x++ )
{
System.out.println(arr[x]);
}

数组最值

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 getMax(int[] arr)
{
//定义变量记录较大的值
int max = 0;
for (int x=1; x<arr.length ; x++ )
{
if(arr[x]>arr[max])
{
max = x;
}
}
return arr[max]; //这里返回的最大值的角标
}

选择排序

public static void selectSort(int[] arr)
{
for (int x=0; x<arr.length ; x++ )
{
for (int y=x+1; y<arr.length ; y++ )
{
if (arr[x]>arr[y])
{
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}
}

冒泡排序

/*
内循环:
-1: 为了避免角标越界
-x: 为了让外循环增加一次,内循环参数与比较的元素个数递减.
*/
for (int x=0; x<arr.length ; x++ )
{
for (int y=0; y<arr.length-1-x ; y++ )
{
if (arr[y]>arr[y+1])
{
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
// 方法二:
for (int x=arr.length-1; x>0 ; x-- )
{
for (int y=0; y<x ; y++ )
{
if (arr[y]>arr[y+1])
{
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}

查找: 返回数组的角标

public static getIndex(int[] arr,int value)
{
for (int x=0; x<arr.length ; x++ )
{
if (arr[x] == key)
{
return x;
}
}
return -1;
}

进制转换 10->16

public static void toHex(int num)
{
for (int x=0; x<8 ; x++ )
{
int temp = num & 15;
if (temp>9)
System.out.print((char)(temp-10+'A'));
else
System.out.print(temp);
num = num >>> 4;
}
}

什么时候使用数组呢?
如果数据出现了对应关系,而且对应关系的一方是有序的数字编号,并作为角标使用。这时就必须要想到数组的使用。

就可以将这些数据存储到数组中,根据运算的结果作为角标直接去查数组中对应的元素即可。
这种方式: 称为查表法.

public static void toHex_1(int num)
{
// 定义一个对应关系表
char[] chs = {'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'}; for(int x=0; x<8; x++)
{
int temp = num & 15;
System.out.println(chs[temp]);
num = num >>> 4;
}
}//但是这个方法显示出来的写过是反着的 public static void toHex_2(int num)
{
if (num == 0)
{
System.out.println("0");
return;
}
//定义一个对应关系表
char[] chs = {'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};
/*
一会查表会查到比较多的数据
数据一多,就先存储起来,在进行操作.
所以定义一个数组---临时容器.
*/
char[] = arr = new char[8];
int pos = arr.length; while(num != 0)
{
int temp = num & 15;
arr[--pos] = chs[temp];
num = num >>> 4;
} System.out.println("pos=" + pos);
for (int x = pos; x<arr.length ; x++ )
{
System.out.println(arr[x] + ",");
}
}

二维数组定义的格式

class Array2Demo
{
public static void main(String[] args)
{
int[][] arr = new int[3][2]; //这就是二维数组的定义格式.
//该数组中有3个大箱子,每个大箱子中有2个小箱子 System.out.println(arr); //[I@15db9742 @左边是实体的类型. @右边是实体的哈希值.
System.out.println(arr);//直接打印二维数组
System.out.println(arr[0]); //直接打印二维数组中角标0下面的一维数组 /*********************************************************************/ int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[1];
arr[2] = new int[3];
//分别对二维数组中的每一个小数组进行初始化. /**********************************************************************/ int[][] arr = new int[3][2];
System.out.println(arr.length); //打印二维数组的长度,其实就是一维数组的个数
System.out.println(arr[1].length); /***********************************************************************/ //第二种定义方式
int[][] arr = {{8,3,6},{7,4,9},{3,0,7}};
int sum = 0; //遍历二维数组
for (int x=0; x<arr.length ; x++ )
{
for (int y=0; y<arr[x].length ; y++ )
{
System.out.println(arr[x][y]+",");
sum += arr[x][y];
}
}
System.out.println("sum="+sum);
}
}

Java学习个人备忘录之数组的更多相关文章

  1. Java学习个人备忘录之数组工具类

    下面主要讲解一个针对数组操作的工具类. a.java -- 工具类文件 //按理来说要先编译本文件, 然后再编译主函数 class ArrayTool { /* 获取整型数组的最大值 */ publi ...

  2. java学习之二维数组

    java当中的二维数组,存储一组比较特殊的对象.他存储一个数组,同时存储的数组当中又存储着元素. java二维数组的声明方式一: class Arr2Demo { public static void ...

  3. java学习第三天 数组

    java中数组一样存在多维,二维数组,三维数组..... 二维数组的定义  格式: 数据类型 [][] 数组名 = new 数据类型 [][]; 动态初始化 数据类型[][] 数组名 =  new 数 ...

  4. Java学习第四篇:数组,排序,查找

    一.数组 1.一维数组 (1).数组的定义 数据类型 数组名[]=new 数据类型[大小] public class Demo1 { public static void main(String[] ...

  5. java学习(三)数组

    一维数组的定义格式: int[] a;  //定义一个int类型的数组a变量 int a[];  //定义一个int类型的a数组变量 初始化一个int类型的数组 int[]   arr = new i ...

  6. Java学习个人备忘录之异常

    概述 异常:是在运行时期发生的不正常情况. 在java中用类的形式对不正常情况进行了描述和封装对象. 描述不正常的情况的类,就称为异常类. 以前正常流程代码和问题处理代码相结合,现在将正常流程代码和问 ...

  7. Java学习个人备忘录之文档注释

    文档注释 单行注释用 // 多行注释有两种,第一种是 /* 内容 */,第二种是/** 内容 */. 这两种多行注释的区别是/** 内容 */这种注释可以生成一个该文件的注释文档,下面是演示代码. A ...

  8. Java学习个人备忘录之关键字static

    被static标记的东西会放在内存中被共享的,对象用到时,就会来取的. class Person { String name; //成员变量,实例变量 static String country = ...

  9. Java学习个人备忘录之入门基础

    临时配置环境方式:查看path下的环境变量 set path修改path下的环境变量 set path=haha删除path下的环境变量 set path=查看当前java的版本 javac -ver ...

随机推荐

  1. pom.xml文件报MavenArchiver错误 org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.apache.maven.archiver.MavenArchiveConfiguration)

    第一种方式 war项目 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId> ...

  2. 常用的JavaScript设计模式(一)Constructor(构造器)模式

    在es6中,新增了一个语法糖--class,可以说是为JavaScript引入了类的概念.而在传统的JavaScript中,则是通过构造器生成实例对象的. JavaScript支持特殊的constru ...

  3. sample采样倾斜key并单独进行join代码

    /** * sample采样倾斜key单独进行join */ JavaPairRDD<Long, String> sampledRDD = userid2PartAggrInfoRDD.s ...

  4. python爬xx图代码

    今日 好热,照样是挖洞挖不到,看了几天的python爬虫,学会了xpath解析 撸一个代码玩玩] 不要说什么,优化之类的,刚学完,跑了一阵 ,还可以  挺稳定 # -*- coding:utf-8 - ...

  5. 使用bison和yacc制作脚本语言(2)

    我们先来想一下语法 一般脚本语言不需要定义类型直接在赋值的时候确定 我们主要考虑一下变量的类型 a = 1; b = 1.1; c = "str"; 一般来讲,我们使用这三种类型, ...

  6. java入门---基本数据类型之引用数据类型&数据类型转换

        接着上一篇文章来,这次就先看看什么是引用数据类型?首先得满足以下条件: 在Java中,引用类型的变量非常类似于C/C++的指针.引用类型指向一个对象,指向对象的变量是引用变量.这些变量在声明时 ...

  7. Java和JDK版本的关系

    JAVA的版本最开始是1995年的JDK Alpha and Beta版本,第二年发布JDK1.0版本之后就是JDK1.1,JDK1.2.到1998年,不再叫JDK了,而是叫J2SE,但是版本号还是继 ...

  8. 西安Uber优步司机奖励政策(8月10日到8月16日)

    1) 工作日(周一到周五)早高峰时间段(7点到9:30点).晚高峰时间段(5点到8点)车费 2.0 倍,每单奖励部分上限35元 例:在高峰时段中,假设行程基本车费为¥15,只要达到奖励前提,最后你将获 ...

  9. 【机器学习笔记】EM算法及其应用

    极大似然估计 考虑一个高斯分布\(p(\mathbf{x}\mid{\theta})\),其中\(\theta=(\mu,\Sigma)\).样本集\(X=\{x_1,...,x_N\}\)中每个样本 ...

  10. python 解决url编译

    from urllib import parse s = parse.unquote("%7B%22name%22%3A%22joe%22%2C%22age%22%3A%2223%22%7D ...