`
mlc0202
  • 浏览: 106317 次
  • 来自: 北京
社区版块
存档分类
最新评论

说说数组

 
阅读更多

A faithful friend is hard to find. 知音难觅

 

一般来讲,只有是编过程序人都知道,在程序设计中数组都是占据这一个很显眼的位置,你可能要跟我的掰扯下,俺写个“hello world”就分明没有用到数组嘛,可你再瞅瞅,在那个main函数中,不也是涉及到String[] args,这样一个字符串数组了吗,可能您一直是使用c语言的,理所当然的认为,数组就是就是一组数据嘛,可是在Java中,它可不是这样,Java中的数组是作为一个对象存在的,所以,在Java中,“一组数字”仅仅只是数组的一个小的方面,另一方面,作为对象存在,这样好处显而易见,可以携带更过的信息,来看代码

 

public class ArrTest {
	public static void main(String[] args){
		//建立数组,大小为3
		int[] arr2 = new int[3];
		//逐一给数组元素复制,注意length是数组的一个属性
		for(int i=0;i<arr2.length;i++){
			arr2[i]=(i+1)*10;
		}
		//打印数组
		for(int i=0;i<arr2.length;i++){
			System.out.println(arr2[i]);
		}
		//arr2和null对象比较数组内的内容
		System.out.println(arr2.equals(null));
	}
}

   代码的编译运行结果如图1-1所示
  

                                 图1-1   ArrTest的编译运行结果

      在这个代码中,我使用比较标准的数组创建方法,使用new来开辟内存,然后逐一赋值,在代码中,打印数组是,我使用了arr2.length来获得数组的长度,为什么可以这样呢?是由于Java中数组是一个对象,而length是它的一个属性,你可能要问,自己没有定义这个属性,它是从哪里来的,很简单,是数组作为对象,默认添加进去的,代码中的比较语句,equals方法是对象的方法,这也是系统默认添加进去的,由于是比较的内容,null里面什么都没有,所以结果为false,接下来说说如何定义数组吧

    定义数组

定义数组主要有两种方法,第一中是建立和初始化一块完成,数组元素的个数代表了数组的大小,比如像int[] arr = {10,20,30};其实它的完整形式是int[] arr = new int[]{10,20,30};

                                     第二种方法是只建立数组,在建立的时候指定大小,比如像int[] arr = new int[3];建立之后再对数组元素进行赋值

 

已经假设您是学习过c语言的,所以,多位数组您应该是可以类推明白的,我看好你哦!

先说说,数组定义的风格,个人推荐时使用类似int[] arr = new int[3];
这样的形式,在c语言中定义数组是这样int arr[]...当然你也可以采用那样的方式,不过,由于Java中数组是对象,所以前一种更能体现这种特点,就第一种吧
而外
有关数组的索引值,俺再说两句,索引所代表的意思是只当下元素相对首元素的位置差,第一个元素差为0,依次类推等等……所以,也就有了数组的大小和数组的最后一个值的索引值相差1的这种情况出现

  在定义和使用数组上,也没有太多的东西,基本上了解了如何建立数组,以及多维数组的概念,能区别开基本数据类型和对象之间的不同,基本上就差不多了,俺是这么认为的,但是,对于数组还有一些高级的用法,在这里重点来说一下

   额外,说一句,在编写程序的时候,尽量把数组的维数控制在二维上下,太大了,会使得你的代码的可读性变得很糟糕,这是个人建议,俺就啰嗦这么一句

     数组的高级用法

    首先来看看一维数组引用的定义:int【】 arr = null;这表示arr是一个可以引用至int一维数组对象的引用名称,在这句话中表示,目前这个引用对象指向了null,其实就是没有指向任何引用,只是,这是一种比较好的习惯,此外,您还得建立一个概念

关于=运算
在java中,如果=元算的对象是基本数据类型时,是表示“赋值”的意思
在作用于对象时,那可不是表示赋值的意思,那表示的是引用
举个例子
int【】 arr = new int【10】;
arr是一个可以指向int【】的引用变量,而new int【10】则表示的是实际的建立数组,int【】 arr只是一个引用变量,它是一个变量,所以在内存中并不会分配存储区域,但当使用new的时候,就会在内存中开辟存储空间的,就是这样的,其实很简单,在这里,你看懂了吗?

   关于引用,我们来看一个代码:

 

public class ArrTest2{
   public static void main(String[] args){
      int[] arr = {10,20,30,40};
	  int[] arr1 = arr;
	  System.out.println("通过arr取出的数据");
	  for(int i=0;i<arr.length;i++){
			System.out.println(arr[i]);
	  }
	  System.out.println("通过arr1取出的数据");
	  for(int i=0;i<arr1.length;i++){
			System.out.println(arr1[i]);
	  }
	  System.out.println("在arr1中修改数组数据");
	  arr1[1]=100;
	  System.out.println("通过arr取出的数据");
	  for(int i=0;i<arr.length;i++){
			System.out.println(arr[i]);
	  }
	  System.out.println("通过arr1取出的数据");
	  for(int i=0;i<arr1.length;i++){
			System.out.println(arr1[i]);
	  }
   }

}

     图1-2是代码运行的结果

  
    

                                  图1-2 ArrTest2编译运行的结果

      代码比较简单,相信很容易读懂的,重点是在arr1【10】=100这个地方,从代码运行结果,可以看的出来,其实两个引用都是实际指向数据的存储空间的,当一个引用修改数据的时候,存储空间里面的数据也会被修改,此外,代码中也体现出来的=运算所体现的两个不同用法,

 int[] arr1 = arr;是引用
 arr1[1]=100;是基本数据类型的赋值运算

关于遍历数组中的元素

   遍历数组的方法比较多,我在这里主要是像说说javase5之后的增强型for循环,来看代码吧

 

public class ArrayTest3{
   public static void main(String[] args){
      int[] arr ={10,20,30};
	  //使用增强型for循环
       for(int i:arr){
	   System.out.println(i);
	   }	  
   }

}

 代码编译运行结果见图1-3

 

  
     

                               图1-3  ArrayTest3编译运行结果

    对于增强型for循环,就不再多说了,从上面的代码和运行结果,很容易明白增强型for循环能做什么----对数组的依次存取

     来看看基本的语法,举例说明

int[] arr = {10,20,30};//定义数组
for(int element:arr){//elements是数组的基本数据类型的变量,arr是数组
              System.out.println(element);//逐一取出数组的值赋给element,输出
}
 

 

关于Arrays类

    对于数组的进行操作,不得不说一说Arrays类,这个类提供了一些方法,可以简化我们对数组的操作,不再写代码了,列出几个常用的方法,相信很容易懂的,实在看不明白,自己动手搭个程序一跑就知道

      sort()方法,对指定的数组进行排序,使用的算法是快速排序法

      binarySearch()方法,对已经排好序的数组,进行二分搜索,找到返回索引,否则为负值

      fill()方法,给数组中所有的值都指定统一的值,

      俺想了想,几个方法还是比较重要的,还是写个代码,看看效果吧

 

import java.util.Scanner;
import java.util.Arrays;
public class Test{
   public static void main(String[] args){
       Scanner scan = new Scanner(System.in);
	   int[] arr = {1,8,4,5,9,6};
	   //对数组元素进行排序
	   Arrays.sort(arr);
	   for(int i=0;i<arr.length;i++){
	       System.out.println(arr[i]);
	   }
	   //输入要查询的值
	   System.out.println("请输入您所要查询的值");
	   int find = scan.nextInt();
	   //输出为正数表示存在,正数为当前元素所在的索引值;如果为负值,表示搜索值是不存在的
	   System.out.println("查询结果:");
	   System.out.println(Arrays.binarySearch(arr,find));
   }
}

    程序运行结果,如图1-4所示,注释写的很清楚,就不在另作解释了

 
  

 

                             图1-4Test编译运行的结果

 

 

 

 

  • 大小: 5.1 KB
  • 大小: 11 KB
  • 大小: 2.8 KB
  • 大小: 5.1 KB
0
0
分享到:
评论

相关推荐

    Java 的常用包与数组的复制与排序27

    再来说说数组的排序。Java提供了`Arrays.sort()`方法来对数组进行排序: 1. 对于基本类型数组,如整数数组,可以直接调用`Arrays.sort(int[])`: ```java int[] arr = {5, 2, 8, 1, 9}; Arrays.sort(arr); ``` ...

    PHP学习之数组的定义和填充

    另外说说数组其它一些小东西: array()可以声明一个空数组; array[] = $value 在数组存在时,追加一个数据;在数组不存时,生成一个数组,并追加数据。 array[$index] = $value 在数组存在时,追加或修改一个数据...

    C语言第9单元的题-答题版.pdf

    再来说说数组与指针的关系,C语言中的数组名可以被解释为数组首元素的地址。比如对于数组`int arr[5];`,表达式`arr`的值就是数组首元素的地址,因此`arr`可以被视为一个指向`int`类型的指针。这种关系使得数组和...

    javascript实现数组去重的多种方法

    先说说这个实例的要求:写一个方法实现数组的去重。(要求:执行方法,传递一个数组,返回去重后的新数组,原数组不变,实现过程中只能用一层循环,双层嵌套循环也可写,只做参考); 先给初学者解释一下什么叫数组...

    js-exercises:JavaScript练习,用于训练和保存一些信息

    再来说说数组,这是JavaScript中用于存储一组有序数据的数据结构。数组提供了许多内置的方法,如push、pop、slice、map等,这些在处理数据时非常有用。在js-exercises中,你可能会遇到涉及数组操作的练习,例如数组...

    谈谈JavaScript数组常用方法总结

    JavaScript中的数组方法是编程中非常基础且重要的部分,它们提供了丰富的功能来操作和处理数组数据。以下是关于JavaScript数组常用方法的详细说明: 1. **增加数据** - `push()` 方法用于向数组末尾添加一个或多个...

    c语言中数组名a和a详细介绍

    先说说a和&a的区别(有三点,三个方向):1.是a和&a的本质,都是什么类型的。2.从2维数组的角度看。3.从指针运算的角度看。 声明:虽然数组名不是指针,但是用的很像指针,我们暂且把它叫做一个指针吧。 第一个问题:...

    直观理解C语言中指向一位数组与二维数组的指针

    首先说说常量和变量的关系, 对于变量来说, 用箱子去比喻再好不过了, 声明一个变量就声明一个箱子,比如我们开辟出一个苹果类型的箱子, 给这个变量赋值就是把盛放苹果的箱子中放入一个实实在在的苹果, 这就是变量的...

    【全局变量会变】的原因&(全局数组内容异常)

    再来说说“全局数组内容异常”。全局数组在程序执行过程中,其内容应始终保持预期的状态,除非有明确的赋值操作。当数组元素出现非预期的值时,可能是以下原因造成的: 1. **内存溢出**:类似于全局变量的情况,...

    易语言提取QQ说说

    遍历这些对象,将每条说说的信息保存到易语言的数据结构中,如列表或数组。 6. **显示或处理数据**:最后,我们可以选择将提取的说说显示在程序界面上,或者进行其他进一步的处理,如保存到文件、分析情感等。 在...

    JS中Array数组学习总结

    引用类型分为Object类型(所谓的对象),Array类型(本文谈的数组),Function类型等。 那么,数组是干啥的呢?在我看来,它是用来保存数据的。 一、声明一个数组: ...三、在这里简单说说length的用法

    可能被忽略的一些JavaScript数组方法细节

    前言 自以为还算一个比较高产的人吧~但是感觉好久都没有写点什么没有营养的东西了...在开始正式讲被我们忽略的一些数组方法之前,我还是想先举一个例子来说说我在其中躺过的一丢丢小坑~ 现在我们随便来有一个小小的

    php函数大全包含了常用的php函数

    再来说说PHP的数组函数。数组是存储多个值的集合,PHP提供了大量处理数组的工具。例如,`array_push()`和`array_pop()`用于在数组末尾添加或移除元素,`array_unshift()`和`array_shift()`在数组开头操作。`count()`...

    说说flash as3中的var.doc

    其次,当通过数组访问符 `[]` 来定义或访问数组元素时,同样不需要 `var`。例如: ```actionscript Plane[fly] = true; ``` 在这个例子中,`Plane` 可能是一个对象,其中有一个动态属性,属性名由变量 `fly` 的值...

    BMP图片转BIN软件

    再来说说C数组的生成。在C语言中,数组是一种数据结构,可以用来存储一系列相同类型的数据。当软件将BMP转换为C数组时,它会将每个像素的RGB值分别存储为一个3元素的数组,代表红、绿、蓝三个颜色分量。这样的数组...

    简单说说JAVA的String和byte[]的关系

    在Java编程语言中,`String`对象与`byte[]`数组之间的转换是常见的操作之一。理解这两者之间的关系对于处理文本数据、网络通信及文件读写等任务至关重要。 #### 一、String与byte[]的基本概念 - **String**: 在...

    C# 语法全解/C#委托

    再来说说C#的数组。数组是一种数据结构,用于存储同一类型的多个值。数组在声明时会指定长度,一旦创建就不可更改。C#支持一维、二维和多维数组,以及 Jagged Array(不规则数组)和 Rectangular Array(矩形数组)...

    HashMap.md

    HashMap 底层的数据结构主要是:数组 + 链表 + 红黑树。其中当链表的长度大于等于 8 时, 链表会转化成红黑树,当红黑树的大小小于等于 6 时,红黑树会转化成链表 HashMap是数组结构,数组的元素可能是单个 Node,...

    【JavaScript】JavaScript集合

    再来说说**Set**。Set是另一种ES6新增的集合类型,它存储的是唯一的、无序的元素。Set可以用来消除数组中的重复项,或者创建不重复的值集合。与Map一样,Set也提供了迭代器,并且支持add、delete、has等操作。 ...

    说说JSON和JSONP 也许你会豁然开朗

    JSON的数据结构简单,主要由对象和数组组成,可以表示各种数据类型,包括字符串、数字、布尔值、null值以及数组和对象本身。JSON的优点十分明显,包括易于阅读和编写、易于解析、跨平台兼容性好以及数据量小,特别...

Global site tag (gtag.js) - Google Analytics