简介:
按照《java编程思想》中的定义:数组是相同类型的、用一个标示符名称封装到一起的一个对象序列或基本类型数据序列。
优点:
数组与其他容器之间的区别主要有三:效率、类型和保存基本类型的能力。数组是一个简单的线性序列,是效率最高的存储和随机访问对象引用序列的方式。但是为这种速度付出的代价是数组对象的大小被固定了,并且在其生命周期中不可改变。
在泛型之前,容器是不能持有某种具体的类型的,后来,有了自动包装机制,容器看起来貌似还能够持有基本类型了。数组仅存的优点就是效率了,但是数组的限制又过多,例如不能扩容、不提供对外接口、访问方式单一等等。所以一般情况下,还是考虑使用容器的。
扯远了,继续回到数组。
0.声明
其定义方式为: int[ ] a; 或者 int a[ ];(前者似乎更能体现出a是一个数组引用)
值得注意的是:编译器不允许指定数组的大小(毕竟a只是一个引用,而并非对象本身)在调用new 之前,编译器只会为该引用分配空间,而不会为数组本身分配空间,若要为数组本身分配空间,则要进行初始化。
1. 初始化
数组的初始化有两种:静态初始化 & 动态初始化;
1.1静态初始化
静态初始化是在创建数组的地方手动为数组赋初值,并由系统自动为该数组赋length值
eg: int[ ] a ={1,2,3,4} //系统会自动判断,并为a赋a.length = 4
1.2动态初始化
所谓动态初始化是由程序员为数组指定长度,并由系统为数组赋默认值,程序员可以在程序中的任何位置为数组元素重新赋值(其声明方式也有两种)
//define array a first and then open the space Integer[ ] a; a = new Integer[5]; //the same time Integer[ ] a = new Integer[5]; //dynamic aggregate initialization for(int i = 0 ; i < a.length; i++){ a[i] = new Integer(i); }
上面的代码很无聊的用了Integer类,主要是为了印证文中第一句话:数组可以是一个对象序列或者基础类型序列。
值得一提的是:只读成员length是数组对象唯一一个可以访问的方法,表示该数组可以存储多少元素(并非该数组实际存储的元素个数)“[ ]”是访问数组对象的唯一方式。。。。(太寒蝉了)。对象数组和基本类型数组的使用几乎是完全相同的,唯一的区别是前者保存的是引用,后者存储的是基本类型的值。
再看下面的简单代码:
package test; import java.util.Arrays; public class TestArray { public static Book[] bookSet(int n){ Book[] books = new Book[n] ; for(int i = 0 ;i < n;i++){ books[i] = new Book("book" + i,"jd"); } return books; } public static void main(String[] args) { int count = 3; Book[] books = bookSet(count); Book[] bookFills = new Book[3]; System.out.println(Arrays.toString(books)); Arrays.fill(bookFills, new Book("fill","hyj")); System.out.println(Arrays.toString(bookFills)); } } class Book{ String bookName; String author; public Book(String name,String author){ this.bookName = name; this.author = author; } @Override public String toString(){ return "book name is :" + bookName + " author is : " + author; } }
里面可以看到两点与C\C++的最显著的区别:
1. java数组的大小可以传入变量。而C\C++必须定义常量大小。
2. java是可以返回数组的。C\C++只能返回指向数组的指针。
上例中还用到了Arrays类。这个类提供了一些static方法用来对数组进行操作,例如fill()方法,可以统一为全数组赋初值,而不再局限于只能由系统赋的默认值,同时也不需要再写个循环填充程序了。还有例如sort(),equals(),deepEquals(),copyOfRange(),binarySearch()方法等等。还有Java标准类库中提供了一个Static方法:System.arraycopy()也是很不错的方法,使用起来很简单,不再啰嗦。
以上就是数组的简单应用小结。
以后如果关于数组的更深一步的学习,将会更新在本篇博文中。
另外关于java中数组与C\C++的简单对比小结,见下篇博文
http://blog.csdn.net/yakihappy/article/details/3979743
相关推荐
### Java数组应用详解 #### 一、一维数组 ##### 1.1 一维数组的定义 在Java中,数组是一种存储同类型元素的数据结构。数组中的元素可以通过索引进行访问,索引是从0开始的整数。一维数组的定义有两种常见的形式:...
本文将围绕标题“java数组与字符串用法小结”及描述中的知识点进行详细阐述。 #### 一、数组的初始化与使用 数组是一种用于存储相同类型数据的容器。例如,可以创建一个整型数组来存储一系列整数。数组的初始化有...
Java数组常见应用详解 Java数组是Java语言中的一种基本数据结构,用于存储固定大小的同类型元素。下面将详细介绍Java数组的基本定义、创建、遍历、排序和查找等相关操作技巧与使用注意事项。 一、Java数组的基本...
首先,Java数组是最基础的数据结构,它提供了固定大小的连续内存空间来存储相同类型的数据。由于其物理结构的特性,数组在随机访问时具有极高的效率,因为可以直接通过索引来访问元素。但是,插入和删除元素时,如果...
1 2 3 4 5 [0] [1] [2] [3] ...小结 方法调用时:数组作为方法的参数,当形参数组的元素值改变了,会影响实参数组。 但是,基础类型作为方法参数时,形参值改变不会影响主调方法中的基本类型实参值。
Java程序设计是Java编程语言的基础,数组和集合是Java程序设计中两个非常重要的概念。本节课我们将对Java程序设计中的数组和集合进行详细的讲解。 数组 数组是一种基本的数据结构,在Java中数组是一种固定大小的同...
6. **本章小结**:这一章主要介绍了Java编程的基础,包括语言的面向对象特性,如何编写简单的程序,理解基本数据类型,以及如何使用数组存储和操作数据。这些都是进一步学习Java类、对象、异常处理、输入输出、集合...
Java数组常用排序算法实例小结 Java数组常用排序算法是每个Java开发者都需要掌握的基本技能,本文将通过实例形式总结分析Java数组常用的四种排序算法,分别是冒泡排序、数组递增排序、快速排序及选择排序。 一、...
Java数据结构和算法介绍了计算机编程中使用的数据结构和算法,对于在计算机应用中如何操作和管理数据以取得最优性能提供了深入浅出的讲解。全书共分为15章,分别讲述了基本概念、数组、简单排序、堆和队列、链表、...
《Java基础小结》 Java,作为一种广泛应用的编程语言,以其跨平台、面向对象的特点深受开发者喜爱。这篇博文和随附的PDF笔记旨在总结Java的基础知识,帮助初学者巩固理解,同时也为有经验的开发者提供回顾参考。 1...
Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 编程作业 第3章 简单排序 如何排序? 冒泡排序...
Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 编程作业 第3章 简单排序 如何排序? 冒泡排序 选择排序 ...
在Java编程中,删除排序数组中的重复元素是一个常见的问题,特别是在数据处理和算法优化的场景。本篇文章将探讨三种不同的方法来实现这个功能,并对比它们的优劣。 首先,第一种方法是通过`ArrayList`来解决。这种...
以下是关于这两种语言相似点和差异的小结: 1. **源文件约定**: - **C#** 允许一个源文件(.cs)中包含多个顶级公共类,文件名不必与类名相同。 - **Java** 则要求每个源文件(.java)只能有一个顶级类,且文件名...
### Java个人学习小结 #### Java发展史及重要里程碑 - **起源与发展**: Java 的起源可以追溯到 1992 年,当时的 Sun Microsystems 公司开发了一种名为 Oak 的编程语言,最初是为了家用电器的智能化而设计的。然而...
### Java集合小结 #### 一、集合的概念与重要性 集合是Java编程语言中用于存储、管理和操作数据的一种重要工具。它提供了多种数据结构来适应不同的应用场景,从而有效地提高程序开发效率。从数据结构的角度来看,...
◇本讲小结 ◇课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 运算符和表达式 ◇2.3 控制语句 ◇2.4 数组 ◇2.5 字符串的处理 ◇本讲小结 ◇课后习题 ★ 第三讲 Java语言...
◇本讲小结 ◇课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 运算符和表达式 ◇2.3 控制语句 ◇2.4 数组 ◇2.5 字符串的处理 ◇本讲小结 ◇课后习题 ★ 第三讲 Java语言...