java基础题目题目

? ?   ? ?   ? ?   ? ?   ? ?
? ?   ? ?   ?
?   ? ?    ? ?   ? ?   ? ?   ? ?
? ?   ? ?
实用工具 |
| 大全 | 大全
     |
Copyright & 2004- 网 All Rights Reserved 中国科学院研究生院权威支持(北京) 电 话:010- 传 真:010-当前访客身份:游客 [
已有文章 2047 篇
当前位置:
115个Java面试题及回答
英文原文:
0人收藏此文章,
推荐于 1年前 (共 50 段, 翻译完成于 04-25) ()
参与翻译(13人):
, , , , , , , , , , , ,
在本教程中,我们将讨论在Java面试中,用人单位用来测试应聘者Java以及面向对象的能力的面试题目.以下章节我们将按照以下结构讨论面试问题,面向对象编程及其特性,Java及其特性的一般问题,集合,垃圾回收,异常处理,Java applets,Swing,JDBC,RMI, Servlet 和 JSP.
来,我们一起出发吧。。
&翻译的不错哦!
面向对象编程(OOP)
Java是支持并发,基于类的以及面向对象的一种计算机编程语言. 以下列举了面向对象编程的优势:
模块化编程,使维护和修改更加容易
提高代码的可靠性以及灵活性
提高代码可读性
面向对象编程有其非常明显的特性,比如说封装,继承,多态和抽象. 下面我们来分析一下每种特性.
封装(Encapsulation)
封装,提供的对象隐藏内部特性和行为的一种能力,每个对象提供了一些方法,其他的对象可以访问并改变其内部数据。在Java中,提供了三种访问修饰符: 公有的,私有的以及保护的。每个修饰符都设定了不同的访问权限,这个权限设置不会因为包的不同而有差异。
下面是使用封装的一些优点:
通过隐藏属性来保护对象的内部信息
因为可以独立的修改或者扩展对象的行为,从而提高代码的可用性以及维护性
隔离,通过阻止对象使用不希望的互动方式来交互,以此来提高模块化程度。
你可以通过访问我们的教程查看关于封装更多的细节和实例.
&翻译的不错哦!
多态(Polymorphism)
多态就是针对不同的基础数据类型呈现相同接口的一种能力,多态类型就是其操作可以适用于不同类型值的一种类型。
继承(Inheritance)
继承提供了一个对象从基类获取字段和方法的一种能力.继承提供了代码的重用性,并且在不更改现有类的情况下,对现有类增加额外的功能。
抽象(Abstraction)
抽象是从具体的实例中分离想法的过程,根据他们各自的功能而非具体的实现来开发类. Java中支持创建和存在暴露接口的抽象类, 而没有包括方法的具体实现。抽象方法的宗旨就是将类的行为和具体实现分离开。
抽象和封装的异同
抽象和封装是个互补的概念。一方面,抽象专注在对象的行为上,而另外一方面,封装专注于对象的行为的具体实现。封装是通过隐藏对象的内部信息来实现的,因此也可以被看做是抽象的一种策略。
&翻译的不错哦!
有关Java的一般问题
1. 什么是JVM?&为什么称Java为跨平台的编程语言?
Java虚拟机(Java Virtual Machine)是可以执行Java字节码的,每个Java源文件将被编译成文件,然后在JVM中执行。Java之所以被设计成可以在任意的平台运行,而不需要重写或者在不同的平台下重新编译,这些都要归功于Java虚拟机(JVM),因为JVM非常了解特定的指令的长度以及底层硬件平台的特殊性。
2. JDK和JRE之间的差异是什么?
Java运行环境(Java Runtime Enviroment) 是运行Java程序的基本的Java虚拟机,包括执行applet的浏览器插件。JDK (Java Development Kit) 是为了开发,编译和执行Java应用程序,针对Java的全功能的软件开发包,包含了JRE,编译器和工具(比如说 &&和)。
&翻译的不错哦!
3. “static” 关键字是什么意思?在Java里可以 override private 或 static 的方法吗? keyword mean ? Can you override private or static method in Java ?
static 关键字表示,访问这个成员变量或方法时,不必获取它属于的类的实例。
不能被 override,因为 override 的机制是运行时(runtime)的动态绑定,而 static 方法是在编译时静态绑定的。static 方法并不与任何类的具体实例有关,因此无法应用继承的概念。
4. 在静态方法里可以访问非静态变量吗?
Java&中的 static 变量归相应的类所有,它的值对于类的所有实例都是相同的。static 变量是在 JVM 加载类的时候初始化的。如果代码试图访问非静态的变量,而且不是通过类的实例去访问,编译器会报错,因为这些非静态变量还没有被创建呢,并且它们没有与实例相关联。
&翻译的不错哦!
5. Java 支持哪些数据类型?什么是 Autoboxing 和 Unboxing? Java语言支持的8个基本数据类型如下:
Autoboxing 是指在基本数据类型和对应的包装(wrapper)类之间。例如,编译器将 int 转换为&,将&&,等等。逆向的转换称为 unboxing。
6. 在Java中什么是方法的&Override(覆盖) 和 Overload(重载)? Java中方法的 overload 发生的条件是,同一个类里,有两个或以上的方法名称完全相同,但参数列表不同。另一方面,方法的 override 是指,子类重定义了父类里的同一个方法。Override 的方法必须方法名、参数列表和返回类型都完全相同。Override 的方法不会限制原方法的访问权限。
&翻译的不错哦!
7.Java中构造函数、构造函数重载的概念和拷贝构造函数
当类的对象被创建的时候,调用它的构造函数。每个类都有一个构造函数。如果程序员没有为类编写构造函数,Java编译器自动为类创建一个缺省的构造函数。
构造函数重载和Java中函数重载类似,可以为同一个类创建不同的构造函数,每个构造函数必须拥有唯一的参数列表。
Java与C++不同,它不支持拷贝构造函数,但是区别仅仅是,如果你没有编写类的拷贝构造函数,Java不会自动创建它。
8.Java支持多继承吗?
Java不支持多继承,每个类只允许继承一个类,但是可以实现多个接口。
&翻译的不错哦!
9.接口和抽象类有什么不同?
Java同时提供和支持抽象类和接口,它们的实现有一些共同的特点,也有如下不同:
接口中所有的方法默认都是抽象的,而抽象类可以同时包含抽象和非抽象的方法。
一个类可以实现多个接口,但它只能继承一个抽象类。
一个类要实现某个接口,必须实现这个接口声明的所有方法。而一个类不需要实现抽象父类中声明的所有方法,不过,这时候这个类也必须声明为抽象类。
抽象类可以实现接口,而且不需要实现接口中的方法。
接口中声明的变量默认是final的,而抽象类可以包含非final的变量。
接口中的成员默认是public的,而抽象类的成员可以是private,protected,或public的。
接口是绝对抽象的,不可实例化,抽象类也不可以实例化,但可以在main方法中触发实例化(注:通过匿名类实现)。
也可以查阅 & & &
10.传引用和传值 &
当对象通过传值调用时,传递的是这个对象的一个拷贝。因此,即使函数修改这个对象,也不会影响原对象的值。 &
当对象通过传引用调用时,对象本身没有被传递,而传递的是对象的一个引用。因此,外部函数对这个对象的修改,也会反映到任何出现这个对象的地方。& &&
&翻译的不错哦!
11. 进程与线程的区别 ? 进程是一个程序的执行(即正在运行的程序), 然而线程是在进程中独立的执行序列. 一个进程可以包含很多线程. 线程有时被称为轻量级的进程.
12. 说下创建线程的不同方式. 你倾向于哪种方式并说明原因 ? 有三种创建线程的方式:
继承Thread类.
实现Runnable接口.
通过Executor框架创建线程池.
首选方式是实现Runnable接口, 因为它不需要继承Thread类. 当你的程序设计需要多继承时, 使用接口会有所帮助. 另外, 线程池效率是很高的, 并且实施起来也很简单.
&翻译的不错哦!
13. 解释下可用的线程状态. 在执行期间, 线程会处于以下状态中的一种:
Runnable: 线程已准备就绪, 但没有立即运行.
Running: 处理器正在执行的线程代码.
Waiting: 处于阻塞状态的线程, 等待外部某种处理的结束.
Sleeping: 被强制休眠的线程.
Blocked on I/O: 等待I/O操作的完成.
Blocked on Synchronization: 等待取得线程锁.
Dead: 线程已经执行结束.
14. 同步方法与同步块的区别 ? 在Java程序中, 每个对象都拥有一个锁. 线程可以通过使用synchronized关键字来获取一个对象上的锁. synchronized关键字可以用于方法级别(粗粒度锁)或代码块级别(细粒度锁).
&翻译的不错哦!
applet那部分不太会document.writeln("");
引题昨天下班坐公车,听到一个和我年纪相仿的哥们儿打电话,隐约听到电话那边好像是他女朋友问他现在饿不饿,他说“我已经饿的不饿啦”。
不管是参加Java面试还是C#面试,设计模式和软件设计都是任何编程面试中的必问问题。实际上,编程能力和设计技巧是对彼此很好的补充。一个好的程序员通常都是一个好的软件设计人员。
在JAVA项目中有时候需要获取汉子的首字母,或者生成汉字的拼音首字母索引,下面是使用java得到汉字拼音首字母的方法,封装成一个工具类,方便以后使用:
Spring 概述
Spring beans
Spring注解
Spring数据访问
Spring面向切面编程(AOP)
Spring MVC
我本身是 Java 工程师出身,写代码至今已超过 15 年,创业也超过 10 年,曾经外包过很多项目给别人,也接过很多外包的项目,现在不接了,只经营电子报发送平台,在二年内累积超过 5000 家企业用户使用。
IT职业交流齐齐约定你:每周六 9:30 准时开始,欢迎参与讨论交流!世界因你而改变!
IT跳槽加薪经验群: IT求职经验群: java面试题交流群:
Copyright & 2015 java面试题2014 Java最新面试题以及答案 - 桃花岛主- - 推酷
2014 Java最新面试题以及答案 - 桃花岛主-
Java面试考点分析
1.C++或Java中的异常处理机制的简单原理和应用。&
当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsE访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。&
2. Java的接口和C++的虚类的相同和不同处。&
由于Java不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是public static,所有方法默认情况下是public.一个类可以实现多个接口。&
3. 垃圾回收的优点和原理。并考虑2种回收机制。&
Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。&
4. 请说出你所知道的线程同步的方法。&
wait():使一个线程处于等待状态,并且释放所持有的对象的lock。&
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。&
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。&
Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。&
5. 请讲一讲析构函数和虚函数的用法和作用。&
6. Error与Exception有什么区别?&
Error表示系统级的错误和程序不必处理的异常,&
Exception表示需要捕捉或者需要程序进行处理的异常。&
7. 在java中一个类被声明为final类型,表示了什么意思?&
表示该类不能被继承,是顶级类。&
8. 描述一下你最常用的编程风格。
9. heap和stack有什么区别。&
栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。&
堆是栈的一个组成元素&
10. 如果系统要使用超大整数(超过long长度范围),请你设计一个数据结构来存储这种超大型数字以及设计一种算法来实现超大整数加法运算)。&
public class BigInt()
int[] ArrOne = new ArrOne[1000];
String intString=&&;
public int[] Arr(String s)
intString =
for(int i=0;i&ArrOne.i++)
11. 如果要设计一个图形系统,请你设计基本的图形元件(Point,Line,Rectangle,Triangle)的简单实现
第一,谈谈final, finally, finalize的区别。
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。finalize是 Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
可以继承其他类或完成其他接口,在swing编程中常用此方式。
第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。
Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。
第四,&和&&的区别。
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and).
第五,HashMap和Hashtable的区别。
HashMap是Hashtable的轻量级实现(非线程
的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程
,效率上可能高于Hashtable.
第六,Collection 和 Collections的区别。
Collection是集合类的上级接口,继承与他的接口主要有Set 和List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
第七,什么时候用assert。
1.4新增关键字(语法),用于测试boolean表达式状态,可用于调试程序。使用方法 assert ,表示如果表达式为真(true),则下面的语句执行,否则抛出AssertionError。另外的使用方式assert & boolean表达式&:,表示如果表达式为真,后面的表达式忽略,否则后面表达式的值用于AssertionError的构建参数。注意编译时要增加-source 1.4 参数,否则报错。]运行时要增加 –ea参数,否则assert行被忽略
第八,GC是什么? 为什么要有GC?&
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,
提供的GC功能可以 自动监测对象是否超过作用域从而达到自动回收内存的目的,
语言没有提供释放已分配内存的显示操作方法。
第九,String s = new String(&xyz&);创建了几个String Object?
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?&
Math.round(11.5)==12Math.round(-11.5)==-11round方法返回与参数最接近的长整数,参数加1/2后求其floor.
第十一,short s1 = 1; s1 = s1 + 1;有什么错?
short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)short s1 = 1; s1 += 1;(可以正确编译)
第十二,sleep() 和 wait() 有什么区别?
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用 sleep不会释放对象锁。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对 象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
& & & & 多线程是为了同步完成多项任务,不是为了提供运行效率,通过提高资源使用效率来提高系统的效率. 线程是在同一时间需要完成多项任务的时候实现的.
& & & & &可以完成同时运行,但是通过程序运行的结果发现,虽然同时运行,但是每一次结果都不一致。
& & & & & 因为多线程存在一个特性:随机性。
& & & & & 造成的原因:CPU在瞬间不断切换去处理各个线程而导致的。
& & & & &可以理解成多个线程在抢cpu资源。
线程与进程的比较
线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元;
& & & & & & 而把传统的进程称为重型进程(Heavy—Weight Process),它相当于只有一个线程的任务。在引入了线程的操作系统中,通常一个进程都有若干个线程,至少需要一个线程。
& &进程与线程的区别:
& & & & 1.进程有独立的进程空间,进程中的数据存放空间(堆空间和栈空间)是独立的。
& & & & &2.线程的堆空间是共享的,栈空间是独立的,线程消耗的资源也比进程小,相互之间可以影响的
第十三,Java有没有goto?
没有 很十三的问题,如果哪个面试的问到这个问题,我劝你还是别进这家公司。
第十四,数组有没有length()这个方法? String有没有length()这个方法?
数组没有length()这个方法,有length的属性。
String有有length()这个方法。
第十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现, 重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方 法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
第十七,给我一个你最常见到的runtime exception。
参考如下:
ArithmeticException,&
ArrayStoreException,&
BufferOverflowException,&
BufferUnderflowException,&
CannotRedoException,&
CannotUndoException,&
ClassCastException,&
CMMException,&
ConcurrentModificationException,&
DOMException,&
EmptyStackException,&
IllegalArgumentException,&
IllegalMonitorStateException,&
IllegalPathStateException,&
IllegalStateException,&
ImagingOpException,&
IndexOutOfBoundsException,&
MissingResourceException,&
NegativeArraySizeException,&
NoSuchElementException,&
NullPointerException,&
ProfileDataException,&
ProviderException,&
RasterFormatException,&
SecurityException,&
SystemException,&
UndeclaredThrowableException,&
UnmodifiableSetException,&
UnsupportedOperationException
第十八,error和exception有什么区别?
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
第十九,List, Set, Map是否继承自Collection接口?
List,Set是
第二十,abstract class和interface有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个 有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。 然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到 接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
第二十三,启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
第二十四,构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
第二十五,是否可以继承String类?
String类是final类故不可以继承。
第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问。
第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行。
第二十八,编程题: 用最有效率的方法算出2乘以8等於几?
有C背景的程序员特别喜欢问这种问题。
第二十九,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
不对,有相同的hash code。
第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。
第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。
第三十二,编程题: 写一个Singleton出来。
&&&& Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
第二种形式:
public class Singleton {&
private static Singleton instance =
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
定义一个类,它的构造函数为private的,所有方法为static的。
一般认为第一种形式要更加安全些
已发表评论数()
&&登&&&陆&&
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见Java程序员集合框架面试题
感谢的投递
Java集合框架是最常被问到的Java面试问题,要理解Java技术强大特性就有必要掌握集合框架。
这里有一些实用问题,常在核心Java面试中问到。
1、 什么是Java集合API
Java集合框架API是用来表示和操作集合的统一框架,它包含接口、实现类、以及帮助程序员完成一些编程的算法。简言之,API在上层完成以下几件事:
● 编程更加省力,提高城程序速度和代码质量
●&非关联的API提高互操作性
●&节省学习使用新API成本
●&节省设计新API的时间
●&鼓励、促进软件重用
具体来说,有6个集合接口,最基本的是Collection接口,由三个接口Set、List、SortedSet继承,另外两个接口是Map、SortedMap,这两个接口不继承Collection,表示映射而不是真正的集合。
2、 什么是Iterator
一些集合类提供了内容遍历的功能,通过java.util.Iterator接口。这些接口允许遍历对象的集合。依次操作每个元素对象。当使用Iterators时,在获得Iterator的时候包含一个集合快照。通常在遍历一个Iterator的时候不建议修改集合本省。
3、 Iterator与ListIterator有什么区别?
Iterator:只能正向遍历集合,适用于获取移除元素。ListIerator:继承Iterator,可以双向列表的遍历,同样支持元素的修改。
4、 什么是HaspMap和Map?
Map是接口,Java 集合框架中一部分,用于存储键值对,HashMap是用哈希算法实现Map的类。
5、 HashMap与HashTable有什么区别?对比Hashtable VS HashMap
两者都是用key-value方式获取数据。Hashtable是原始集合类之一(也称作遗留类)。HashMap作为新集合框架的一部分在Java2的1.2版本中加入。它们之间有一下区别:
●&HashMap和Hashtable大致是等同的,除了非同步和空值(HashMap允许null值作为key和value,而Hashtable不可以)。
●&HashMap没法保证映射的顺序一直不变,但是作为HashMap的子类LinkedHashMap,如果想要预知的顺序迭代(默认按照插入顺序),你可以很轻易的置换为HashMap,如果使用Hashtable就没那么容易了。
●&HashMap不是同步的,而Hashtable是同步的。
●&迭代HashMap采用快速失败机制,而Hashtable不是,所以这是设计的考虑点。
6、 在Hashtable上下文中同步是什么意思?
同步意味着在一个时间点只能有一个线程可以修改哈希表,任何线程在执行hashtable的更新操作前需要获取对象锁,其他线程等待锁的释放。
7、 什么叫做快速失败特性
从高级别层次来说快速失败是一个系统或软件对于其故障做出的响应。一个快速失败系统设计用来即时报告可能会导致失败的任何故障情况,它通常用来停止正常的操作而不是尝试继续做可能有缺陷的工作。当有问题发生时,快速失败系统即时可见地发错错误告警。在Java中,快速失败与iterators有关。如果一个iterator在集合对象上创建了,其它线程欲“结构化”的修改该集合对象,并发修改异常 (ConcurrentModificationException) 抛出。
8、 怎样使Hashmap同步?
HashMap可以通过Map m = Collections.synchronizedMap(hashMap)来达到同步的效果。
9、 什么时候使用Hashtable,什么时候使用HashMap
基本的不同点是Hashtable同步HashMap不是的,所以无论什么时候有多个线程访问相同实例的可能时,就应该使用Hashtable,反之使用HashMap。非线程安全的数据结构能带来更好的性能。
如果在将来有一种可能—你需要按顺序获得键值对的方案时,HashMap是一个很好的选择,因为有HashMap的一个子类LinkedHashMap。所以如果你想可预测的按顺序迭代(默认按插入的顺序),你可以很方便用LinkedHashMap替换HashMap。反观要是使用的Hashtable就没那么简单了。同时如果有多个线程访问HashMap,Collections.synchronizedMap()可以代替,总的来说HashMap更灵活。
10、为什么Vector类认为是废弃的或者是非官方地不推荐使用?或者说为什么我们应该一直使用ArrayList而不是Vector
你应该使用ArrayList而不是Vector是因为默认情况下你是非同步访问的,Vector同步了每个方法,你几乎从不要那样做,通常有想要同步的是整个操作序列。同步单个的操作也不安全(如果你迭代一个Vector,你还是要加锁,以避免其它线程在同一时刻改变集合).而且效率更慢。当然同样有锁的开销即使你不需要,这是个很糟糕的方法在默认情况下同步访问。你可以一直使用Collections.sychronizedList来装饰一个集合。
事实上Vector结合了“可变数组”的集合和同步每个操作的实现。这是另外一个设计上的缺陷。Vector还有些遗留的方法在枚举和元素获取的方法,这些方法不同于List接口,如果这些方法在代码中程序员更趋向于想用它。尽管枚举速度更快,但是他们不能检查如果集合在迭代的时候修改了,这样将导致问题。尽管以上诸多原因,oracle也从没宣称过要废弃Vector.
原文:& &编译:在线 –&
cnBeta 已经入驻豌豆荚啦,扫描左侧的二维码就可以在豌豆荚关注我们。最懂应用的豌豆荚,发现无数好应用。
[责任编辑:ugmbbc]
-5-4-3-2-1012345
当前平均分: 打分后显示
-5-4-3-2-1012345
当前平均分: 打分后显示

我要回帖

更多关于 java 的文章

 

随机推荐