Collection 接口【集合的框架】
---List 子接口
----ArrayList实现类
----LinkedList实现类
----Vector 实现类
----Stack (模拟的是栈结构)
----Set子接口
----TreeSet
----HashSet
集合可以说是特殊的数组,只是数组是存放具有相同类型的一系列元素的集合,而集合是可以存放不同类型的元素的,存放的可以理解为Object对象。
面试题目:
1.list的删除或者判断是否存在的底层基础方法是什么?
----List是一个接口,他判断元素是否包含的基础是equals()方法,判断的是即可包含的内容是否相同,而非地址
2.set中的元素是否可以相同?
----set是唯一定义的无序的且元素不能重复的集合接口多用HashSet类实现
3.ArrayList 和Vector的区别?
----Vector是线程安全的集合,但是运行效率比较低; ArrayList是非线程安全的集合,但是运行效率快;
4.ArrayList 和LinkedList的区别?
-----ArrayLsit的底层是数组,多用于集合的查询操作较多时使用; linkedList的底层是链表,(双向链表特性),多用于集合对元素插入或删除等修改操作时使用。
5.ArrayList集合的长度是可以动态变化的?或是自增长的原理?
----ArrayList的底层是数组,但添加元素时,回首先判断数组剩余空间是否足够存放元素,如果足够择直接存放,若是存放空间不足,则进行空间扩充,通过扩充一个元素组1.5倍的新数组,然后利用Arrays.copyOf(old,new)方法复制原数组到新数组实现集合的扩充,自增长。
6.集合的遍历多用迭代器进行查看Iterator 是一个迭代器接口,其它集合一般都有转换为迭代器的方法,list.iterator()
7.注意在使用迭代器是,内部不要用集合删除,处理集合元素,而要用迭代器的remove方法,避免产生冲突
例如:
for (Iterator<Person> iterator = list.iterator(); iterator.hasNext();) {
Person person = (Person) iterator.next();
if (person.getName().equals("jfkd")) {
iterator.remove();
// list.remove(person) ;//这里回产生处理异常,原因是迭代器的修改记录器expectCount和集合的molCount不一致;
}
8.JDK8的特性
7.1 接口中可以声明默认方法
7.2Lambda表达式
每一个Lambda表达式 都对应着一个类型,这个类型通常是接口类型
7.2.1 函数式接口
代表的是仅包含一个抽象方法的接口,每一个该类型的Lambda表达都会匹配到这个抽象方法
可以有其他方法 但是该方法必须是默认方法
注解词:
@FunctionalInterface
注解的就是函数式接口 如果接口中的抽象方法超过1个 编译就会报错
7.2.2 Lambda表达式 在方法和构造方法中的使用
JDK8中 java允许 ::这个关键字 来传递方法或者是构造函数的引用