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