- 浏览: 188225 次
- 性别:
- 来自: 上海
文章分类
最新评论
数组是可以保存一组数据的一种数据结构,它本身也会占用一个内存地址,因此数组是引用类型
一个数组中只能保存一种类型的数据,可以保存基本类型,也可以保存Object。一个int,一个String是不能同时保存在一个数组内的(如果是对象型数组,注意存放的每一个对象都必须被实例化,,如果这样定义就可以 Object[] o ={1,"2"})。
数组的长度规定好即固定,无论其保存的数据是否填满数组
数组一旦定义好就不可以修改长度,如果要修改就必须重新定义一个新数组或者引用其他的数组,因此数组的灵活性较差
数组拥有边界检查,尝试获取不在数组范围内的值时,会抛出ArrayIndexOutOfBoundsException异常
数组是一个有界的线性序列,大小被固定、随机访问速度非常快(超过集合);
数组如果没被初始化则为null,数组如果没被显式初始化,则会自动初始化。其中的值与数组元素类型的默认初始化值相同;
数组可以有多维的,但是,一维数组要比多维的快很多。在对效率要求很高的程序中,一般都不用多维数组,需要用的时候,也常常将多维数组转换为一维的存储方式;
数组的声明不能使用泛型,其实也没必要在数组上使用泛型;
二、数组的初始化
1、系统默认自动初始化
比如int[] a = int[3]; 实际上与int[] a= {0,0,0}相同。
如果是引用类型则其中自动初始化为null值。
2、显式指定初始化
int[] a= {0,0,0};
int[][] a1 = {{1,2,3},{4,5,6}};
3、使用工具初始化
int[] c = new int[3];
Arrays.fill(c,3);
三、java.util.Arrays
Arrays类是一个非常有用数组工具类,里面有很多工具方法,检索、填充、排序、比较、toString()等。
下面给个例子:
import java.util.Arrays;
/**
* 数组综合测试
*
* @author leizhimin 2009-7-28 12:35:41
*/
public class TestArrays {
public static void main(String[] args) {
int[] i = new int[10];
//填充数组
Arrays.fill(i, 2);
//遍历数组
for (int x : i) {
System.out.print(x + " ");
}
//toString()数组
System.out.println("\n" + Arrays.toString(i));
//复制数组
int[] b = new int[12];
System.arraycopy(i, 0, b, 2, 5);
System.out.println(Arrays.toString(b));
//一维数组的比较
int[] c = new int[3];
int[] d = new int[3];
Arrays.fill(c, 3);
Arrays.fill(d, 3);
System.out.println(c.equals(d));
System.out.println(Arrays.equals(c, d));
System.out.println("-------------");
int[][] a1 = {{1, 2, 3}, {4, 5, 6}};
int[][] a2 = {{1, 2, 3}, {4, 5, 6}};
System.out.println(a1.equals(a2));
System.out.println(Arrays.equals(a1, a2));
System.out.println(Arrays.deepEquals(a1, a2));
//深度toString()
System.out.println(Arrays.toString(a1));
System.out.println(Arrays.deepToString(a1));
//数组的排序
int[] a3 = {3, 2, 5, 4, 1};
System.out.println(Arrays.toString(a3));
Arrays.sort(a3);
System.out.println(Arrays.toString(a3));
//一维数组数值检索
int index1 = Arrays.binarySearch(a3, 4);
int index2 = Arrays.binarySearch(a3, -12);
int index3 = Arrays.binarySearch(a3,;
System.out.println(index1 + " " + index2 + " " + index3);
}
}
执行结果:
2 2 2 2 2 2 2 2 2 2
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
[0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0]
false
true
-------------
false
false
true
[[I@3e25a5, [I@19821f]
[[1, 2, 3], [4, 5, 6]]
[3, 2, 5, 4, 1]
[1, 2, 3, 4, 5]
3 -1 -6
Process finished with exit code 0
四、数组的复制
java.lang.System
public static void arraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length)
参数:
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。
具体用法参看上例。
五、补缺
1、数组的长度:数组名.length;
2、数组元素的访问:数组名[index],或数组名[index1][index2];
六、Array类
java.lang.reflect.Array 提供了动态创建和访问 Java 数组的方法。
java.sql.Array SQL 类型 ARRAY 在 Java 编程语言中的映射关系。
七、陷阱
1、填充数组,Arrays.fill()方法只能填充一维基本类型数组。
2、数组复制,不但适合一维数组,也适合多维数组,只是多维数组赋值时候要特别小心,有时候会出一些莫名其妙的问题
int[][] a1 = {{1, 2, 3}, {4, 5, 6}};
int[][] ax = new int[3][3];
System.arraycopy(a1,1,ax,1,1);
System.out.println(Arrays.deepToString(ax));
输出结果:
[[0, 0, 0], [4, 5, 6], [0, 0, 0]]
如果改为:
int[][] a1 = {{1, 2, 3}, {4, 5, 6}};
int[][] ax = new int[2][4];
System.arraycopy(a1,0,ax,0,1);
int[] x1 = ax[0];
System.out.println("二维数组第一个元素的长度:"+x1.length);
System.out.println("-----");
for (int[] t : ax) {
for (int _i : t) {
System.out.println(_i);
}
System.out.println("-----");
}
输出结果:
二维数组第一个元素的长度:3
-----
1
2
3
-----
0
0
0
0
-----
这个结果看起来就太迷惑了!
3、数组的排序,只能排序基本类型数组,如果是其他类型,可以考虑使用集合工具Collections来做。
4、尽可能不要使用多维数组,多维数组效率会有很大的损失。
以上部分转自http://lavasoft.blog.51cto.com/62575/183878/
一个数组中只能保存一种类型的数据,可以保存基本类型,也可以保存Object。一个int,一个String是不能同时保存在一个数组内的(如果是对象型数组,注意存放的每一个对象都必须被实例化,,如果这样定义就可以 Object[] o ={1,"2"})。
数组的长度规定好即固定,无论其保存的数据是否填满数组
数组一旦定义好就不可以修改长度,如果要修改就必须重新定义一个新数组或者引用其他的数组,因此数组的灵活性较差
数组拥有边界检查,尝试获取不在数组范围内的值时,会抛出ArrayIndexOutOfBoundsException异常
数组是一个有界的线性序列,大小被固定、随机访问速度非常快(超过集合);
数组如果没被初始化则为null,数组如果没被显式初始化,则会自动初始化。其中的值与数组元素类型的默认初始化值相同;
数组可以有多维的,但是,一维数组要比多维的快很多。在对效率要求很高的程序中,一般都不用多维数组,需要用的时候,也常常将多维数组转换为一维的存储方式;
数组的声明不能使用泛型,其实也没必要在数组上使用泛型;
二、数组的初始化
1、系统默认自动初始化
比如int[] a = int[3]; 实际上与int[] a= {0,0,0}相同。
如果是引用类型则其中自动初始化为null值。
2、显式指定初始化
int[] a= {0,0,0};
int[][] a1 = {{1,2,3},{4,5,6}};
3、使用工具初始化
int[] c = new int[3];
Arrays.fill(c,3);
三、java.util.Arrays
Arrays类是一个非常有用数组工具类,里面有很多工具方法,检索、填充、排序、比较、toString()等。
下面给个例子:
import java.util.Arrays;
/**
* 数组综合测试
*
* @author leizhimin 2009-7-28 12:35:41
*/
public class TestArrays {
public static void main(String[] args) {
int[] i = new int[10];
//填充数组
Arrays.fill(i, 2);
//遍历数组
for (int x : i) {
System.out.print(x + " ");
}
//toString()数组
System.out.println("\n" + Arrays.toString(i));
//复制数组
int[] b = new int[12];
System.arraycopy(i, 0, b, 2, 5);
System.out.println(Arrays.toString(b));
//一维数组的比较
int[] c = new int[3];
int[] d = new int[3];
Arrays.fill(c, 3);
Arrays.fill(d, 3);
System.out.println(c.equals(d));
System.out.println(Arrays.equals(c, d));
System.out.println("-------------");
int[][] a1 = {{1, 2, 3}, {4, 5, 6}};
int[][] a2 = {{1, 2, 3}, {4, 5, 6}};
System.out.println(a1.equals(a2));
System.out.println(Arrays.equals(a1, a2));
System.out.println(Arrays.deepEquals(a1, a2));
//深度toString()
System.out.println(Arrays.toString(a1));
System.out.println(Arrays.deepToString(a1));
//数组的排序
int[] a3 = {3, 2, 5, 4, 1};
System.out.println(Arrays.toString(a3));
Arrays.sort(a3);
System.out.println(Arrays.toString(a3));
//一维数组数值检索
int index1 = Arrays.binarySearch(a3, 4);
int index2 = Arrays.binarySearch(a3, -12);
int index3 = Arrays.binarySearch(a3,;
System.out.println(index1 + " " + index2 + " " + index3);
}
}
执行结果:
2 2 2 2 2 2 2 2 2 2
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
[0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0]
false
true
-------------
false
false
true
[[I@3e25a5, [I@19821f]
[[1, 2, 3], [4, 5, 6]]
[3, 2, 5, 4, 1]
[1, 2, 3, 4, 5]
3 -1 -6
Process finished with exit code 0
四、数组的复制
java.lang.System
public static void arraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length)
参数:
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。
具体用法参看上例。
五、补缺
1、数组的长度:数组名.length;
2、数组元素的访问:数组名[index],或数组名[index1][index2];
六、Array类
java.lang.reflect.Array 提供了动态创建和访问 Java 数组的方法。
java.sql.Array SQL 类型 ARRAY 在 Java 编程语言中的映射关系。
七、陷阱
1、填充数组,Arrays.fill()方法只能填充一维基本类型数组。
2、数组复制,不但适合一维数组,也适合多维数组,只是多维数组赋值时候要特别小心,有时候会出一些莫名其妙的问题
int[][] a1 = {{1, 2, 3}, {4, 5, 6}};
int[][] ax = new int[3][3];
System.arraycopy(a1,1,ax,1,1);
System.out.println(Arrays.deepToString(ax));
输出结果:
[[0, 0, 0], [4, 5, 6], [0, 0, 0]]
如果改为:
int[][] a1 = {{1, 2, 3}, {4, 5, 6}};
int[][] ax = new int[2][4];
System.arraycopy(a1,0,ax,0,1);
int[] x1 = ax[0];
System.out.println("二维数组第一个元素的长度:"+x1.length);
System.out.println("-----");
for (int[] t : ax) {
for (int _i : t) {
System.out.println(_i);
}
System.out.println("-----");
}
输出结果:
二维数组第一个元素的长度:3
-----
1
2
3
-----
0
0
0
0
-----
这个结果看起来就太迷惑了!
3、数组的排序,只能排序基本类型数组,如果是其他类型,可以考虑使用集合工具Collections来做。
4、尽可能不要使用多维数组,多维数组效率会有很大的损失。
以上部分转自http://lavasoft.blog.51cto.com/62575/183878/
发表评论
文章已被作者锁定,不允许评论。
-
ReentrantLock与Condition
2017-03-17 14:25 526多线程和并发性并不是什么新内容,但是 Java 语言设计中的创 ... -
java linux监控
2017-03-13 17:49 481http://agapple.iteye.com/blog/1 ... -
transient和volatile两个关键字
2017-02-16 09:47 572transient和volatile两个关 ... -
java 锁机制
2016-12-09 13:43 465一段synchronized的代码被 ... -
java 正则表达式
2016-12-02 10:28 516众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字 ... -
java ClassNotFoundException和NoClassDefFoundException的差别
2016-08-17 19:47 907首先从名字上可以看出一类是异常,一类属于错误。异常可以通过异常 ... -
ThreadLocal
2016-07-19 11:10 326ThreadLocal是什么 Thre ... -
java CAS
2016-07-10 14:55 330cas 乐观锁每次不锁定整个线程,在操作之前进行判断。悲观锁独 ... -
concurrenthashmap
2016-07-10 11:11 422hash table虽然性能上不如 ... -
java 线程池的使用
2016-07-10 09:52 3721. 引言 合理利用线程池能够带来三个好处。第一:降低资源消 ... -
java.util.concurrent
2016-07-03 16:24 409我们都知道,在JDK1.5之 ... -
JVM 配置 以及垃圾收集器的选择
2016-04-15 12:36 728JVM监控的关键指标说明: a) FGC的环比增加次数。Zab ... -
jvm实时监控工具
2016-04-09 09:35 461 -
哈希 、一致性哈希、余数式哈希
2016-04-07 16:10 861什么是Hash Hash,一 ... -
jvm dump 相关
2016-03-22 17:22 681http://www.cnblogs.com/edwardla ... -
深入剖析volatile关键字
2016-03-21 16:02 534深入剖析volatile关键字 ... -
java线程安全问题之静态变量、实例变量、局部变量
2016-03-08 12:52 571java多线程编程中,存在很多线程安全问题,至于什么是线程安全 ... -
有状态的bean和无状态的bean的区别
2016-03-08 11:23 1493有状态会话bean :每个用户有自己特有的一个实例,在用户的生 ... -
Java nio详解
2016-01-20 16:30 551http://www.ibm.com/developerwor ... -
java 不定长数组
2015-11-24 15:00 766在调用某个方法时,若是方法的参数个数事先无法确定该如何处理 ...
相关推荐
在这个"java数组总结共9页.pdf.zip"的文档中,我们很可能会找到关于Java数组的全面概述,包括其定义、创建、初始化、操作以及一些重要的特性。下面是对Java数组的详细解释。 一、数组的定义 在Java中,数组是一种...
### Java数组总结使用手册 #### 一、数组基础概念 **1.1 什么是数组** 数组是一种基本的数据结构,用于存储一系列相同类型的元素。在Java中,数组是一种对象,它包含固定数量的相同类型的元素。数组中的每一个...
### Java数组与内存控制 #### 一、Java数组在内存分配方面的知识 ##### 1.1 数组初始化 - **声明数组的时候如何分配内存:** - 在Java中,数组的声明并不直接分配内存,而仅仅是创建了一个数组引用变量。例如: ...
对数组的总结和分析,通过这个结构记住它,在开发的过程中使用
本篇文章总结了十个重要的Java数组操作方法,适用于学习和复习Java编程知识。 1. **声明数组**: 在Java中声明数组时,我们需要指定数组的类型,然后用大括号{}初始化数组。例如,声明一个包含五个字符串的数组: ...
总结,Java数组作为基本的数据结构,是程序设计的基础。理解其创建、访问、遍历和操作方法,以及与字符串、集合的区别和联系,对于编写高效、可靠的Java代码至关重要。同时,熟练掌握`Arrays`类的使用能进一步提升...
总结,Java数组是编程基础,理解其概念、创建和操作方法对于编写高效、可靠的代码至关重要。在实际编程中,根据需求选择合适的数据结构,如数组或集合,是解决问题的关键。通过深入学习和实践,可以更好地掌握数组这...
### Java数组和字符串详解 #### 实验目标与背景 本次实验旨在深化理解Java中的数组与字符串操作,聚焦于`String`类与`StringBuffer`类的掌握,包括它们的常用方法、相等性判断的不同方式、数组的创建及引用机制,...
### Java数组讲解 #### 1. 数组基本概念与初始化 - **定义**: 数组是一种基本的数据结构,用于存储相同类型的多个元素。这些元素在内存中是连续存储的。 - **初始化**: 可以通过两种方式进行初始化:动态初始化和...
Java数组操作方法总结 Java数组操作方法总结是Java编程语言中一种基本的数据类型,数组是由一组相同类型的变量所组成的数据类型,它们以一个共同的名称表示,数组中的个别元素则以标注来表示其存放的位置。本文将...
java数组总结文档
Educoder题目:Java入门 - 数组进阶答案解析
### Java数组与字符串用法小结 在Java编程语言中,数组和字符串是两种非常重要的数据类型,它们在处理大量数据或文本时扮演着至关重要的角色。本文将围绕标题“java数组与字符串用法小结”及描述中的知识点进行详细...
### Java数组遍历方法集合 在Java编程语言中,数组是一种基本的数据结构,用于存储同类型数据元素的集合。为了处理这些数据元素,通常需要遍历数组中的每一个元素来进行访问或操作。本文将详细介绍三种常用的Java...
在Java编程语言中,数组是一种特殊的对象,它用于存储同类型的多个数据项。数组的定义、创建和使用是Java编程的基础,而方法数组则引入了更高级的概念,允许我们在一个数组中存储方法引用。让我们深入探讨这两个主题...
在Java编程语言中,数组是一种固定...总结来说,理解Java中的数组类型和`ArrayStoreException`是编写安全、无错代码的关键。避免此异常的最佳实践是确保在存储元素时类型兼容,并在必要时进行适当的类型检查和转换。
我对Java中数组的方法做了一下总结,希望能帮到各位