题目一:
解析:
在这道题中,我们要知道ArrayList、LinkedList、HashMap 的区别:
1. List 是一个有序集合,可以存放重复的数据 (有序:存进是什么顺序,取出时还是什么顺序)
继承了list接口的类有:
(1)ArrayList:数组结构,线程不安全,增加删除慢,查询快、底层是数组适合查询,不适合增删元素。
(2)Linkedlist: 双向链表结构,线程不安全,增加删除快,查询慢、底层是双向链表适合增删元素,不适合查询操作。
(3)Vector:数组结构 线程安全 增加删除慢,查询快、底层和ArrayList相同,但是Vector是线程安全的,效率较低很少使用
2. Set 是一个无序集合,不允许放重复的数据 (无序可重复,存进和取出的顺序不一样)
(1).HashSet 底层是哈希表/散列表
(2).TreeSet 继承sartedSet接口(无需不可重复,但存进去的元素可以按照元素的大小自动排序)
3. Map 是一个无序集合,以键值对的方式存放数据,键对象不允许重复,值对象可以重复。
(1).HashMap实现不同步,线程不安全。 HashTable线程安全
(2).HashMap中的key-value都是存储在Entry中的。
(3).HashMap可以存null键和null值,不保证元素的顺序恒久不变,它的底层使用的是数组和链表,通过hashCode()方法和equals方法保证键的唯一性
题目二:
解析:
重载(Overload),多态在编译期的表现形式。出现在一个类中,判定重载的条件只有方法名一致,方法形参列表不同。其他的(如返回值,访问修饰符)都不可以判定。
重写,多态在运行期的表现形式。出现在子父类,实现类与接口中。判定重载有一个规律:“两同两小一大”
两同:方法名和形参列表一致;
两小:抛出的异常和返回值相容于被重写的方法。(一旦返回值是基本数据类型,那重写的方法返回值必须一致或者是Object)
一大:访问修饰符大于等于被重写方法。
注意:对于重写而言,只有可见的实例方法才可以被重写。静态方法和私有方法都是隐藏,不是重写!!!
重写(Override)
重写的前提:必须存在继承关系
什么是重写?子类和父类中出现了同名的方法名,我们就称之为重写
什么情况下需要重写?父类中的方法无法满足于子类的需求
重写的要求:方法名和参数列表必须一致,子类方法的修饰符必须大于或等于父类方法的修饰符,子类方法的返回值必须小于或等于父类方法的返回值,子类方法抛出的异常必须小于或等于父类方法抛出的异常!
注:声明为final的方法不能重写但可重载
题目三:
解析:
concat方法:
slice方法:
题目四:
解析:
1.饿汉式(线程安全,调用效率高,但是不能延时加载);
2.懒汉式(线程安全,调用效率不高,但是能延时加载);
3.Double CheckLock实现单例:DCL也就是双重锁判断机制(由于JVM底层模型原因,偶尔会出问题,不建议使用);
4.静态内部类实现模式(线程安全,调用效率高,可以延时加载);
5.枚举类(线程安全,调用效率高,不能延时加载,可以天然的防止反射和反序列化调用)。