面向对象笔试题(2)讲解_第1页
面向对象笔试题(2)讲解_第2页
面向对象笔试题(2)讲解_第3页
面向对象笔试题(2)讲解_第4页
面向对象笔试题(2)讲解_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、填空题I Java中一个类可以有一个父类。2如果一个类的声明中没有使用exte nds关键字,这个类被系统默认为是Object 类的子类。3子类自然地继承了其父类中不是private的成员变量作为自己的成员变量。4当子类中定义的成员变量和父类中的成员变量同名时,子类的成员变量隐藏 了父类的成员变量。5子类通过成员变量的隐藏和方法的重写可以把父类的状态和行为改变为自身的状态和行为。6对于重写或继承的方法,Java运行时系统根据调用方法的实例的类型来选择调用哪个方法。7对于子类创建的一个对象,如果子类重写了父类的方法,则运行时系统调用子类的方法。8对于子类创建的一个对象,如果子类继承了父类的方法,

2、未重写,则运行时调用一父类的方法。9在Java语言中多态性体现在由方法重载实现的静态多态性和重写 实现的动态多态性。10 final -类不能被继承,即不能有子类。II abstract类不能创建对象,必须产生其子类,由子类创建对象。12如果一个方法被修饰为final方法,则这个方法不能被重写。13对于 abstract方法,只允许声明,而不允许实现。14如果一个方法被修饰为 final方法,则这个方法不能被重写 。15如果一个类是一个 abstract类的子类,它必须具体实现父类 的abstract方法。16局部变量的名字与成员变量的名字相同,若想在该方法内使用成员变量,必须使用关键字 th

3、is 。17在关键字中能代表当前类或对象本身的是this 。18如果在子类中想使用被子类隐藏的父类的成员变量或方法可以使用关键字super 。19子类如果想用父类的构造方法,必须在子类的构造方法中使用,并且必须使用关键字super 来表示。20如果在子类中想使用被子类隐藏了的父类成员变量或方法就可以使用关键字super 。21 Java中为了克服单继承的缺点,使用了接口,一个类可以实现多个接口。22 接口 就是方法定义和常量值的集合。23使用关键字_interface来定义接口。24接口定义包括接口的声明和接口体。25 一个类通过使用关键字 _implements声明自己实现一个或多个接口。2

4、6如果一个类实现了某个接口,那么这个类必须实现该接口的所有方法。27接口中的方法被默认的访问权限是public一。28接口的定义包括接口的声明和接口体。29定义接口时,接口体中只进行方法的声明,不允许提供方法的具体实现一。30如果接口中的方法的返回类型不是void的,那么在类中实现该接口的方法时,方法体至 少要有一个 return 语句。31 内部类指那些类定义代码被置于其他类定义中的类。32 _泛型是Java SE5.0的新特性。33创建对象常用的方法就是使用new运算符和类的构造方法。34把Java应用程序中涉及到的类压缩成一个_jar _文件。35 数组是相同类型的数据按顺序组成的一种引

5、用数据类型。36 Java中定义数组后通过 数组名_加数组下标,来使用数组中的数据。37 Java中声明数组包括数组的名字、数组包含的元素的数据类型。38 声明数组仅仅是给出了数组名字和元素的数据类型,要想真正的使用数组还必须 为它分配内存空间。39 一维数组通过下标符访问自己的元素,需要注意的是下标从0 开始。40创建数组后,系统会给每一个数组元素一个默认的值,如float型是0 _。41声明数组仅仅是给出了数组名字和元素的数据类型,要想真正地使用数组还必须为它 分配内存空间。42数组声明后,必须使用new 运算符分配内存空间。43 Java中使用java.lang包中的 String 类来

6、创建一个字符串变量,因此字符串变量是类 类型变量,是一个对象。44创建一个字符串时,使用String类的构造方法。45 String_类是不可变类,对象所包含的字符串内容永远不会被改变。46 StringBuffer 类是可变类,对象所包含的字符串内容可以被添加或修改。47使用String类的length ()方法可以获取一个字符串的长度。48可以使用String类的 startWith(String s)方法判断一个字符串的前缀是否是字符串s。49可以使用String类的endsWith(String s)方法判断一个字符串的后缀是否是字符串s。50可以使用String类的 equals (

7、String s)方法比较一字符串是否与字符串s相同。51字符串调用 indexOf(String s) 方法从当前字符串的头开始检索字符串s,并返回首次出现s的位置。52字符串调用indexOf方法检索字符串 s,并返回首次出现s的位置。如果没有检索到字符串s,该方法返回的值是_+1 _。53 一个字符串s通过调用方法 trim() 得到一个字符串对象,该字符串对象是s去掉前后空格后的字符串。54 java.lang包中的Integer类调用其类方法:parseInt 可以将“数字”格式的字符串,如“2387”,转化为int型数据。55可以使用java.lang包中的Integer 类将形如

8、“ 2387”的字符串转化为int型数据。56可以使用java.lang包中的Long类将字符串转化为long型数据。57可以使用String类直接调用 valueOf 方法将数值转化为字符串。58 StringBuffer类调用方法, toString() 返回缓冲区内的字符串。59 Object类有一个public方法是一toString() ,个对象通过调用该方法可以获得该对象的字符串表示。60 Object类是所有Java类的最终祖先,如果一个类在声明时没有包含extends关键词,那么这个类直接继承Object类。61对于一个已经不被任何引用变量引用的对象,当垃圾回收器准备回收该对象

9、所占用的内存时,将自动调用该对象的_finalize() 方法。62每个Java基本类型在java.lang包中都有一个相应的 包装 类,把基本类型数据转换为对象。63在Java集合中不能存放基本类型数据,如果要存放数字,应该使用包装类型_ 。64 Character类和 Boolea n类直接继承 Object类,除此以外,其他包装类都是 java.Number 的直接子类。65包装类都覆盖了Object类的_toString() 方法,以字符串的形式返回包装对象所表示的基本类型数据。66所有的包装类都是final类型,因此不能创建它们的子类 。67 Math 类提供了许多用于数学运算的静态

10、方法。68 Math类是 final类型的,因此不能有子类。69 Ran dom 类提供了一系列用于生成随机数的方法。70 Date类以毫秒数来表示特定的日期。71 java.text.DateFormat抽象类用于定制日期的格式, 它有一个具体子类为 SimpleDateFormat 。72 _FBigDecimal类能够进行浮点数的精确加法、减法和乘法运算,对于浮点数的除法运算,可以满足用户指定的精度。73异常处理方法是一种非常有用的辅助性程序设计方法。采用这种方法可以使得在程序设计时将程序的正常流程与错误处理分开,有利于代码的编写和维护。74按异常在编译时是否被检测来分,异常可以分为两大

11、类:受检异常与非受检异常_。75程序可以处理的异常对应的类是Exception 及其子类。76抛出异常可以利用try catch 语句。77处理异常的方式有两种:捕获异常方式与转移异常方式。78捕捉异常方式是通过try catch结构处理异常。79在try-catch-fi nally结构中, fin ally语句块一般总是会被执行,不管有没有异常产生。80异常处理流程中,其中 try 代码块包含了可能发生异常的程序代码。81异常处理流程中,其中catch代码快紧跟在try代码块后面,用来捕获并处理异常。82异常处理流程中,其中 fin ally代码块用于释放被占用的相关资源。83对于程序中可

12、能出现的受检查异常,要么用try- catch语句捕获并处理它,要么用_throw_ 语句抛出它,Java编译器会对此做检查。二、问题题1、用代码表示 A类关联B类的情况。解析:一个Java应用中不可能只有一个类,所以了解类之间的关系对程序员来说非常重要。关联关系是最常用的一种关系,如果说 A关联B,那么就是B作为A的属 性存在。关联关系是一种复用的策略,即A关联B的时候,A可以复用B的行为。参考答案:Class APrivate B b;Public void setB(B b)This.b=b;2、请说明Java语言中数组的基本概念,数组的作用,以及数组的声明创建方式。解析:数组时任何一门

13、语言里都常用的类型,Java语言也不例外。程序员了解数组,不能仅仅从语法上了解,而应该深入理解数组的作用。数组可以用来存储类型相 同的元素,作为一种数据容器使用。和数组类似的概念是集合,也能作为数据容器使 用。参考答案:数组时相同元素的集合,作为数据容器使用。声明创建一个int型数组, 如下所示:intx=new int3;其中3是数组的长度,该数组能够存储3个int型变量。3、 使用代码,创建一个长度为5的String型数组,并使用增强for循环迭代数组打印出数组中的元素。解析:增强for循环是JDK5增加的特性,可以方便地遍历数组或集合。程序员需 要了解的是,如果JDK版本低于5.0,则不

14、支持这个功能。另外,并不是说有了增强for循环后,传统的for循环就不被使用,增强for循环只能用来方便地遍历数组和集合,其他情况下还要使用传统的for循环。参考答案:String| sArray = new String5;For(String s:sArray)System.out.println(s);4、说明Arrays类的作用。解析:在实际工作中,常常需要对数组中的元素进行处理,例如排序等。初级程 序员往往选择自己编写算法实现。实际上 APV中提供了 Arrays类,该类中定义了很 多和数组有关的工具方法,能够方便地处理数组,是程序员必须掌握的类。参考答案:Arrays类是java.

15、util包中的一个类,类中所有的方法都是static方法,这些方法都是数组对象的工具方法,能够对数组进行处理,如sort方法可以对数组元素进行排序5、 请使用简单代码展示A类依赖B类的含义。解析:对于程序员来说,了解类和类之间的关系非常必要。依赖关系指的是一种 瞬间的关系。如果 A依赖B, 般指的是 A类的某个行为,需要B类对象作为参数。参考答案:Class APublic void f(B b)6、请说明依赖关系和关联关系的区别。解析:关联关系和依赖关系是非常常见的两种关系,二者的区别也很明显,程序 员了解二者的区别能够更深入的理解面向对象的思想。参考答案:依赖关系是一种瞬时关系,A依赖B,

16、指的是A的某个行为的参数是 B的类型,也就是说,A要想实现这个行为,必须依赖B的实例,A关联B,是一种长久的关系。?的是B作为A的属性存在,只要实例化一个 A的对象,就会为这个A的 对象实例化一个 B的对象,作为它的属性使用,可以在A中任何需要使用 B的地方使用Bo7继承有什么作用,Java语言中的继承有什么特点?解析:继承是面向对象语言的一大特征,主要作用是重复使用,子类通过继承父 类,能够重复使用父类的属性和方法。指的注意的是,有两个策略都可使实现重复使 用,一个是关联,一个是继承,实际编程中,关联用的更多。因为子类继承父类后, 相当于父类中的细节将暴露给子类。初级程序员一定不要随意使用继

17、承,避免滥用继 承。参考答案:继承主要为了能够重复使用父类中的成员。Java语言中的继承是单继承,也就是说一个类最多只能继承一个父类。8、什么是方法覆盖(override)?并说明方法覆盖与方法重载(overioad )的区别。 解析:方法覆盖是一个非常重要的概念,是多态性的一个体现。方法覆盖发生再去爱继承关系中,当子类需要修改从父类继承到某个方法的方法体时,就可以声明一 个父类同名同参数同返回值的方法,这样就对父类中的那个方法进行了覆盖,子类对 象调用该方法时将自动绑定到子类中的方法API中很多类中都进行了方法覆盖, 如String类中的toString方法,就覆盖了父类 Object中的t

18、oString方法。参考答案:覆盖是发生在继承关系的子类中,当子类要修改从父类继承的某个方法 的方法体时,就可以在子类中声明一个与父类同名、同参数并且同返回值类型的方法, 这就是方法覆盖。而重载与继承没有关系,指的是在一个类中可以同时声明多个同名 但不同参数的方法,称为重载。9、请说明什么是抽象类?抽象类有什么作用?解析:初级程序员往往不需要自己创建抽象类,但是必须了解抽象类的概念,并 且会使用抽象类。抽象类往往是设计阶段的概念,用来定义多个子类的模板,一些具 体的实现可以在子类中进行。初级程序员往往需要会创建子类继承抽象类,实现抽象 类中的方法。在 API中,抽象类比比皆是。参考答案:抽象类

19、是不能实例化的类,使用abstract修饰。抽象类往往用来做父类使用,定义一些子类的共同属性或行为。10、请说明抽象方法的含义,并说明抽象类与抽象方法的关系。解析:抽象方法都是在抽象类中定义的,是用来定义子类what to do的策略,而具体的how to do都在子类中实现。参考答案:抽象方法是没有办法体的方法,使用abstract修饰。抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类。11、super关键字的两种用法。解析:使用一些IDE生成代码时,常常会在构造方法中见到super这个关键字。顾名思义,super是和父类有关的一个关键字,熟悉 super的用法对熟练掌握继承很有 必

