`
flyingis
  • 浏览: 290250 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java容器分析--数组

阅读更多

         作者:Flyingis

    数组是
Java语言内置的类型,除此之外,Java有多种保存对象引用的方式。Java类库提供了一套相当完整的容器类,使用这些类的方法可以保存和操纵对象。下面分别进行讨论,在研究Java容器类之前,先了解一下Java数组的基本功能和特性。

1.  数组的基本特性<!----><o:p></o:p>

         数组与其它种类的容器(List/Set/Map)之间的区别在于效率、确定的类型和保存基本类型数据的能力。数组是一种高效的存储和随机访问对象引用序列的方式,使用数组可以快速的访问数组中的元素。但是当创建一个数组对象(注意和对象数组的区别)后,数组的大小也就固定了,当数组空间不足的时候就再创建一个新的数组,把旧的数组中所有的引用复制到新的数组中。<o:p></o:p>

         Java中的数组和容器都需要进行边界检查,如果越界就会得到一个RuntimeException异常。这点和C++中有所不同,C++vector的操作符[]不会做边界检查,这在速度上会有一定的提高,Java的数组和容器会因为时刻存在的边界检查带来一些性能上的开销。<o:p></o:p>

         Java中通用的容器类不会以具体的类型来处理对象,容器中的对象都是以Object类型处理的,这是Java中所有类的基类。另外,数组可以保存基本类型,而容器不能,它只能保存任意的Java对象。<o:p></o:p>

         一般情况下,考虑到效率与类型检查,应该尽可能考虑使用数组。如果要解决一般化的问题,数组可能会受到一些限制,这时可以使用Java提供的容器类。<o:p> </o:p>

2.  操作数组的实用功能<o:p></o:p>

         java.util.Arrays类中,有许多static静态方法,提供了操作数组的一些基本功能:<o:p></o:p>

         equals()方法----用于比较两个数组是否相等,相等的条件是两个数组的元素个数必须相等,并且对应位置的元素也相等。<o:p></o:p>

         fill()方法----用以某个值填充整个数组,这个方法有点笨。<o:p></o:p>

         asList()方法----接受任意的数组为参数,将其转变为List容器。<o:p></o:p>

         binarySearch()方法----用于在已经排序的数组中查找元素,需要注意的是必须是已经排序过的数组。当Arrays.binarySearch()找到了查找目标时,该方法将返回一个等于或大于0的值,否则将返回一个负值,表示在该数组目前的排序状态下此目标元素所应该插入的位置。负值的计算公式是“-x<!----><st1:chmetcnv unitname="”" sourcevalue="1" hasspace="False" negative="True" numbertype="1" tcsc="0" w:st="on">-1”</st1:chmetcnv>x指的是第一个大于查找对象的元素在数组中的位置,如果数组中所有的元素都小于要查找的对象,则x = a.size()。如果数组中包含重复的元素,则无法保证找到的是哪一个元素,如果需要对没有重复元素的数组排序,可以使用TreeSet或者LinkedHashSet。另外,如果使用Comparator排序了某个对象数组,在使用该方法时必须提供同样的Comparator类型的参数。需要注意的是,基本类型数组无法使用Comparator进行排序。<o:p></o:p>

         sort()方法----对数组进行升序排序。<o:p></o:p>

         Java标准类库中,另有static方法System.arraycopy()用来复制数组,它针对所有类型做了重载。<o:p></o:p>

<o:p></o:p>

3.  数组的排序<o:p></o:p>

         Java1.01.1两个版本中,类库缺少基本的算法操作,包括排序的操作,Java2对此进行了改善。在进行排序的操作时,需要根据对象的实际类型执行比较操作,如果为每种不同的类型各自编写一个不同的排序方法,将会使得代码很难被复用。一般的程序设计目标应是“将保持不变的事物与会发改变的事物相分离”。在这里,不变的是通用的排序算法,变化的是各种对象相互比较的方式。<o:p></o:p>

Java有两种方式来实现比较的功能,一种是实现java.lang.Comparable接口,该接口只有一个compareTo()方法,并以一个Object类为参数,如果当前对象小于参数则返回负值,如果相等返回零,如果当前对象大于参数则返回正值。另一种比较方法是采用策略(strategy)设计模式,将会发生变化的代码封装在它自己的类(策略对象)中,再将策略对象交给保持不变的代码中,后者使用此策略实现它的算法。因此,可以为不同的比较方式生成不同的对象,将它们用在同样的排序程序中。在此情况下,通过定义一个实现了Comparator接口的类而创建了一个策略,这个策略类有compare()equals()两个方法,一般情况下实现compare()方法即可。<o:p></o:p>

使用上述两种方法即可对任意基本类型的数组进行排序,也可以对任意的对象数组进行排序。再提示一遍,基本类型数组无法使用Comparator进行排序。<o:p></o:p>

Java标准类库中的排序算法针对排序的类型进行了优化——针对基本类型设计了“快速排序”,针对对象设计的“稳定归并排序”。一般不用担心其性能。
<o:p>
其它相关内容:
Java容器分析--List和Set
Java容器分析--Map</o:p>

分享到:
评论

相关推荐

    java源码包---java 源码 大量 实例

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    Java对象的容纳 数组。容器

    Java对象的容纳 一. 数组二. 容器Java对象的容纳 一. 数组二. 容器

    JAVA容器知识积累

    JAVA容器基础知识,分析及使用方法,知识总结,数组,List,set,Map

    初识数组(java) 第一回

    初识数组(Java) 第一回数组的概念数组的特点数组的初始化方式数组的使用 数组的概念 数组的概念:是一种容器,可以同时存放多个数据值; 数组的特点 数组的特点: 数组是一种引用数据类型; 数组当中的多个数据,...

    java课程设计-记忆测试游戏

    该文件所包含的MemoryTestArea类是主类MemoryGame窗口的一个JPanel容器,所创建的对象成为测试区,这个测试区被添加到MemoryGame窗口的中心; 3.Block.java 该文件所包含的Block类是JButton的子类,负责为...

    Java-Library:基于数组的容器类库的实现

    Java库项目描述实现一个基于数组的容器类Library,并使用它来保存该图书馆拥有的书籍清单的信息。 Library类的一个实例是一个可扩展的bag数据结构,其初始容量为4,并在容量满时自动将其容量增加(增加)4。终极成绩...

    Java面试宝典-经典

    11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-&gt;(一千零一拾一元整)输出。 81 三. html&JavaScript&ajax部分 82 1. 判断第二个日期比第一...

    Java容器.xmind

    底层数组实现,查询快,增删慢 LinkedList 标记: class CRUD : boolean add​(E e) E get​(int index) 底层为链表,增删快,查询快 Vector 标记: class 底层数组实现,线程安全,速度太慢,没用 ...

    java关于数组(学习笔记)

    数组就是一个容器,可以同时容纳多个元素。意思是“一组数据”。 Java语言中的数组是一种引用数据类型。不属于基本数据类型,父类同样是Object类。因为是引用数据类型,所以数组的对象存储在堆内存中。如果存储的是...

    java-servlet-api.doc

    Java Servlet API说明文档 绪言 这是一份关于2.1版JavaServletAPI的说明文档,作为对这本文档的补充,你可以到http://java.sun.com/products/servlet/index.html下面下载Javadoc格式的文档。 谁需要读这份文档 这份...

    集合以及其相关方法介绍.txt

    数组 ----------容器 存储多个元素,固定的一个容器 例:int[] i = new int[3]; 集合 ----------容器 存储多个元素,动态可扩容的一个容器 集合的分支体系 Collection Map 存储都value 存储的是...

    C++大学教程

    1.9 Java、Internet与万维网--------------------------------------------7 1.10 其它高级语言------------------------------------------------------8 1.11 结构化编程-----------------------------------...

    函数、内存、一维数组、二维数组

    其实数组就是一个容器。 数组的好处 可以自动给数组中的元素从0开始编号,方便操作这些元素。 格式1: 元素类型[] 数组名 = new 元素类型[元素个数或数组长度]; 示例:int[] arr = new int[5]; 格式2: 元素...

    java课程设计-科学计算器.doc

    、计算器完成的是一个数学表达式,如:3+2,所以可以采用一个数组来存储数字或字 符,如3,+,2分别存储在数组中,最后运算时,可以一一取出来进行运算。 、利用按钮设计计算器的各个运算符和操作符,通过按钮的...

    Java学习笔记-个人整理的

    {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{subsection.1.3.1} {1.4}数据类型}{23}{section.1.4} {...

    javalruleetcode-leetcode-solutions-java:leetcode-解决方案-java

    两个有序数组的中位数.java) 5 [Java](/Java/005 最长回文子串.java) 6 [Java](/Java/006 ZigZag Conversion.java) 7 [Java](/Java/007 反向整数.java) 8 [Java](/Java/008 String to Integer (atoi).java) 9 [Java]...

    java源码包2

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    恒生电子JAVA笔试试题-Thinking-In-Java-Notes:ThinkinginJava学习笔记

    数组 容器深入研究 Java I/O系统 枚举类型 注解 并发 图形化用户界面 目标重点学习章节 5#初始化与清理 8#多态 9#接口 11#持有对象 14#类型信息 15#泛型 17#容器深入研究 18#Java I/O系统 20#注解 21#并发 学习计划 ...

    深入理解Java中的容器

    在Java当中,如果有一个类专门用来存放其它类的对象,这个类就叫做容器,或者就叫做集合,集合就是将若干性质相同或相近的类对象组合在一起而形成的一个整体之所以需要容器:1、数组的长度难以扩充2、数组中数据的...

    Java 常见并发容器总结

    Java 常见并发容器总结 JDK 提供的这些容器大部分在 `java.util.concurrent` 包中。 - **`ConcurrentHashMap`** : 线程安全的 `HashMap` - **`CopyOnWriteArrayList`** : 线程安全的 `List`,在读多写少的场合性能...

Global site tag (gtag.js) - Google Analytics