Java笔试题:HashMap与Hashtable对比、线程操作与更多

需积分: 7 0 下载量 86 浏览量 更新于2024-09-11 收藏 10KB TXT 举报
"Java程序员需要掌握的10个核心知识点" 1. **HashMap与Hashtable的区别** - **HashMap** 是Java中的一个非同步容器,允许存储`null`键和值,而**Hashtable** 是线程安全的,不允许`null`键和值。HashMap允许线程并发访问,适合于多线程并行读取但不修改的情况,而Hashtable则适用于需要全局唯一性和线程安全的场景。 - HashMap是非同步的,性能优于Hashtable,但在多线程环境下,需要手动进行同步处理以确保数据一致性。 2. **sleep()与wait()的区别** - **sleep()** 是Thread类的一个静态方法,它使当前线程暂停执行指定的毫秒数,不会释放锁。当时间到或者被中断时,线程会恢复运行。 - **wait()** 是Object类的一个方法,用于线程间通信。调用wait()的线程会释放当前持有的所有锁,并进入等待状态,直到其他线程调用相同对象的notify()或notifyAll()唤醒。wait()需要在同步块或同步方法中使用,否则会抛出IllegalMonitorStateException。 3. **Collection与Collections的区别** - **Collection** 是Java集合框架的基础接口,代表了一组对象的集合,不包含任何元素类型,而**Collections** 是一个包含各种操作集合的工具类,提供了许多静态方法来实现对集合的操作,如排序、查找、转换等。 4. **异常处理中的assert** - **assert** 语句用于断言某个条件是否为真,通常用于测试和调试代码。如果assert后面的表达式结果为`true`,则程序继续执行;如果为`false`,则抛出AssertionError异常。在默认情况下,assert是关闭的,需要通过启动参数开启。 5. **短路逻辑运算符&&与||** - **&&** 是逻辑与运算符,如果第一个操作数为`false`,则不会评估第二个操作数,因为结果无论如何都是`false`。 - **||** 是逻辑或运算符,如果第一个操作数为`true`,则不会评估第二个操作数,因为结果无论如何都是`true`。 6. **final, finally, finalize** - **final** 关键字用于声明不可改变的变量或不可继承的类,也可以用于方法,表示该方法不能被重写。 - **finally** 用于异常处理,无论是否发生异常,finally块中的代码都会被执行,保证了资源的正确释放。 - **finalize** 是Object类的一个方法,用于垃圾回收前执行清理操作。但是不建议依赖这个方法进行资源清理,因为其执行时机不确定且效率低。 7. **匿名内部类** - 匿名内部类可以没有名称,可以直接实例化,可以是类或接口的实现。如果匿名内部类实现了接口,那么它就是一个实现了接口的所有方法的类;如果它扩展了类,那么它就是那个类的子类。 8. **Math.round()方法** - Math.round()方法用于将浮点数四舍五入为最接近的整数。当浮点数大于等于0.5时,向上取整;小于0.5时,向下取整。对于正负浮点数,Math.round返回的都是long类型的结果。 9. **静态嵌套类(Static Nested Class)与内部类(Inner Class)** - 静态嵌套类类似于普通的静态成员,不持有对外部类的隐式引用,可以独立存在。它们可以通过类名直接访问,无需外部类实例。 - 内部类是嵌套在另一个类内部的类,它可以访问外部类的私有成员。内部类实例需要外部类实例才能创建,不能声明为静态。 10. **ArrayList与Vector的区别** - **ArrayList** 和**Vector** 都是基于数组实现的列表,但ArrayList是非线程安全的,性能较好,而Vector是线程安全的,但在多线程环境中性能较优,但通常不推荐使用,因为它的同步开销大。在单线程环境中,一般优先选择ArrayList。