四.数组

数组就是主函数(main方法)中的参数:
public static void main(String[] args){
    
}
数组是指一组数据的集合,数组中的每个数据称为元素。在Java中,数组也是Java对象。数组中的元素可以是任意类型(包括基本类型和引用类型),但同一个数组里只能存放类型相同的元素。创建数组大致包括如下步骤:    
. 声明一个数组类型的引用变量,简称为数组变量;
. 用new语句构造数组的实例。new语句为数组分配内存,并且为数组中的每个元素赋予默认值;
. 初始化,即为数组的每个元素设置合适的初始值。

即:声明/创建/初始化赋值

一.数组声明

声明数组:
    1) 一个存放同一类型数据的集合
       a. 即可以是基本类型,也可以是对象类型;
       b. 数组中的每个数据为元素;
    2) 数组是一个对象,成员是数组长度和数组中的元素;
    3) 声明了一个数组变量并不是创建了一个对象;
    4) 声明数组的方式:

int[] IArray 或者 int IArray[]     基本数据类型数组,数组中存放的是基本数据类型。
       Teacher[] tArray 或者 Teacher tArray[]    类类型数组,数组中存放的是Teacher类创建的若干个的对象。

注意:1) 声明数组变量的时侯,不能指定数组的长度,以下声明方式是非法的。

int x[1];
             int[2] x;

二.初始化

初始化:自变量创建后首次赋值的过程;

1.创建数组对象

数组对象和其他Java对象一样,也用new语句创建;

int[] iArray = new int[2];

new int[2]语句执行以下步骤:

a. 在堆区中为数组分配内存空间,以上代码创建了一个包含2个元素的int数组
       b. 为数组中的每个元素赋予其数据类型的默认值。
          byte/short/int/long     0
          float            0.0f
          double                0.0d
          String                null
          char                     '\u0000'
          boolean                  false
       c. 返回数组对象的引用
       
       在用new语句创建数组对象时,需要指定数组长度。数组长度表示数组中包含的元素数目。数组长度可以用具体的数值表示,也可以用
       变量表示。如:
   
       int[] x = new int[10];
       或
       int size=10;
       int[] x = new int[size];

数组的长度可以为0,此时数组中一个元素也没有。例如:

int[] x = new int[0];

对于Java类的程序入口方法main(String args[]),如果运行时这个类没有输入参数,那么main()方法的参数args并不是null, 而是一个
       长度为0的数组。例如:

public class Sample {
           public static void main(String[] args) {
                System.out.println(args.length);           //打印0
           }
       }

数组对象创建后,它的长度是固定的。数组对象的长度是无法改变的,但是数组变量可以改变所引用的数组对象。

int[] x = new int[3];
       int[] y = x;
       x = new int[4];

2. 初始化数组对象

数组中的每个元素都有一个索引,或者称为下标。数组中的第一个元素的索引为0,第二个元素的索引为1, 依次类推。
       通过索引可以访问数组中的元素或者给数组中元素内容赋值。

1) 声明、创建、初始化分开:
      //声明
          int[] iArray;
          //创建
          iArray = new int[2];
      //初始化
          iArray[0] = 0;
          iArray[1] = 1;

2) 声明、创建的同时并初始化数组;

int[] iArray = {0, 1};
      int[] iArray = new int[]{0, 1};
          Student sArray[] = new Student[] { new Student(“George”, “Male”, 20), new Student()};
          Student[] stArray = { new Student(), new Student()} ;

注意:a.下面这些都是非法的数组初始化方式:
                   int[] x = new int[5]{5,4,3,2,1};           //编译出错,创建数组对象的同时并初始化的时候就不能指定数组长度了;
                   
                   int[] x;
                   x = {5,4,3,2,1};                           //{5,4,3,2,1}必须在声明数组变量的语句中使用,不能单独使用
 课堂练习:1) 求一组值的平均值:

public class ArrayAvgTest {
                      public double avg(int[] n) {
                           double result = 0.0;
                           for(int i=0;i<n.length;i++) {
                                  result += n[i];
                           }
                           result /= n.length;
                           
                           return result;
                      }

public static void main(String[] args) {
                           ArrayAvgTest a = new ArrayAvgTest();
                           int[] a = {100,60,80,90,75,38};
                           System.out.println("Avg score: " + a.avg(a));
                      }
                 }

3. 多维数组

Java支持多维数组。假定某个宾馆有三层楼,第一层有4个房间,第二层有3个房间,第三层有5个房间。某一天客户人住宿情况如
       下图所示:

第三层:           |    |Tom |Jerry|    |Rose|
       第二层:          |Mary|    |Kevin|
       第一层:          |Mike|Jane|Duke |    |

可以用两维数组来存储各个房间的客人信息。

String[][] room = new String[3][];
       room[0] = new Stirng[]{"Mike","Jane","Duke",null};
       room[1] = new String[]{"Mary",null,"kevin"};
       room[2] = new String[]{null,"Tom","Jerry",null,"Rose"}

以上代码等价于:

String[][] room = {
                {"Mike","Jane","Duke",null},
                            {"Mary",null,"kevin"},
                            {null,"Tom","Jerry",null,"Rose"}
             };

多维数组本质上是数组的数组,数组的元素内容还是数组;

写一个类MultiArray.java来创造一个二维数组并输出其中元素

4. 数组的边界

1) 一个数组的下标从0开始,数组通过数组的对象引用变量的下标访问数组。

数组中第一个元素的索引为0, 第二元素的索引为1,依次类推。如果一个数组长度是5,要访问最后一个数组元素可以通过
          下标4来访问,如果通过下标5访问,超出了数组的边界,在运行时会抛出ArrayIndexOutOfBoundsException。

2) 通过调用数组的length方法可以获得一个数组的元素个数(数组长度)。
       
          所有Java数组都有一个length属性,表示数组的长度. 该属性只能读取,但是不能修改。

以下修改数组的length属性,这是非法的。

int[] x = new int[4];
          x.length = 10;            //编译出错,length属性不能被修改。

注:a. 数组变量必须在指向一个数组对象之后,才能访问其元素。

b. 当数组的元素为引用类型时,数组中存放的是对象的引用,而不是对象本身;

2)  求一组值的最大值:

public class ArrayMaxTest {
                      public int max(int[] n) {
                           int result = n[0];
                           for(int i=1;i<n.length;i++) {
                                  if(result<n[i])
                                        result = n[i];
                           }
                          
                           return result;
                      }

public static void main(String[] args) {
                           ArrayMaxTest a = new ArrayMaxTest();
                           int[] n = {100,60,80,90,75,38};
                           System.out.println("Max score: " + a.max(n));
                      }
                 }

3) 数组内容排序

冒泡排序:值较小的数逐渐向数组的顶部(即朝第一个元素)冒上来,就像水中的气泡上升一样,同时,值较大的数据逐渐
                           向数组的底部(即朝最后一个元素)沉下去。这种算法用嵌套的循环对整个数组进行数次遍历,每次遍历都要比
                           较数组中相邻的一对元素,如果这对元素以升序(或者值相等)的顺序排列,那么保持它们的位置不变;如果这
                           对元素以降序的顺序排列,那么交换它们的值。

数组原内容:100,60,80,90,75,38

第一次循环:    60    80    90    75    38    100    
         第二次循环:    60    80    75    38    90    100    
         第三次循环:    60    75    38    80    90    100    
         第四次循环:    60    38    75    80    90    100    
         第五次循环:    38    60    75    80    90    100

public class ArraySortTest {

public void sort(int[] n) {
                for(int i=0;i<n.length-1;i++) {
                    for(int j=0;j<n.length-i-1;j++) {
                        if(n[j]>n[j+1]) {
                            int temp = n[j];
                            n[j] = n[j+1];
                            n[j+1] = temp;
                        }
                    }
                    print(n);
                }
            }
            
            public void print(int[] n) {
                for(int i=0;i<n.length;i++)
                    System.out.print(n[i] + "\t");
                System.out.println();
            }
            
            public static void main(String[] args) {
                ArraySortTest s = new ArraySortTest();
                int[] n = {100,60,80,90,75,38};
                s.sort(n);
                s.print(n);
            }
        }                 
        4)选择排序:
在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找
最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
Selection.java

5) java.util.Arrays辅助类的使用。sort(int[] n)以及

6)从众多手机号码中抽取一个获奖手机号码

public class ArrayRandomTest {
            public String getTel(String[] n) {
                int index = (int)(Math.random()*n.length);
                return n[index];
            }

public static void main(String[] args) {
                ArrayRandomTest a = new ArrayRandomTest();
                String[] n = { "1318259016", "13564560540","13858687810","13999999999"};
                System.out.println(a.getTel(n));
            }
        }

6)产生四位长度的验证码, 验证码内容为大小写字母或数字组成;

public class ArrayValidateCodeTest {

private char[] c;
            
            public ArrayValidateCodeTest() {
                String s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
                c = s.toCharArray();
            }
            
            public String getValidateCode() {
                int i1 = (int)(Math.random()*c.length);
                int i2 = (int)(Math.random()*c.length);
                int i3 = (int)(Math.random()*c.length);
                int i4 = (int)(Math.random()*c.length);
                
                return ""+c[i1]+c[i2]+c[i3]+c[i4];
            }
            
            public static void main(String[] args) {
                ArrayValidateCodeTest a = new ArrayValidateCodeTest();
                System.out.println(a.getValidateCode());
            }
        }

5. 数组的拷贝

数组的长度一旦确定之后便不能调整,我们可以通过复制数组的内容变通实现改变数组长度。在System类中提供一个辅助的
       arraycopy方法提供复制数组内容的功能:

public static void arraycopy(Object src,
                             int srcPos,
                             Object dest,
                             int destPos,
                             int length)

参数1,需要被复制的目标数组
    参数2,从这个数组的那个一个位置开始复制
    参数3,需要把数据复制到的另外的那一个新的数组对象
    参数4,复制到新数组里面哪个位置(从这个位置开始算)
    参数5,复制的目标数组的长度