20、要。参考答案:如 super():表示调用父类中的每一参考的构造方法:又如super(10);表示调用父类中的具有一个整型参数的构造方法。第二种用法是在子类中调用父类中 的成员,如super.f();意思是调用父类中的f()方法。12、final类与final方法有什么作用?解析:final修饰符是一个用途非常广泛的修饰符,可以修饰类,方法,以及属性。参考答案:final类是不能够被继承的类,称为终极类,如String类就是final类,不能有子类。final修饰方法后,是终极方法,不能被子类覆盖,但是可以被子类继承 使用。13什么是多态函数?多态函数有什么用?解析:多态性是面向对象语言的的一

21、大特征,重载,覆盖,多态参数是多态性的一种表现形式。多态参数处处可见,例如某方法f(Object o),这个方法的参数类型是Object,使用该方法时,只要传递给f的单数类型是 Object即可。也就是说,Object类的任意参数可以传递给f方法。这就是多态参数。意思是对外形式都一样,都是Object,具体实现可以是这个类型的任意子类,这就使得该方法比较灵活,Object类即使有了新的子类,却不需要修改,就能直接作用到那个子类。了解多态参数的含义 和使用,对于Java的使用特别关键。参考答案:多态函数就是参数的类型是某个父类类型,具体为这个参数赋值的不 同以使用该父类的任意子类的对象。使用多态

22、参数,可以使程序的扩展性更好,即 使%的子类方法不需要任何修改,就能接受子类类型进行处理。14.Object类有什么特点?解析:Object类是一个非常重要的类,是所有类的父类,包括数组在内,也就是 对一个Java类,不管是API中定义的,还是自定义的类,都直接或间接的继承了Object类。所以,如果有一个方法f(Object o),那么可以传递给这个方法任意一个类的对象,包括% 。因为所有对象都可以说是Object类型。参考答案:Object类是多有类的直接或间接的父类。15.0bject类中的toString方法有什么用?解析:Object类是所有类的父类,所以Object类中的方法是所有

23、类都默认具备的。 类中的toString方法可以将任意一个对象作为字符串返回,默认的格式是类名内地% ” API中很多类已经覆盖了这个方法,将其返回值的格式进行了自定义, 如String类中的方法已经覆盖为返回字符串的字符序列。toString方法在很多场合被自动调用,例如% 一个对象时,就自动调用该对象的toString方法,如果需要修改返回字符串的格式,%另外类中的覆盖toString方法。参考答案:toString方法可以把对象作为字符串返回。16.0bject类中的equals方法和hashCode方法。解析:在Object类中,equals方法比较对象的引用值,也就是只有物理上是同一

24、 对象的两个引用,在使用equals方法返回true。hashCode方法返回一个对象的内在地址的十六进制值。由于Object类是所有类的父类,所以任意类中都拥有这两个方法,并都可以进行覆盖。尤其是操作Set,Map对象时集合元素类的equals方法和hashCode方法非常必要,因为 Set和Map判断元素是否重 %是依靠这两个方法进行。一般 的原则是:如果存在 X和Y两个对象,调用 X.equals(Y)相同时,那么调用 hashCode 方法返回值也应该相同;如果X.equals(Y)返回false时,那么调用 hashCode方法返回值可能相同,也可能不同。值得注意的是,只要你覆盖了e

25、quals方法,一定%则覆盖hashCode方法。在实际工作中,很多IDE环境都支持覆盖 equals和hashCode方 法。参考答案:Oject类中的equals方法用来比较两个引用值,hashCode用来返回引用的内地址的十六进制数值。在Set以及Map集合中,判断两个元素是否重复时,往往需要使用这两个方法。这两个方法往往被子类覆盖,覆盖的规则是:如果存在x和y两个对象,调用 x.equals(y)返回true时,那么调用 hashCode方法的返回值也该相同; 如果x.equals(y)返回false时,那么调用 hashCode方法返回的值可能相同,也可能不 同。17. 接口有什么特

26、点,与抽象类有什么区别?解析:接近欧的概念是一个设计层面的概念,初级程序员往往不会自己定义接口, 但是会使用接口,理解接口的概念非常必要。接口定义了实现类的规范,即what to do的部分,所有实现类必须按照这个规范进行实现。参考答案:接口的特点是不能定义变量,而且所有方法都是抽象方法。而抽象类 中可以有变量,也不强制必须有抽象方法。18. 类继承父类与类实现接口,有什么区别?解析:类继承父类与类实现接口,本质上其实是一样的。都是将父类或者接口作 为模板,在这个模板上进行扩展或者重写。程序员在实际编程中,常常需要继承父类 或者实现接口。参考答案:类继承父类只是单继承,也就是一个子类最多只有一

