泛型
- 泛型 : 要解决的是类型安全问题
- 使用 : 在类型后面<泛型类型>
**1.Collection集合和Map集合的区别是什么? Map集合存放的对象有什么特点?
列出Map中常用的方法,包括对象的保存,提取等.
Collection 集合保存的是一个一个的对象
Map 集合保存的是一对一对的对象, 键值对映射对象, 键到值是单向一对一映射, 键必须唯一, 无序.
Map<K, V> map = ?; // K是键对象的类型, V是值对象的类型
V put(K key, V value); // put(1,”1”); put(1,”one”); 返回值是老值对象
V get(K key)
Set keySet();
Set<Entry<K, V>> entrySet()
V remove(K key);
2. 如何使用迭代器遍历一个集合? 写出代码. 并加上注释, 说明注意点.
// 获取到迭代器对象, 从集合对象的方法获取
Collection col = ?;
Iterator it = col.iterator();// 注意点1: 迭代器的使用必须马上进行.
while (it.hasNext()) {
T t = it.next();// 注意点2: next方法在循环中只能调用一次
// 访问t
}
- HashSet和TreeSet分别是用什么方式判断两个对象重复?
HashSet 判断对象重复 : 先调用对象的hashCode方法, 再定位对象在数组中的下标, 如果下标处是空洞, 直接插入, 但是如果下标处非空, 遍历此链表, 依次和新插入的对象equals, 如果有为true的, 认为对象重复, 拒绝插入, 如果在链表中没有找到equals为true的就链到链表的末尾.
TreeSet 判断对象重复 : 直接让新对象在插入树的时候和相关的结点比大小的时候决定, 如果和某结点的比较结果为0, 说明就重复了, 拒绝插入.
4.方法: public T test() 方法的返回值是什么? 有什么改进的地方?
返回值是T, 但是永远无法具体化, 只能返回Object类型.
public T test(T t) 方法在调用时, 才能由实参来进一步确定T的类型. - 写出ArrayList, LinkedList, HashSet, TreeSet 各自的优点和缺点.
ArrayList : 基于数组实现
缺点 : 非末端数据的插入速度最慢, 对内存要求高, 要求连续.
优点 : 末端插入最快, 检索速度中快
适用于不是频繁插入删除数据的场合.
LinkedList : 基于链表实现
缺点 : 检索速度最慢
优点 : 对内存要求低, 插入,和删除操作很快
适用于频繁地插入和删除数据的操作, 检索不太多(内存管理)
TreeSet : 基于二叉搜索树(红黑树)
缺点 : 插入,删除速度比较慢
优点 : 对内存要求低, 检索速度非常快
适用于数据的插入删除不频繁, 但是检索频繁的场景, 比如数据库索引
HashSet : 基于数组, 使用哈希算法实现
唯一的缺点 : 就是对内存要求高.**
来源:CSDN
作者:土拨鼠饲养员
链接:https://blog.csdn.net/lxsxkf/article/details/103557352