`
邱铁军
  • 浏览: 42606 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

java面试宝典有点难度

阅读更多
1:string, stringbuffer stringbuilder的区别, string 不可修改的底层原因
   string 长度不可改变
   stringbuffer 线程安全情况下的长度改变
   stringbuilder 非线程安全情况下的长度改变,单线程有限考虑
  
   底层原因:string不但类本身被定义为final类,而去其中的属性跟方法都被定义为final,所以其长度固定。

2:list, set, map区别
   List,Set,Map将持有对象一律视为Object类别。
   Collection、List、Set、Map都是接口,不能实例化。
   继承自它们的 ArrayList, Vector, HashTable, HashMap是具象class,这些才可被实例化。
   vector容器确切知道它所持有的对象隶属什么型别。vector不进行边界检查。

Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection接口:是最基本的集合接口,其中的一些允许元素相同一些不允许相同,一些能排序而一些不能排序,JAVA SDK不允许直接继承collection接口,但是允许继承他们的子接口list跟set。
 如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:
    Iterator it = collection.iterator(); // 获得一个迭代子
    while(it.hasNext()) {
      Object obj = it.next(); // 得到下一个元素
    }
list接口是有序的Collection,使用此接口能够精确的控制插入元素,同时用户也可以使用索引进行访问。这类似于array。但是跟SET不同,list允许有相同的元素。

linklist实现list接口,允许null元素,并且多了很多额外的方add(),remove(),insert方法在 LinkedList的首部或尾部,这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
  注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:
    List list = Collections.synchronizedList(new LinkedList(...));

ArrayList类
  ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。
size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。
  每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。
  和LinkedList一样,ArrayList也是非同步的(unsynchronized)。

Vector类
  Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的 Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。

set接口,不允许有重复元素的collection,很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。
  请注意:必须小心操作可变对象(Mutable Object)。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。

MAP接口,Map没有继承Collection接口,Map提供key到value的映射。个Map中不能包含相同的key,每个key只能映射一个 value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。

3:ArrayList,Vector和LinkedList的存储性能和特性
ayyaylist跟vectior都是使用数组方式存储数据的,次数组元素大于实际的数据元素便于添加元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,由于vector是现成安全的所以速度上要较arraylist慢,LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快
4:Conncurrent的包理解。

5:java抽象类(abstract)和接口(interface)的本质区别
    抽象类中可以有自己的构造函数,都是接口没有,
    抽象类中可以有普通成员变量,但是接口没有,只有静态的不可改变的变量
    抽象类中可以定义普通方法,但是接口中只能定义抽象方法
   抽象类中可以包含静态方法,但是接口中不可以
  一个是多继承,另一个事单继承
6  Java中的类变量、成员变量、实例变量、局部变量、静态变量、全局变量
一个类中大概有2部分组成,一个是属性,一个是方法
在变量定义部分定义的变量叫累的成员变量,成员变量在整个类中有效,(全局变量应该是成员变量的俗称)在方法体中定义的变量叫做局部变量,局部变量只在定义它的方法中有效.

成员变量又分为
实例变量

类变量(static静态变量).

class One
{
float x; //x为实例变量
static int y; //只要有关键字static, y为类变量
}
总的概括就是:在变量定义位置定义的变量为类的成员变量,成员变量又分为2类,一类值类变量,(static的静态变量),一类是实例变量。
Comparable与Comparator区别:
这2个都是用来实现集合中的排序的的,comparable只是集合内壁的排序,comparator是集合外部的排序需要在外部实现其接口






分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics