介是啥米东东

HashMap与HashTable等小题目

Java admin 2013℃ 0评论

HashMap、HashTable这两个类都实现了Map接口,因此有些非常相似的特征,但他们在以下特性中又有所不同:

  • HashMap的key与value都允许null值的存在,而HashTable则既不允许key为null,也不允许value为null。
  • HashTable是线程同步的,而HashMap则不是。因此,在单线程环境下HashMap是首选,而HashTable更适合在多线程环境下使用。
  • HashMap提供了它键的set集合,因此Java程序可以通过set进行迭代。因此,HashMap是快速失败的。另一方面,HashTable提供了它键的枚举。
  • HashTable类被当做遗留类

Array与ArrayList间有什么不同?与ArrayList相比你什么时候会用Array?

Array与ArrayList类在以下特性中有所区别:

  • Arrays可以包含基础数据类型或者对象,而ArrayList只能包含对象。
  • Arrays有固定长度,而ArrayList长度则是动态的。
  • ArrayList类提供了更多的方法和特性,比如addAll,removeAll,iterator,等等
  • 对于一个基础数据类型的list,集合框架使用了自动装箱去减少编码的工作。但针对固定长度的的基础数据类型,这种方法会使得它们变得更慢

ArrayList与LinkedList间有什么不同?

ArrayList、LinkedList这两个类都实现了List接口,但他们以下特性中又有所不同:

  • ArrayList是基于索引的数据结构,底层由Array支持实现。它提供了以时间复杂度为O(1)的性能随机访问它的元素,另一方面,LinkedList以元素列表的方式来存储它的数据,每一个元素与它前一个和后一个元素都是相连的。对元素查询操作的时间复杂度为O(n).
  • 对元素的插入、添加、移除操作,与ArrayList相比,LinkedList更快,因为,当一个元素被添加到集合内部的任意位置时,LinkedList不需要重新调整数组大小或者更新索引。
  • LinkedList比ArrayList消耗更多的内存,因为LinkedList中每一个节点都存储了两个引用,一个是它前一个元素,一个是它后一个元素

有哪些关于 Java 集合框架的最佳实践?

  • 基于应用的需求来选择使用正确类型的集合,这对性能来说是非常重要的。例如,如果元素的大小是固定的,并且知道优先级,我们将会使用一个 Array,而不是 ArrayList。
  • 一些集合类允许我们指定他们的初始容量。因此,如果我们知道存储数据的大概数值,就可以避免重散列或者大小的调整。
  • 总是使用泛型来保证类型安全,可靠性和健壮性。同时,使用泛型还可以避免运行时的 ClassCastException。
  • 在 Map 中使用 Java Development Kit (JDK) 提供的不可变类作为一个 key,这样可以避免 hashCode 的实现和我们自定义类的 equals 方法。
  • 应该依照接口而不是实现来编程。
  • 返回零长度的集合或者数组,而不是返回一个 null ,这样可以防止底层集合是空的。

Enumeration 和 Iterator 接口有什么不同 ?
Enumeration 跟 Iterator 相比较快两倍,而且占用更少的内存。但是,Iterator 相对于 Enumeration 更安全,因为其他线程不能修改当前迭代器遍历的集合对象。同时,Iterators 允许调用者从底层集合中移除元素,这些 Enumerations 都没法完成。

HashSet 和TreeSet 有什么不同?
HashSet 是用一个 hash 表来实现的,因此,它的元素是无序的。添加,删除和 HashSet 包括的方法的持续时间复杂度是 O(1)。

另一个方面,TreeSet 是用一个树形结构实现的,因此,它是有序的。添加,删除和 TreeSet 包含的方法的持续时间复杂度是  O(logn)。

垃圾回收器

Java中垃圾回收的目的是什么, 它什么时候被使用 ?

垃圾回收用于识别和丢弃程序不再需要的对象, 以便回收和复用资源.

System.gc() 和Runtime.gc()方法用途?

这些方法用于提醒JVM开始垃圾回收. 然而开始垃圾回收的时机是由JVM决定的.

finalize()什么时候被调用 ? 它的目的是什么 ?

finallize方法是在释放该对象内存前由gc(垃圾回收器)调用. 通常建议在这个方法中释放该对象持有的资源.

如果一个对象的引用被设置为null, gc会立即释放该对象的内存么?

不会, 这个对象将会在下一次gc循环中被回收.

与Statement相比PreparedStatement的优点?

PreparedStatement是预编译的,因此它有更好的性能。另外,PreparedStatement可以被不同输入值的查询重用。

解释一个Servlet的架构.
核心抽象概念肯定是所有servlet必须实现 javax.servlet.Servlet 接口。 每个 servlet 必须直接或者间接实现这个接口, 也可以继承于 javax.servlet.GenericServlet 或者javax.servlet.http.HTTPServlet。最后想提的是,每个 servlet 能够使用多线程服务多个请求。

sendRedirect和 forward 方法的区别?
sendRedirect创建一个新的请求,  forward只是将请求转发.之前请求中包含的对象在redirect后将不可用, 因为产生了一个新的请求. 但是 forwarding不受此限制.通常来说,sendRedirect 比 forward 方法慢一些.

什么是隐式对象?他们是什么?
JSP隐式对象是指JSP容器在每页中提供给开发人员的Java对象。开发人员可以直接调用他们,而不需要任何显示声明。JSP隐式对象也被称为预定义变量。以下对象都是在JSP页面中隐式存在的:

  • application
  • page
  • request
  • response
  • session
  • exception
  • out
  • config
  • pageContext

转载请注明:Z/RANDY » HashMap与HashTable等小题目

喜欢 (0)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址