数组

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

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

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

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

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

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

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

常见数组应用算法

数组遍历

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

数组最值

  1. public static int getMax(int[] arr)
  2. {
  3. //定义变量记录较大的值
  4. int max = arr[0];
  5. for (int x=1; x<arr.length ; x++ )
  6. {
  7. if(arr[x]>max)
  8. {
  9. max = arr[x];
  10. }
  11. }
  12. return max;
  13. }
  1. //第二种方法
  2. public static int getMax(int[] arr)
  3. {
  4. //定义变量记录较大的值
  5. int max = 0;
  6. for (int x=1; x<arr.length ; x++ )
  7. {
  8. if(arr[x]>arr[max])
  9. {
  10. max = x;
  11. }
  12. }
  13. return arr[max]; //这里返回的最大值的角标
  14. }

选择排序

  1. public static void selectSort(int[] arr)
  2. {
  3. for (int x=0; x<arr.length ; x++ )
  4. {
  5. for (int y=x+1; y<arr.length ; y++ )
  6. {
  7. if (arr[x]>arr[y])
  8. {
  9. int temp = arr[x];
  10. arr[x] = arr[y];
  11. arr[y] = temp;
  12. }
  13. }
  14. }
  15. }

冒泡排序

  1. /*
  2. 内循环:
  3. -1: 为了避免角标越界
  4. -x: 为了让外循环增加一次,内循环参数与比较的元素个数递减.
  5. */
  6. for (int x=0; x<arr.length ; x++ )
  7. {
  8. for (int y=0; y<arr.length-1-x ; y++ )
  9. {
  10. if (arr[y]>arr[y+1])
  11. {
  12. int temp = arr[y];
  13. arr[y] = arr[y+1];
  14. arr[y+1] = temp;
  15. }
  16. }
  17. }
  18. // 方法二:
  19. for (int x=arr.length-1; x>0 ; x-- )
  20. {
  21. for (int y=0; y<x ; y++ )
  22. {
  23. if (arr[y]>arr[y+1])
  24. {
  25. int temp = arr[y];
  26. arr[y] = arr[y+1];
  27. arr[y+1] = temp;
  28. }
  29. }
  30. }

查找: 返回数组的角标

  1. public static getIndex(int[] arr,int value)
  2. {
  3. for (int x=0; x<arr.length ; x++ )
  4. {
  5. if (arr[x] == key)
  6. {
  7. return x;
  8. }
  9. }
  10. return -1;
  11. }

进制转换 10->16

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

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

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

  1. public static void toHex_1(int num)
  2. {
  3. // 定义一个对应关系表
  4. char[] chs = {'0','1','2','3',
  5. '4','5','6','7',
  6. '8','9','A','B',
  7. 'C','D','E','F'};
  8.  
  9. for(int x=0; x<8; x++)
  10. {
  11. int temp = num & 15;
  12. System.out.println(chs[temp]);
  13. num = num >>> 4;
  14. }
  15. }//但是这个方法显示出来的写过是反着的
  16.  
  17. public static void toHex_2(int num)
  18. {
  19. if (num == 0)
  20. {
  21. System.out.println("0");
  22. return;
  23. }
  24. //定义一个对应关系表
  25. char[] chs = {'0','1','2','3',
  26. '4','5','6','7',
  27. '8','9','A','B',
  28. 'C','D','E','F'};
  29. /*
  30. 一会查表会查到比较多的数据
  31. 数据一多,就先存储起来,在进行操作.
  32. 所以定义一个数组---临时容器.
  33. */
  34. char[] = arr = new char[8];
  35. int pos = arr.length;
  36.  
  37. while(num != 0)
  38. {
  39. int temp = num & 15;
  40. arr[--pos] = chs[temp];
  41. num = num >>> 4;
  42. }
  43.  
  44. System.out.println("pos=" + pos);
  45. for (int x = pos; x<arr.length ; x++ )
  46. {
  47. System.out.println(arr[x] + ",");
  48. }
  49. }