27、个父类;而类实 现接口可以多实现,就是一个子类可以同时实现多个接口,并覆盖所有接口中的所有 抽象方法。19. Comparable接口有什么作用解析:comparable接口是在实际编程中常常使用的接口,该接口定义了 comareTo(Object o)方法,用来定义对象的比较逻辑。这个接口常常在其他 API中会强制使用,例如Arrays类的sort( Objects )方法,就强制数组元素必须实现Comparable接口,与这个接口类似的 另外一个接口是 Comparator。参考答案:Comparable接口定义了 compareTo(Object o)方法,可以用来实现 对象的比较逻辑,

28、这个接口常常在其他API中强制使用,用来规范对象的比较逻辑第二部分异常处理1 .什么是异常?异常和错误有什么区别?解析:异常处理是面向对象语言比起过程式语言的一大改进。对于Java程序员来说,必须了解异常处理,才能顺利编程。参考答案:异常是一些不正常的事件,能够中断程序的正常执行例如才除0计算就是异常。和错误不同,异常是可以被处理的,而错误往往是不能够处理的,如内存 溢出错误。2 .nullPointException是什么异常?什么情况发生该异常?解析:程序员必须能够了解常见的异常的发生原因,并能够处理。NullPointerException就是特别常见的运行期异常。参考答案:NullPo

29、interExcepiton是空指针异常,当一个引用没哟被赋值,就是一 null值如果这种情况下, 使用该引用调用其属性或者方法, 就会发生 NullPointerException 异常。3. 说明try/catch/finally语句块的作用解析:编写Java程序,避免不了需要处理异常。Java中处理异常使用 try/catch/finally来实现。尤其其中的 finally语句非常值得程序员关注,可以用来执行 必须实现的功能,例如数据库的链接等操作。参考答案:try语句块用来包含可能发生异常的语句,catch块用来捕获异常,finally用来包含必须执行的语句。4如何使用语句抛出异常,

30、抛出异常后如何处理?解析:某些业务逻辑的非正常事件流,可以使用抛出异常来标记。抛出的异常必 须是有意义的异常类型,建议不要使用API中的标准异常类,避免混淆。参考答案:使用 throw语句就可以抛出异常,如throw new XXXException()。抛出异常时一般情况下会在声明方法处使用throws声明该类型的异常,调用该方法是编译器将提示异常。5. throws关键字和throw关键字有什么区别和联系?解析:throws和throw是异常处理时两个常见的关键字,初级程序员常常容易正确理解throw和throws的作用和区另说明已经能比较深入理解异常处理。Throw用来抛出异常,如果执行

31、了 throw语句,程序将发生异常,进入到异常处理机制。Throws 用来声明异常,说明这个方法可能会发生某些类型的异常,那么编译器将强制在调用 这个方法的时候处理异常。API中的很多方法都使用了throws声明了异常,所以使用这些方法时编译器会提示需要处理异常。参考答案:throw用来在方法体内抛出异常,而throws用来在方法声明处声明异常。这两个关键字有着一定的联系。如果一个方法中使用了throw关键字抛出了异常,那么要么立即用try/catch语句进行捕获,要么就是用throws进行声明,否则将出现编 译错误。然而,并不是只有使用了throw关键字之后才能使用 throws关键字,语法

32、上来说,任何一个方法都可以直接使用throws关键字,抽象方法也可以使用。6什么是自定义异常类?为什么要自定义异常类?解析:企业应用中,往往会自定义一系列的异常类,标记一些非正常的事件流。然而,这些自定义异常类不会让每个程序员都自定义,而是会由专人定义,分发给程 序员使用。参考答案:自定义异常类区别于API中的标准异常类,指的是开发人员自己创建的异常类。只要继承API中某个异常类就可以自定义一个异常类,常常集成Exception类。自定义异常类主要是为了标记业务逻辑中非正常事件流,避免与API中的标准异常混淆。第四部分 核心API1请画出Java集合框架的主要接口和类的继承关系。解析:集合石非

33、常重要的类型,也是企业考察员工编程能力时常常关注的知识点。程序员应该熟悉Java集合框架的主要继承关系,掌握常用集合类的用法和特点Col lee non 搖【1Mi 接口Selffi I!Array List 类1 tnkedlisiL liishSclTreeSet类1-HiishMap11 tillable 类pRiperiics2. Collection接口和Map接口分别定义了什么集合类型?有什么区别?解析:Collection和Map是Java集合框架中两个基本集合类型,要区别不同的集合首先要从Collection和Map开始。参考答案:Collection接口是传统的集合接口,可以

