-
请简述List、Set、Map 3个接口存取元素时各有什么特点
List特点: ArrayList 数组实现,查找快、增删慢,由于是数组实现,在增加和删除的时候会牵扯数组扩容以及拷贝元素, 所以慢。数组是可以直接按索引查找,所以在查找的时候较为快 LinkedList 链表实现,增删块、查找慢 由于链表实现,增加时候只要让前一个元素记住自己就可以,删除时候让前一个元素记住后一个元素, 后一个元素记录前一个元素这样的增删效率比较高,但查询时需要一个一个的遍历,所以效率较低 Vector 是基于数组实现,线程同步的遗留集合类,和ArrayList原理相同,但线程安全,效率低 Set特点: HashSet HashSet是基于哈希表的Set集合 1. 无序存储不可重复 2. 需要使用hashCode算法计算元素的hash值 3. 基于哈希表做实现 4. 实现了Set接口 HashSet集合存储步骤: 1. 使用哈希算法计算元素对应的哈希值,使用此哈希值作为地址存储 2. 判断此哈希值对应的位置上是否已经存有元素 3. 若没有就将元素存储到该位置上 4. 若有则使用equals方法判断两个对象是否相等,相等就不存储,不相等则与上一个元素存在一起 5. 需要重写equals和hashCode方法 LinkedHashSet 是基于双向链表和哈希表,继承自HashSet的Set集合 特点:有序,元素不可重复 TreeSet 是基于红黑树,实现了Set集合,具有排序功能的Set集合 Map特点: HashMap 基于哈希表实现的,线程不安全的Map容器 特点: 1. 基于哈希表实现 2. Key不允许重复,值可重复 3. 底层是数据+链表结构 4. 允许null键和null值 5. 线程不安全 LinkedHashMap 继承自HashMap,基于双向链表存储的有序的Map容器 Hashtable 基于散列表实现,线程安全的Map容器 特点 : 不允许null键和null值 线程安全 TreeMap 基于红黑数实现,具有排序功能的Map容器 特点: 1.底层是红黑树 2.不允许null值和null键 3.针对键排序 4.线程不安全
-
请简述泛型的优点
1. 将运行期间的问题提到了编译期间 2. 避免了强制类型转换 3. 优化了程序设计,解决了黄色警告线
Java第二次总结