二维数组定义的格式

  1. class Array2Demo
  2. {
  3. public static void main(String[] args)
  4. {
  5. int[][] arr = new int[3][2]; //这就是二维数组的定义格式.
  6. //该数组中有3个大箱子,每个大箱子中有2个小箱子
  7.  
  8. System.out.println(arr); //[I@15db9742 @左边是实体的类型. @右边是实体的哈希值.
  9. System.out.println(arr);//直接打印二维数组
  10. System.out.println(arr[0]); //直接打印二维数组中角标0下面的一维数组
  11.  
  12. /*********************************************************************/
  13.  
  14. int[][] arr = new int[3][];
  15. arr[0] = new int[2];
  16. arr[1] = new int[1];
  17. arr[2] = new int[3];
  18. //分别对二维数组中的每一个小数组进行初始化.
  19.  
  20. /**********************************************************************/
  21.  
  22. int[][] arr = new int[3][2];
  23. System.out.println(arr.length); //打印二维数组的长度,其实就是一维数组的个数
  24. System.out.println(arr[1].length);
  25.  
  26. /***********************************************************************/
  27.  
  28. //第二种定义方式
  29. int[][] arr = {{8,3,6},{7,4,9},{3,0,7}};
  30. int sum = 0;
  31.  
  32. //遍历二维数组
  33. for (int x=0; x<arr.length ; x++ )
  34. {
  35. for (int y=0; y<arr[x].length ; y++ )
  36. {
  37. System.out.println(arr[x][y]+",");
  38. sum += arr[x][y];
  39. }
  40. }
  41. System.out.println("sum="+sum);
  42. }
  43. }

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. vue2.0 接收url参数

    1) 路由配置传参方式在配置路由时 例如 "/firewall/authorize/:uid/:uname/:token"页面url为 http://XXX.com/firewal ...

  2. Flask的request和session是从哪里来的?

    因为之前一直在项目中使用django, 所以在学习Flask的过程中, 难免对吧django和Flask进行对比, 这一次我发现Flask中的request和session并没有想象的那么简单, 所以 ...

  3. Java核心技术36讲----------谈谈final、finally、finalize有什么不同

    一.final 1.final修饰方法时,需要注意的点: #final修饰方法时,之前的第二个原因是效率.但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升.在最近的Java版本中,不需要使用 ...

  4. html 的radio单选框如何实现互斥------radio只是input的type属性

    先看看没有互斥的情况: <html> <body> 男性:<input type="radio" id="male" /> ...

  5. PAT A1127 ZigZagging on a Tree (30 分)

    Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can ...

  6. python学习之文件读写入门(文件读的几种方式比较)

    1.文件读写简单实例:(以w写的方式打开一个文件,以r读一个文件) # Author : xiajinqi # 文件读写的几种方式 # 文件读写 f = open("D://test.txt ...

  7. php7+apache2.4+mysql 环境配置(window环境)

    最近,小主从事PHP开发.特将最近如何搭建php7的过程记录在此!希望有需要,可以借鉴!( 电脑必须win7 sp1以上, .netframework4 ) Windows7安装php7,Win7+p ...

  8. 04IP编址(网络层)

    帧中type为0x0800,送给ip   ip报文结构 TTL 生存时间最大为255,经过三层设备就减1 protocol:协议号 version:4,6 source ip address:源ip编 ...

  9. EEPROM读写学习笔记与I2C总线(二)

    无论任何电子产品都会涉及到数据的产生与数据的保存,这个数据可能并不是用来长久保存,只是在运行程序才会用到,有些数据体量较大对于获取时效性并不太强,各种各样的数据也就有不同的存储载体,这次在EEPROM ...

  10. 【8086汇编-Day6】关于loop的实验

    实验内容 因为是要复制代码,所以常规来做是取代码段地址来用,所以把cs值mov给ax,但是这只是临时的,ax之后还有别的用途,那就把指令当作数据来存(把ax值 mov给ds,表示这一段地址用作代码段, ...