Java数组应用总结

简介:
一、数组的特点
 
1、数组是一个有界的线性序列,大小被固定、随机访问速度非常快(超过集合);
2、数组可以存储基本类型,也可以存储引用类型;
3、数组如果没被初始化则为null,数组如果没被显式初始化,则会自动初始化。其中的值与数组元素类型的默认初始化值相同;
4、数组可以有多维的,但是,一维数组要比多维的快很多。在对效率要求很高的程序中,一般都不用多维数组,需要用的时候,也常常将多维数组转换为一维的存储方式;
5、数组的声明不能使用泛型,其实也没必要在数组上使用泛型;
 
二、数组的初始化
 
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, 8); 
                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 
----- 



----- 




-----
 
这个结果看起来就太迷惑了!
 
3、数组的排序,只能排序基本类型数组,如果是其他类型,可以考虑使用集合工具Collections来做。
 
4、尽可能不要使用多维数组,多维数组效率会有很大的损失。


本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/183878,如需转载请自行联系原作者
相关文章
|
21天前
|
移动开发 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【4月更文挑战第3天】在移动开发领域,性能优化一直是开发者关注的焦点。随着Kotlin的兴起,其在Android开发中的地位逐渐上升,但关于其与Java在性能方面的对比,尚无明确共识。本文通过深入分析并结合实际测试数据,探讨了Kotlin与Java在Android平台上的性能表现,揭示了在不同场景下两者的差异及其对应用性能的潜在影响,为开发者在选择编程语言时提供参考依据。
|
22天前
|
缓存 算法 Java
Java内存管理与调优:释放应用潜能的关键
【4月更文挑战第2天】Java内存管理关乎性能与稳定性。理解JVM内存结构,如堆和栈,是优化基础。内存泄漏是常见问题,需谨慎管理对象生命周期,并使用工具如VisualVM检测。有效字符串处理、选择合适数据结构和算法能提升效率。垃圾回收自动回收内存,但策略调整影响性能,如选择不同类型的垃圾回收器。其他优化包括调整堆大小、使用对象池和缓存。掌握这些技巧,开发者能优化应用,提升系统性能。
|
21天前
|
Java
深入理解Java并发编程:线程池的应用与优化
【4月更文挑战第3天】 在Java并发编程中,线程池是一种重要的资源管理工具,它能有效地控制和管理线程的数量,提高系统性能。本文将深入探讨Java线程池的工作原理、应用场景以及优化策略,帮助读者更好地理解和应用线程池。
|
28天前
|
Java 编译器 Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
在开发高性能的Android应用时,选择合适的编程语言至关重要。近年来,Kotlin因其简洁性和功能性受到开发者的青睐,但其性能是否与传统的Java相比有所不足?本文通过对比分析Kotlin与Java在Android平台上的运行效率,揭示二者在编译速度、运行时性能及资源消耗方面的具体差异,并探讨在实际项目中如何做出最佳选择。
17 4
|
3天前
|
存储 Java 程序员
Java 数组
4月更文挑战第16天
|
1天前
|
安全 Java 调度
Java线程:深入理解与实战应用
Java线程:深入理解与实战应用
9 0
|
1天前
|
Java
Java中的并发编程:理解和应用线程池
【4月更文挑战第23天】在现代的Java应用程序中,性能和资源的有效利用已经成为了一个重要的考量因素。并发编程是提高应用程序性能的关键手段之一,而线程池则是实现高效并发的重要工具。本文将深入探讨Java中的线程池,包括其基本原理、优势、以及如何在实际开发中有效地使用线程池。我们将通过实例和代码片段,帮助读者理解线程池的概念,并学习如何在Java应用中合理地使用线程池。
|
6天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
6天前
|
设计模式 算法 Java
Java中的设计模式及其应用
【4月更文挑战第18天】本文介绍了Java设计模式的重要性及分类,包括创建型、结构型和行为型模式。创建型模式如单例、工厂方法用于对象创建;结构型模式如适配器、组合关注对象组合;行为型模式如策略、观察者关注对象交互。文中还举例说明了单例模式在配置管理器中的应用,工厂方法在图形编辑器中的使用,以及策略模式在电商折扣计算中的实践。设计模式能提升代码可读性、可维护性和可扩展性,是Java开发者的必备知识。
|
6天前
|
安全 Java API
函数式编程在Java中的应用
【4月更文挑战第18天】本文介绍了函数式编程的核心概念,包括不可变性、纯函数、高阶函数和函数组合,并展示了Java 8如何通过Lambda表达式、Stream API、Optional类和函数式接口支持函数式编程。通过实际应用案例,阐述了函数式编程在集合处理、并发编程和错误处理中的应用。结论指出,函数式编程能提升Java代码的质量和可维护性,随着Java语言的演进,函数式特性将更加丰富。