您的位置:首页 > 职场人生

java面试题100道(61-80)

2015-12-23 14:03 746 查看
61.介绍Collection框架的结构?

答:

类集。一个类集(collection)是一组对象。类集的增加使得许多java.util中的成员在结构和体系结构上发生根本的改变。它也扩展了包可以被应用的任务范围。Java的类集(Collection)框架使你的程序处理对象组的方法标准化。在Java 2出现之前,Java提供了一些专门的类如Dictionary,Vector,Stack和Properties去存储和操作对象组。尽管这些类非常有用,它们却缺少一个集中,统一的主题。因此例如说使用Vector的方法就会与使用Properties的方法不同。以前的专门的方法也没有被设计成易于扩展和能适应新的环境的形式。而类集解决了这些(以及其他的一些)问题
        Java类集框架的优势:
        1) 这种框架是高性能的。对基本类集(动态数组,链接表,树和散列表)的实现是高效率的。一般很少需要人工去对这些“数据引擎”编写代码(如果有的话)。
        2) 框架允许不同类型的类集以相同的方式和高度互操作方式工作。
        3) 类集是容易扩展和/或修改的。为了实现这一目标,类集框架被设计成包含一组标准的接口。对这些接口,提供了几个标准的实现工具(例如LinkedList,HashSet和TreeSet),通常就是这样使用的。如果你愿意的话,也可以实现你自己的类集。为了方便起见,创建用于各种特殊目的的实现工具。一部分工具可以使你自己的类集实现更加容易。
        4) 增加了允许将标准数组融合到类集框架中的机制。

        类集的整体框架如下:



62.collection框架中实现比较要实现什么接口?

答:要实现comparable接口

63.ArrayList和Vector的区别?

答:


Java中Vector和ArrayList的区别

      首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList、Vector和LinkedList。List用于存放多个元素,能够维护元素的次序,并且允许元素的重复。3个具体实现类的相关区别如下:
ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。
Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。
LinkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,他还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。

64.HashMap和HashTable的区别?

答:

HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,

主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。

HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 

Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步(Collections.synchronizedMap)。 

Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
65.List和map的区别?

答:list是链式的有顺序的,而map是无序的。

66.List,set,map是否继承自collection接口?

答:list和set是继承自collection接口,map不是。

67.list,map,set三个接口,存取元素时,各有什么特点?

答:list类似于数组存储,可以快速定位元素。map使用键值对方式来存储,便于搜索。set是有序的结合,要求必须是有序排列,并且都不重复。

68.说出arraylist,vector,linkedlist的存储性能和特性?

答:arraylist适合快速定位元素,数组方式存储。vector和arraylist差不多,但是它支持线程同步,所以效率比较低。lindkedlist适合插入查询等操作。

69.去掉一个vector集合中重复的元素?

答:

//1.第一种:

import java.util.Vector;

public class DeleteVector {

 public static void main(String []args){

  Vector<String> vector = new Vector<String>();

  addObject(vector, "aa");

  addObject(vector, "bb");

  addObject(vector, "cc");

  addObject(vector, "aa");

  addObject(vector, "dd");

  addObject(vector, "bb");

  System.out.println(vector);

 }

 

 public static void addObject(Vector c,String str){

  if(!c.contains(str)){

   c.add(str);

  }

 }

}

 

//第二种:

import java.util.HashSet;

import java.util.Vector;

public class DeleteVector {

 public static void main(String []args){

     Vector<String> vector = new Vector<String>();

     vector.add("1");

     vector.add("2");

     vector.add("2");

     vector.add("3");

     vector.add("4");

     vector.add("5");

     vector.add("4");

     vector.add("5");

     //HashSet是set的一个实现类,以对象作为元素,拒绝接受重复的对象,允许使用null元素。

     HashSet hs = new HashSet(vector);

     System.out.println(hs);

 }
70.collection和collections的区别?

答:前者是接口,后者是工具类。

71.set里的元素时不能复制的,那么用什么方法来区分重复与否呢?使用==还是equals()?它们有何区别?

答:使用equals,前者比较的是存储对象的地址,而后者一般是需要重写equals()方法来实现。

72,.你知道的集合类都有哪些?主要方法?

答:arraylist,linkedlist,treeset,vector。hashmap。。。  方法有 add(),contains(),remove()。。。

73.两个对象值相同(x.equals(y)==true),但却可有不同的hashcode,这句话对不对?

答:对。equals()一般可以程序员手动重写。

74.TreeSet里面放入对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareto方法,还是子类的compareto方法,还是抛出异常?

答:

//        如果子类和父类都复写了compareTo方法那么各自调用自己的compareTo方法
//        如果子类没有复写compareTo方法,那么调用的都是父类的compareTo方法


75.说出一些常用的类,包,接口,请各举5个?

答:类:1.java.lang.Object 2.java.lang.String 3.java.lang.System 4.java.io.file 5.java.io.FileInputStream
包:1.java.lang包 2.java.io包 3.java.swt包 4.java.util包 5.java.sql包 接口:1.java.util.List<E> 2.java.util.Map<E> 3.java.util.Iterator<E> 4.java.sql.CallableStatement 5.java.lang.Comparable<T>

76.java中有几种类型的流?jdk为每种类型的流提供了一些抽象类以供继承,请说出他们分别是那些类?

答:字节流,字符流。

77.字节流于字符流的区别?

答:

1.字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;

2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。
78.什么是java序列化,如何实现java序列化?或者请解释serializable接口的作用?

答:java序列化就是可以将类的实例存储于文件中。serializable接口也就是一个表示

79.描述一下jvm加载class文件的原理机制?

答:通过classloader进行加载,先通过路径寻找到该class文件,判断此文件是否有父类,如果有父类还有父类,就先加载父类,依次类推。

在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备、解析 装载:查找和导入类或接口的二进制数据;
链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的; 校验:检查导入类或接口的二进制数据的正确性; 准备:给类的静态变量分配并初始化存储空间; 解析:将符号引用转成直接引用; 初始化:激活类的静态变量,初始化Java代码和静态Java代码块

80.heap和stack有什么区别?

答:heap中存放的是全局变量,声明周期和程序相同,相应速度比较慢。stack存放的是方法中局部变量的数据,声明随着方法的终结而终结,相应速度快。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息