collection 集合的使用

时间:2022-09-03 07:29:58

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允许 ::这个关键字 来传递方法或者是构造函数的引用