6.可变参数  (JDK1.5或以上)

之前的写法
    public void test(int[] a){
    
    }
    main:
        int[] i = {1,2,3,4};
        a.test(i);

可变参数写法
        public void test2(int... a){
    
    }
    main:
        int[] i = {1,2,3,4};
        test2(i);
        test2();
        test2(1,2,3,4);
        test2(1,2,3,4,5,6,7);
    
    可变参数前面可以加其他参数
    public static void test3(String msg,int... a){
        
    }
    main:
        int[] i = {1,2,3,4};
        String msg = "helo";
        test3(msg,i);
        test3(msg);
        test3(msg,1,2,3,4);
        test3(msg,1,2,3,4,5,6,7);

可变参数后面不能加任何参数 这样是编译不通过的
    public static void test4(int... a,String msg){
        
    }

Core Java(四)的更多相关文章

  1. Java 四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor

    介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端执行一个异步任务你还只是如下new T ...

  2. Java四种线程池

    Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor 时间:20 ...

  3. applet示例 WelcomeApplet.java <Core Java>

    import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.Font; import java.awt.Grap ...

  4. Java四种引用包括强引用,软引用,弱引用,虚引用。

    Java四种引用包括强引用,软引用,弱引用,虚引用. 强引用: 只要引用存在,垃圾回收器永远不会回收Object obj = new Object();//可直接通过obj取得对应的对象 如obj.e ...

  5. Core Java Volume I — 1.2. The Java "White Paper" Buzzwords

    1.2. The Java "White Paper" BuzzwordsThe authors of Java have written an influential White ...

  6. Core Java Volume I — 4.7. Packages

    4.7. PackagesJava allows you to group classes in a collection called a package. Packages are conveni ...

  7. Core Java Interview Question Answer

    This is a new series of sharing core Java interview question and answer on Finance domain and mostly ...

  8. Core Java 学习笔记——1.术语/环境配置/Eclipse汉化字体快捷键/API文档

    今天起开始学习Java,学习用书为Core Java.之前有过C的经验.准备把自己学习这一本书时的各种想法,不易理解的,重要的都记录下来.希望以后回顾起来能温故知新吧.也希望自己能够坚持把自己学习这本 ...

  9. Pascal、VB、C#、Java四种语法对照表

    因为工作原因,自学会了vb后陆续接触了其它语言,在工作中经常需要与各家使用不同语言公司的开发人员做程序对接,初期特别需要一个各种语法的对照比,翻看了网络上已有高人做了整理,自己在他基础上也整理了一下, ...

随机推荐

  1. 使用QT创建PythonGUI程序

    1. 挑选 GUI设计程序: wxPython Vs. pyQt4 参考链接:http://www.douban.com/group/topic/14590751/ (1):wxWidgets wxP ...

  2. (转)基于MVC4+EasyUI的Web开发框架形成之旅--基类控制器CRUD的操作

    http://www.cnblogs.com/wuhuacong/p/3352016.html 在上一篇随笔中,我对Web开发框架的总体界面进行了介绍,其中并提到了我的<Web开发框架>的 ...

  3. MongoDB 学习笔记(一):安装及简单shell操作

    一.说明 1.该系列MongoDB学习笔记的学习环境采用的MongoDB版本为mongodb-win32-i386-2.4.6,操作系统为win7. 二.安装 1.新建两个目录,分别是D:\Insta ...

  4. vc++如何创建程序-构造和继承

    #include<iostream.h>//定义一个动物类class Animal{public: void eat();//添加方法 { cout<<"animal ...

  5. 动态规划——Buyer

    题目链接 题目描述 哆啦A梦班级举办个party,当然吃的东西必不可少,哆啦A梦负责采购任务,他得到了一份清单,上面注明不同食品的受欢迎程度,哆啦A梦需要用一定的价钱尽可能达到的更大的受欢迎程度!例如 ...

  6. OpenVAS虚拟机安装

    官方网站:http://www.openvas.org/ 参考链接:http://www.openvas.org/vm.html 下载地址:http://dl.greenbone.net/downlo ...

  7. 在Tomcat中配置域名:linux下的配置

    域名的配置 端口要改成80 找到/usr/tomcat/apache-tomcat-8.5.30/conf的目录,找到server.xml文件,到 <Host name="localh ...

  8. Elasticsearch 入门 - 安装、启动和配置

    安装 请参阅elastic官网 :Installing Elasticsearch 启动 使用 ./bin/elasticsearch 命令即可启动 使用 ./bin/elasticsearch -d ...

  9. 【hiho一下第十二周】刷油漆

    [题目链接]:http://hihocoder.com/problemset/problem/1055 [题意] [题解] 设f[x][i]表示以第x个节点为根的子树; 不选x这个节点,然后子树里面选 ...

  10. css 超出宽度出现省略号

    display: block; overflow: hidden; width: 260px; white-space: nowrap; text-overflow: ellipsis;