数组的概念

同一种类型数据的集合。其实数组就是一个容器。

数组的好处

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

数组的格式

元素类型[] 数组名 = new 元素类型[个数];

int[] arr = new int[5];

元素类型[] 数组名 = new 元素类型[]{元素1,元素2,……};

int[] arr = new int[]{1,3,5,7};

元素类型[] 数组名 = {元素1,元素2,……};

int[] arr = {1,3,5,7};

内存结构

Java程序在运行时,需要在内存中的分配空间。为了提高运算效率,又对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

栈内存:

用于存储局部变量,当数据使用完,所占空间会自动释放。

堆内存:

数组和对象,通过new建立的实例都存放在堆内存中。

每一个实体都有内存地址值

实体中的变量都有默认初始化值

实体不再被使用,会在不确定的时间内被垃圾回收器回收

数组的内存结构

二维数组

格式

格式一:int[][] arr = new int[2][3];

格式二:int[][] arr = new int[2][];

格式三:int[][] arr = {{2,3,4}{5,6,7}};

特殊格式:int[] x,y[];:此处,x为一维数组,y为二维数组

数组的常见操作

冒泡排序

   1: class Sort

   2: {

   3:     private Sort(){}

   4:  

   5:     //exchange

   6:     private static void exchange(int[] arr,int x,int y)

   7:     {

   8:         arr[x] = arr[x]^arr[y];

   9:         arr[y] = arr[x]^arr[y];

  10:         arr[x] = arr[x]^arr[y];

  11:     }

  12:  

  13:     //bubble sort

  14:     public static void bubbleSort(int[] arr)

  15:     {

  16:         for(int x = 0 ; x < arr.length-1 ; x ++)

  17:         {

  18:             for(int y = 0 ; y < arr.length-x-1 ; y ++)

  19:             {

  20:                 if(arr[y] > arr[y+1])

  21:                 {

  22:                     exchange(arr,y,y+1);

  23:                 }

  24:             }

  25:         }

  26:     }

  27:  

  28:     //print arr

  29:     public static void printArr(int[] arr)

  30:     {

  31:         for(int x = 0 ; x < arr.length ; x ++)

  32:         {

  33:             if(x != arr.length-1)

  34:                 System.out.print(arr[x]+",");

  35:             else

  36:                 System.out.println(arr[x]);

  37:         }

  38:     }        

  39: }

  40: class SortDemo 

  41: {

  42:     public static void main(String[] args) 

  43:     {

  44:         int[] arr = {8,7,6,5,4,3,1,2};

  45:  

  46:         Sort.printArr(arr);

  47:  

  48:         Sort.bubbleSort(arr);

  49:  

  50:         Sort.printArr(arr);

  51:     }

  52: }

折半查找

   1: class Search

   2: {

   3:     private Search(){};

   4:  

   5:     //half search

   6:     public static int halfSearch(int[] arr,int key)

   7:     {

   8:         int min,mid,max;

   9:         

  10:         min = 0;

  11:         max = arr.length-1;

  12:         

  13:  

  14:         while(max >= min)

  15:         {

  16:             mid = (min+max)/2;

  17:  

  18:             if(key < arr[mid])

  19:                 max = mid - 1;

  20:             if(key > arr[mid])

  21:                 min = mid + 1;

  22:             if(key == arr[mid])

  23:                 return mid;

  24:         }

  25:         return -1;

  26:     }

  27:  

  28: }

  29: class SearchDemo 

  30: {

  31:     public static void main(String[] args) 

  32:     {

  33:         int[] arr = {1,2,3,4,5,6,7,8,9};

  34:  

  35:         int index = Search.halfSearch(arr,10);

  36:  

  37:         if(index == -1)

  38:             System.out.println("No key in this arr!");

  39:         else

  40:             System.out.println("index = "+index);

  41:     }

  42: }

幸运儿问题

   1: /*

   2: 10个小孩围成一圈,从第一个小孩算起,数到3,

   3: 则第三个小孩出列,接着向下数,数到3,

   4: 则该小孩出列,求最后留下的小孩是哪个

   5: */

   6:  

   7: class LuckyNumber 

   8: {

   9:     public static void main(String[] args) 

  10:     {

  11:         findLuck(10);

  12:     }

  13:  

  14:     public static void findLuck(int num)

  15:     {

  16:         int[] arr = new int[num];

  17:         

  18:         for(int i = 0 ; i < arr.length ; i ++)

  19:         {

  20:             arr[i] = 1;

  21:         }

  22:         //用于实际计数

  23:         int pos = 0;

  24:         //最终需要出圈的人数

  25:         int size = num;

  26:         

  27:         while(true)

  28:         {

  29:             for(int i = 0 ; i < arr.length ; i ++)

  30:             {

  31:                 pos++;

  32:                 if(arr[i] == 0)

  33:                     pos--;

  34:                 else if(pos%3 == 0)

  35:                 {

  36:                     arr[i] = 0;

  37:                     size--;

  38:                     //当所有人都出去之时,最后一个即为结果

  39:                     if(size == 0)

  40:                     {

  41:                         System.out.println("index = "+i);

  42:                         return;

  43:                     }

  44:                 }    

  45:             }

  46:         }

  47:     }

  48: }

Java笔记(八)……数组的更多相关文章

  1. Java笔记之数组

    1.int flags[] = new int[10];数组中的每个元素初始化为0. Arrays.fill(flags, 0);将数组中每个元素置为0.

  2. [java笔记]动态数组

    private int count;//计数器 private int ary[] = new int [3]; if(count >= ary.length){ //数组动态扩展 int ne ...

  3. Go语言学习笔记八: 数组

    Go语言学习笔记八: 数组 数组地球人都知道.所以只说说Go语言的特殊(奇葩)写法. 我一直在想一个人参与了两种语言的设计,但是最后两种语言的语法差异这么大.这是自己否定自己么,为什么不与之前统一一下 ...

  4. Java学习笔记四:Java的八种基本数据类型

    Java的八种基本数据类型 Java语言提供了八种基本类型.六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型. Java基本类型共有八种,基本类型可以分为三类,字符类型char,布 ...

  5. Java IO学习笔记八:Netty入门

    作者:Grey 原文地址:Java IO学习笔记八:Netty入门 多路复用多线程方式还是有点麻烦,Netty帮我们做了封装,大大简化了编码的复杂度,接下来熟悉一下netty的基本使用. Netty+ ...

  6. [java小笔记] 关于数组内存管理的理解

    数组是大多数编程语言都提供的一种复合结构,如果程序需要多个类型相同的变量时,就可以考虑定义一个数组,java语言的数组变量时引用类型的变量,因此具有java引用变量的特性.在使用数组之前必须对数组对象 ...

  7. 【原】Java学习笔记011 - 数组

    package cn.temptation; import java.util.Scanner; public class Sample01 { public static void main(Str ...

  8. java笔记 -- 数组

    概念: 数组是一种数据结构, 用来存储同一类型值的集合. 通过一个整型的下标可以访问数组中的每一个值. 声明: int[] a(推荐,将类型int[](整形数组)和变量名分开了) 或者int a[] ...

  9. 菜鸡的Java笔记 第七 - java 数组

    数组的基本概念     笔试中经常出现的试题或是问题    1.1 概念        数组指的是一组相关变量的集合         如果用最原始的方式定义100个变量的话没问题但是这些变量的关联实在 ...

随机推荐

  1. CentOS下shell显示-bash-4.1#不显示用户名路径的解决方法

    CentOS下shell显示-bash-4.1$不显示用户名路径的解决方法 问题描述: CentOS下新增一个用户,登录进去之后shell脚本的信息如下: 而不是我们经常看到的username@hos ...

  2. mcollective安装过程

    参考 http://kisspuppet.com/2013/11/10/mcollective-middleware/ http://5lexin.com/blog/view/225/mco-ping ...

  3. 【原创】一起学C++ 之 字符串 ---------C++ primer plus(第6版)

    C++ Primer Plus 第6版 字符串:是存储在内存的连续字节中的一系列字符. C++处理字符串的方式有2种: 一.来自C语言.常被称为C-风格字符串(C-Style-string) 1)从字 ...

  4. Linux下为PHP安装oci8及pdo_oci扩展

    下载instantclient 以及sdk instantclient-basic-linux-x86-64-11.2.0.2.0.zip oracle-instantclient11.2-sdk-1 ...

  5. 软件测试 -- alpha测试和beta测试的区别

    alpha测试是在用户组织模拟软件系统的运行环境下的一种验收测试,由用户或第三方测试公司进行的测试,模拟各类用户行为对即将面市的软件产品进行测试,试图发现并修改错误. Beta测试是用户公司组织各方面 ...

  6. 一步步学习ASP.NET MVC3 (14)——Route路由

    请注明转载地址:http://www.cnblogs.com/arhat 由于今天是星期六,所以多写几篇,感觉前几天的忙碌没有及时发布文章,趁着周末老魏尽力的多写几篇文章.因为本系列基本上快结束了,所 ...

  7. PHP漏洞全解(七)-Session劫持

    本文主要介绍针对PHP网站Session劫持.session劫持是一种比较复杂的攻击方法.大部分互联网上的电脑多存在被攻击的危险.这是一种劫持tcp协议的方法,所以几乎所有的局域网,都存在被劫持可能. ...

  8. [杂题]CSUOJ1413 Area of a Fractal

    题目链接 题意:题中给了图,所以不看字大概也知道  求的是第n个图形的面积. 就是找规律 递推 一类的... 先给结论: 很鬼畜的公式:    $\displaystyle\frac{3\times ...

  9. easyui源码翻译1.32--ValidateBox(验证框)

    前言 使用$.fn.validatebox.defaults重写默认值对象.下载该插件翻译源码 validatebox(验证框)的设计目的是为了验证输入的表单字段是否有效.如果用户输入了无效的值,它将 ...

  10. Android游戏快速入门(一):基础储备

    智能手机时代已经到来了,手机的性能正在以你我惊讶的速度提升.那么手机游戏也在迅速发展,从简单的平面单机游戏不断的向复杂的3D网络游戏发展.所以,手机游戏的市场肯定也在不断扩张.那么,作为程序猿,我们也 ...