Collection接口
-List接口 -ArrayList: -Vector: -LinkedList: -Set接口 -HashSet: -LinkedHashSet: -TreeSet:Map
-HashMap -LinkedHashMap -TreeMap -Hashtable面试题:
HashMap和HashtableList,set,Map区别ArrayList,Vector,LinkedList存取元素性能和特点ArrayList,LinkedListCollection和CollectionsList,set,Map都继承Collection 1.Set集合(理解) (1)Set集合的特点 无序,唯一 (2)HashSet集合(掌握) A:底层数据结构是哈希表(是一个元素为链表的数组) B:哈希表底层依赖两个方法:hashCode()和equals() 执行顺序: 首先比较哈希值是否相同 相同:继续执行equals()方法 返回true:元素重复了,不添加 返回false:直接把元素添加到集合 不同:就直接把元素添加到集合 C:如何保证元素唯一性的呢? 由hashCode()和equals()保证的 D:开发的时候,代码非常的简单,自动生成即可。 E:HashSet存储字符串并遍历 F:HashSet存储自定义对象并遍历(对象的成员变量值相同即为同一个元素) (3)TreeSet集合 A:底层数据结构是红黑树(是一个自平衡的二叉树) B:保证元素的排序方式 a:自然排序(元素具备比较性) 让元素所属的类实现Comparable接口 b:比较器排序(集合具备比较性) 让集合构造方法接收Comparator的实现类对象2:Collection集合总结(掌握) Collection |--List 有序,可重复 |--ArrayList 底层数据结构是数组,查询快,增删慢。 线程不安全,效率高 |--Vector 底层数据结构是数组,查询快,增删慢。 线程安全,效率低 |--LinkedList 底层数据结构是链表,查询慢,增删快。 线程不安全,效率高 |--Set 无序,唯一 |--HashSet 底层数据结构是哈希表。 如何保证元素唯一性的呢? 依赖两个方法:hashCode()和equals() 开发中自动生成这两个方法即可 |--LinkedHashSet 底层数据结构是链表和哈希表 由链表保证元素有序 由哈希表保证元素唯一 |--TreeSet 底层数据结构是红黑树。 如何保证元素排序的呢? 自然排序 比较器排序 如何保证元素唯一性的呢? 根据比较的返回值是否是0来决定3:针对Collection集合我们到底使用谁呢?(掌握) 唯一吗? 是:Set 排序吗? 是:TreeSet 否:HashSet 如果你知道是Set,但是不知道是哪个Set,就用HashSet。 否:List 要安全吗? 是:Vector 否:ArrayList或者LinkedList 查询多:ArrayList 增删多:LinkedList 如果你知道是List,但是不知道是哪个List,就用ArrayList。 如果你知道是Collection集合,但是不知道使用谁,就用ArrayList。 如果你知道用集合,就用ArrayList。4:在集合中常见的数据结构(掌握) ArrayXxx:底层数据结构是数组,查询快,增删慢 LinkedXxx:底层数据结构是链表,查询慢,增删快 HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()和equals() TreeXxx:底层数据结构是二叉树。两种方式排序:自然排序和比较器排序
4:Map(掌握)
(1)将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。 (2)Map和Collection的区别? A:Map 存储的是键值对形式的元素,键唯一,值可以重复。夫妻对 B:Collection 存储的是单独出现的元素,子接口Set元素唯一,子接口List元素可重复。 (3)Map接口功能概述(自己补齐) A:添加功能 B:删除功能 C:判断功能 D:获取功能 E:长度功能 (4)Map集合的遍历 A:键找值 a:获取所有键的集合 b:遍历键的集合,得到每一个键 c:根据键到集合中去找值 B:键值对对象找键和值 a:获取所有的键值对对象的集合 b:遍历键值对对象的集合,获取每一个键值对对象 c:根据键值对对象去获取键和值 5:Collections(理解) (1)是针对集合进行操作的工具类 (2)面试题:Collection和Collections的区别 A:Collection 是单列集合的顶层接口,有两个子接口List和Set B:Collections 是针对集合进行操作的工具类,可以对集合进行排序和查找等 (3)常见的几个小方法: A:public static <T> void sort(List<T> list) B:public static void reverse(List<?> list) 自己去练习一下 6.1:异常(理解) (1)程序出现的不正常的情况。 (2)异常的体系 Throwable |--Error 严重问题,我们不处理。 |--Exception |--RuntimeException 运行期异常,我们需要修正代码 |--非RuntimeException 编译期异常,必须处理的,否则程序编译不通过 (3)异常的处理: A:JVM的默认处理 把异常的名称,原因,位置等信息输出在控制台,但是呢程序不能继续执行了。 B:自己处理 a:try...catch...finally 自己编写处理代码,后面的程序可以继续执行 b:throws 把自己处理不了的,在方法上声明,告诉调用者,这里有问题 (4)面试题 A:编译期异常和运行期异常的区别? 编译期异常 必须要处理的,否则编译不通过 运行期异常 可以不处理,也可以处理 (5)finally关键字及其面试题 A:finally用于释放资源,它的代码永远会执行。特殊情况:在执行到finally之前jvm退出了 B:面试题 a:final,finally,finalize的区别? C:异常处理的变形 try...catch...finally try...catch... try...catch...catch... try...catch...catch...fianlly try...finally