java知识点整理 - 2


1、抽象类能不能被实例化?为什么?

  抽象类不能被实例化,因为抽象类和接口的设计就是来规定子类行为特征的,就是让其他类继承,是多态思想的一种设计体现。

2、抽象方法可以被private修饰吗?为什么

  抽象方法不能被private修饰,因为抽象方法就是要子类继承重写,而private子类不可被重写

3、接口能不能有方法体

  jdk8之前接口不能有方法体,jdk 8之后新增了static方法和default方法

4、集合

  4.1 list和set的区别

  • list允许有多个null值,set只允许有一个null值
  • list允许有重复元素,set不允许有重复元素
  • list可以保证每个元素的存储顺序,set无法保证

  4.2 那种集合可以实现自动排序

  TreeSet集合实现了元素的自动排序

  4.3 vector、ArrayList、linkedlist有什么区别?使用场景有什么区别?

  区别:

  • vector是java提供的动态数组,使用synchronized来保证线程安全,如果非线程安全需要,不建议使用。、
  • ArrayList是最常用的动态数组,本身并不是线程安全
  • linkedlist是双向链表集合,非线程安全

  使用场景:

  • vector和ArrayList的内部结构是以数组形式存储的,因此非常适合随机访问,但非尾部的删除或新增性能较差,比如我们在中间插入一个元素,就需要把后续的所有元素都进行移动
  • linkedlist插入和删除效率比较高,但随机访问性能会比以上两个动态数组慢

  4.4 collection和collections的区别:

  • Collection是集合类的上级接口,继承它的主要有List和set
  • Collections是针对集合的一个帮助类,它提供了一些静态方法实现,如Collections.sort()排序、Collections.reverse()逆序等

5、集合之Map

  Map常用的实现类:

  • Hashtable:线程安全的,不支持null键和值
  • HashMap:支持null键和值,在多线程中可用ConcurrentHashMap代替
  • TreeMap:基于红黑树的一种提供访问顺序的Map,自身实现了key的自然排序,也可以指定comparator来自定义顺序
  • LinkedHashMap:HashMap的子类,保存了记录的插入顺序

  HashMap和HashTable有什么区别?

  • Hashtable使用了synchronized的关键字来保障线程安全,而HashMap非线程安全的
  • HashMap允许K\V都为null,而HashTable都不允许为空
  • HashMap继承自AbstractMap类;而HashTable继承自Dictionary

6、泛型

  泛型本质上是类型参数化,解决不确定对象的类型问题

  泛型的优点:

  • 安全:不必担心程序运行过程中出现类型转换的错误
  • 避免了类型转换:如果是非泛型,获取到的元素是Object类型的,需要强制转换类型
  • 可读性高:编码过程中就知道集合中元素的类型

7、迭代器

  迭代器是用来遍历容器内所有元素对象的,也是一种常见的设计模式

  迭代器包含的 四种方法:

  • hasNext():boolean---容器内是否还有可以访问的元素
  • next():E---返回下一个元素
  • remove():void---删除当前元素
  • forEachRemaining(Consumer):void---jdk8中新增的,通过一个Lambda表达式遍历容器元素

优质内容筛选与推荐>>
1、两条线段间的位置 (叉积)
2、Flex各类型坐标转换(全局、本地、内容坐标间转换)
3、CentOS上free命令详解
4、豆瓣的结构
5、20151228


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号