34、把单个对象存储进来。而Map接口是映射接口,存储的是键值对。3. 用简单代码演示创建一个泛型类为Customer类的List对象,并使用增强 for循环迭代集合。解析:JDK5以后,集合框架中的接口和类都是泛型类及泛型接口,并可以使用增 强for循环迭代集合。程序员需要确认开发平台的JDK版本,如果低于5.0则不能使用这些功能。参考答案:ArrayList list = new ArrayList();For(Customer c : list)4. List和Set集合有什么区别?解析:List和Set是Collection接口的两个子接口,也是使用最多的两种集合类型。 程序员应该熟悉这两个

35、接口的基本特征,能够更准确地选择正确的集合类型。参考答案:List实现了列表类型的集合,List中的元素是有序(ordered)的,每个元素根据放入集合的顺序而对应一个索引值,可以根据这个索引值返回集合原宿。而Set实现了不重复元素集合,即Set中的元素不能够重复,重复的元素将无法添加到集合中。5. List接口有哪几个实现类?分别说明其特征解析:List是用的较多的集合类型, List是一个接口,具体使用 List集合类型时, 需要使用时实现类。List接口的每个实现类也都实现了不同的数据结构,各自具有不同的特征,其中最常用的是 List实现类。参考答案:List接口中有以下几个常用实现1

36、ArrayList :实现了动态数组的特征。2 LinkedList :实现了链表的数据结构,LinkedList也可以用作栈或者队列。3 Vector: 向量。4 ArrayList Vector类的功能 ArrayList都可以实现,区别在于 Vector是现行同步 的。6. Collectioin 和 Collections 有什么区别?解析:很多初级程序员对 Collectioni和Collections容易混淆,二者的名字非常类似, 本义却大大不同,Collections类与Arrays类非常类似,都是工具类,程序员应该熟悉掌 握。参考答案:Collection是一个接口的名字,定义

37、了集合类型的共同特征。而Collections 是一个类的名字,是集合类型的工具类,类中定义了大量的静态方法,能够操作及和对象。7. 如何将一个 Collection转换成数组?解析:集合和数组有很多共同的地方,二者都是作为数据容器使用,用来持有数据。数组的长度是固定的,集合的长度却可以动态扩展,数组由于可以直接通过索引操 作其元素,所以性能和效率较高。实际应用中,可能使用及合作为临时变量持有数据, 却将处理结果转换成数组返回。参考答案:Collection接口中定义了 toArray (T a )方法来将集合转换为数组,其 中T是泛型类型。8. 集合的作用?集合是可以存储一批类型不同的对象,

38、针对集合的实现类有很多,作用都是一样的,即存储、传输数据,但存储的数据结构不一样,其速度、安全性也不一样。9. HashMap和TreeMap在性能上有什么样的差别呢?你比较倾向于使用哪一个?一个平衡树的性能是O(logn)。 Java里的TreeMap用一个红黑树来保证key/value的排序。红黑树是平衡二叉树。保证二叉树的平衡性,使得插入,删除和查找都比较快, 时间复杂度都是 O(log n)。不过它没有 HashMap快,HashMap的时间复杂度是 0(1), 但是TreeMap的优点在于它里面键值是排过序的,这样就提供了一些其他的很有用的 功能。使用无序的 HashSet和Hash

39、Map,还是使用有序的 TreeSet和TreeMap,主要取决于你的实际使用场景,一定程度上还和数据的大小以及运行环境有关。比较实际的一个原因是,如果插入和更新都比较频繁的话,那么保证元素的有序可以提高快速和频繁查找的性能。如果对于排序操作(例如产生一个报表合作者运行一个批处理程序)的要求不是很频繁的话,那么把数据以无序的方式存储,然后在需要排序的时候用 Collections.sort(,)来进行排序,会比用有序的方式来存储可能会更加高效。这个只是一 种可选的方式,没人能给你一个确切的答案。即使是复杂度的理论,例如0(n),成立的前提也是在n足够大的情况下。只要在n足够小的情况下,就算是0(n)的算法也可能会比0(log n)的算法更加高效。另外,一个算法可能在AMD处理器上的速度比在In tel处理器上快。如果你的系统有交换区的话,那么你还要考虑磁盘的性能。唯一可 以确定的性能测试途径是用大小合适的数据来测试和衡量程序的性能和内存使用量。在你所选择的硬件上来测试这两种指标,是最合适的方法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论