`
huntfor
  • 浏览: 195586 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java中数组基础应用的简单小结

    博客分类:
  • java
阅读更多

简介:

       按照《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

 

 

分享到:
评论
2 楼 huntfor 2013-12-26  
249326109 写道
与C/C++的区别第二点,java返回数组不也只是个引用么,跟C指针没有本质区别吧。

是的,java返回的也只是引用而已。
1 楼 249326109 2013-12-26  
与C/C++的区别第二点,java返回数组不也只是个引用么,跟C指针没有本质区别吧。

相关推荐

    java数组与字符串用法小结

    java数组与字符串用法小结 讲述了字符串数组的读入和读出的一些用法 主要是stringtokenizer的用法

    Java程序设计基础:一维数组应用数组作为方法实参.pptx

    1 2 3 4 5 [0] [1] [2] [3] ...小结 方法调用时:数组作为方法的参数,当形参数组的元素值改变了,会影响实参数组。 但是,基础类型作为方法参数时,形参值改变不会影响主调方法中的基本类型实参值。

    Java数据结构和算法中文第二版

    Java数据结构和算法介绍了计算机编程中使用的数据结构和算法,对于在计算机应用中如何操作和管理数据以取得最优性能提供了深入浅出的讲解。全书共分为15章,分别讲述了基本概念、数组、简单排序、堆和队列、链表、...

    java数据结构与算法第二版

    Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 编程作业 第3章 简单排序 如何排序? 冒泡排序...

    实验5 JAVA常用类.doc

    本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)实验报告,基础篇有JAVA环境搭建、Java语言基础、方法和数组、面向对象基础、Java常用类、继承与接口、成员访问控制与异常、JavaFX程序设计、Java...

    Java数据结构和算法(第二版)

    Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 编程作业 第3章 简单排序 如何排序? 冒泡排序 选择排序 ...

    Java编程语言详细教程

    ◇本讲小结 ◇课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 运算符和表达式 ◇2.3 控制语句 ◇2.4 数组 ◇2.5 字符串的处理 ◇本讲小结 ◇课后习题 ★ 第三讲 Java语言...

    清华大学JAVA教程

    ◇本讲小结 ◇课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 运算符和表达式 ◇2.3 控制语句 ◇2.4 数组 ◇2.5 字符串的处理 ◇本讲小结 ◇课后习题 ★ 第三讲 Java语言...

    Java数据结构和算法中文第二版(1)

    Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 编程作业 第3章 简单排序 如何排序? 冒泡...

    Java语言程序设计

    本书不仅能使读者掌握Java语言,而且能够让读者对现实世界中较简单的问题及其解决方法用计算机语言进行描述。 本书既可供大专院校用作“Java语言程序设计”课程教材,也可供Java 爱好者作为入门的自学教材。 目录第...

    java基础入门教程

    所 以 有 人 说 :"现 在 第 三 方 的 开 发 商 都 团 结 在 Java大旗 周 围了 !",纷 纷 推 出 用Java 开 发 的 各 种 软 件 产 品 ,以 期尽 快 地 占 领 市 场 。 四 、 Java 语 言 的 应 用 前 景 Java 语 言 ...

    Java优化编程(第2版)

    Java优化编程(第2版)通过丰富、完整、富有代表性的实例,展示了如何提升Java应用性能,并且给出了优化前与优化后的Java应用程序的性能差别,以实际的实例与数字告诉你,为什么不可以这么做,应该怎么做,深入分析...

    Java语言的科学与艺术 斯坦福大学经典教材

    第10章 事件驱动程序 10.1 Java事件模型 10.2 简单的事件驱动程序 10.3 响应鼠标事件 10.4 响应键盘事件 10.5 创建简单的GUI 10.6 Swing 交互器层次结构 10.7 管理组件布局 10.8 使用TableLayout类 10.9 小结 ...

    Java数据结构和算法中文第二版(2)

    Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 编程作业 第3章 简单排序 如何排序? 冒泡...

    Java语言的科学与艺术(国外计算机科学经典教材)

     1.8 小结  1.9 复习题 第2章 编程示例  2.1 “Hello world”程序  2.2 编程过程的观点  2.3 两数相加的程序  2.4 编程习语和模式  2.5 类和对象  2.6 图形程序  2.7 小结  2.8 复习题  2.9 编程练习 第3...

    疯狂JAVA讲义

    1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 24 2.1.1 结构化程序设计简介 24 2.1.2 程序的三种基本结构 25 2.1.3 面向对象程序设计简介 27 2.1.4 面向对象的基本特征 28 2.2 UML...

    java基础案例与开发详解案例源码全

    3.7.6 循环语句小结78 3.7.7 break语句79 3.7.8 continue语句82 3.8 JavaDebug技术84 3.9 本章练习85 第4章 4.1 一维数组90 4.1.1 为什么要使用数组90 4.1.2 什么是数组91 4.1.3 如何使用数组92 4.1.4 经验之谈-数组...

    数据结构与算法分析Java语言描述(第二版)

    表、栈和队列3.1 抽象数据类型3.2 表ADT3.2.1 表的简单数组实现3.2.2 简单链表3.3 JavaCollectionsAPI中的表3.3.1 Collection接口3.3.2 Iterator接口3.3.3 List接口、ArrayList类和LinkedList类3.3.4 例:remove...

Global site tag (gtag.js) - Google Analytics