`
magic_agate
  • 浏览: 105831 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

小问题

阅读更多
1 instanceof 是方法还是操作符?其用法是什么?
答案: instanceof 是操作符,它的用法是判断一个对象是否属于某个类。

2 什么是内部类?内部类有什么特点。描述一下内部类的作用范围
答案: 在一个类中定义另外一个类,这个类就叫做内部类或内置类(inner class)。其特点是:内部类可以让我们将逻辑上相关的一组类组织起来,并由外部类(outer class)来控制内部类的可见性,当建立一个inner class时其对象就拥有了与外部类对象之间的一种关系,这是通过一种特殊的 this reference形成的,使得内部类对象可以随意的访问外部类中所有的成员。
内部类的作用范围:在方法中定义的内部类,如果要访问方法中定义的本地变量或方法的参数,则变量必须被声明为final;内部类可以声明为private或protected;还可以声明为abstract或final;内部类可以声明为static的,但此时就不能再使用外部类的非static的成员变量和非static的成员方法;非static的内部类中的成员不能声明为static的,只有在顶层类或者static的内部类中才可以声明static成员。

3 定义在语句块内的内部类和普通的内部类的作用范围有什么区别?
答案:嵌套类并非只能在类里定义,也可以在几个程序块的范围之内定义内部类,例如,在方法中或者甚至在for循环体内部都可以定义嵌套类。在方法中定义的内部类作用范围只能访问方法中的final类型的局部变量。
4 说说length  , size , length() , size() 通常的出现位置和出现方法
答案:

5 举出5种你常用的异常并且说明该异常在何种情况下出现的
答案:


6 写出下面程序函数体的运行结果并说明为什么
public void tt(){
List a = new ArrayList();
a.add(2);
a.add(2L);
a.add(2F);
a.remove(0);
for( Object o : a){
System.out.println(o.getClass().getName());
}
}
答案:java.lang.Long
java.lang.Float



7 请说明List和Set的区别和相同点
答案:List(列表):集合中的对象按照索引位置排序,可以有重复的对象,允许按照对象在集合中的索引位置检索对象,List与数组有些类似。
      Set(集):集合中的对象不按照特定的方式排序,并且没有重复的对象,它的有些实现类能对集合中的对象按照特定的方式排序。

8 请说明Collections  ,  Collection 和 Map的区别和相同点
答案:Collections是集合类,Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。
Collection是集合接口, Collection是个java.util下的接口,它是各种集合结构的父接口。将一组对象以集合元素的形式组织到一起,在其子接口中分别实现不同的组织方式。定义了集合的基本行为,一个Collection的实现类的实例能够:
增加删除一个元素,查找一个元素是否在此集合中,计算此集合的元素数目
Collection没有约束元素的具体类型(是否为空也未规定),元素的顺序,元素是否可重复
部分Collection是整齐的(ordered)(注意,整齐的并不是一定是一定要经过排序的,即不一定是sorted).这样的Collection的元素之间在逻辑上是一个接一个(one by one),即可以得到一个元素的下一个元素的引用.这些元素可以是排序的(sorted,元素的次序由自然顺序或者规定的顺序排列)也可以是未排序的(unsorted,元素顺序由插入的顺序决定) java.util.List接口继承Collection接口定义这一类Collection,部分Collection要求无重复的元素,称之为Set,java.util.Set接口继承Collection来定义这一类Collection。



9 请说明Vector LinkedList  ArrayList的 的区别和相同点
答案:Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销
从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。
在ArrayList和Vector中,从一个指定的位置(通过索引)查找数据或是在集合的末尾增加、移除一个元素所花费的时间是一样的,这个时间我们用O(1)表示。但是,如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中元素的个数,i代表元素增加或移除元素的索引位置。为什么会这样呢?因为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行位移的操作。如果你只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。如果是其他操作,你最好选择其他的集合操作类。比如,LinkedList集合类在增加或移除集合中任何位置的元素所花费的时间都是一样的?O(1),但它在索引一个元素的使用缺比较慢-O(i),其中i是索引的位置.使用ArrayList也很容易,因为你可以简单的使用索引来代替创建iterator对象的操作。LinkList也会为每个插入的元素创建对象,所有你要明白它也会带来额外的开销。



10 请说明HashMap 和 Hashtable 的区别和相同点
答案:都属于Map接口的类,实现了将惟一键映射到特定的值上。
  HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。
 Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。
HashMap类:
实现Map接口及它的它的所有可选操作。允许空key和空value.
类似Hashtable,但Hashtable是线程安全的,且不允许空key和空value.
不保证元素的顺序
基本元素操作(put and get)速度恒定。(前提是各“桶”内分布的元素是均匀的)
线程不安全
Dictionary类提供了根据关键字查值的功能。
Dictionary是个abstract的类,因此我们不直接使用它。直接使用的一般是Hashtable类。
Hashtable继承了dictionary类,称为哈希表类。快速寻址等


11请说明HashMap 和 HashSet 的区别和相同点
答案:HashMap可以看作三个视图:key的Set,value的Collection,Entry的Set。 这里HashSet就是其实就是HashMap的一个视图。HashSet内部就是使用Hashmap实现的,和Hashmap不同的是它不需要Key和Value两个值。
往hashset中插入对象其实只不过是内部做了
public boolean add(Object o) {
return map.put(o, PRESENT)==null;
}           
HashMap为散列映射,它是基于hash table的一个实现,它可在常量时间内安插元素,或找出一组key-value pair.
HashSet为散列集,它把查找时间看的很重要,其中所有元素必须要有hashCode()


12 请说明final , finally , finalize 的用法
答案:final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。

  finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

  finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics