Day21
栈是后进先出(一叠书),队列是先进先出(超市排队买东西)。
今日小问题
1.Map存储数据的特点是什么?并指明key、value、entry存储数据的特点。
双列数据,存储key-value对数据。
key:无序的,不可重复的。--->Set存储
value:无序的,可重复的。--->Collections存储。
key-value :无序的、不可重复的 --->Set存储。
2. 描述HashMap的底层实现原理(jdk8版)
有数组,链表,红黑树。
3.Map中常用实现类有哪些?各自有什么特点?
HashMap:Map的主要实现类。线程不安全,效率高,可以存储null的key和value。
--------LinkedHashMap:保证在遍历Map时,能按添加的存储数据的顺序实现遍历。
原因:在原有的HashMap的基础上多了一对指针,可以指向前一个和后一个元素。对于频繁的遍历操作 LinkedHashMap效率高于HashMap
TreeMap:保证按照添加的key-value对进行排序,实现排序遍历,此时考虑key的自然排序或定制排序,底层使用红黑树。
Hashtable : 作为古老的实现类,线程安全,效率低,不能存储null的key和value
--------Properties:常用来处理配置文件。key和value都是String类型。
4. 如何遍历Map中key-value对,代码实现。
public class test {
5. Collecion 和Collections区别
Collection是一个接口,
Collections是一个工具类,操作collction和map的工具类
面试题:负载因子值的大小,对HashMap有什么影响
负载因子的大小决定了HashMap的数据密度。
负载因子越大密度越大,发生碰撞的几率越高,数组中的链表越容易长,造成查询或插入时的比较次数增多,性能会下降。
负载因子越小,就越容易触发扩容,数据密度也越小,意味着发生碰撞的几率越小,数组中的链表也就越短,查询和插入时比较的次数也越小,性能会更高。但是会浪费一定的内容空间。而且经常扩容也会影响性能,建议初始化预设大一点的空间。
按照其他语言的参考及研究经验,会考虑将负载因子设置为0.7~0.75,此时平均检索长度接近于常数。
泛型
//这里继承了Order<Integer>,所以SubOrder不用定义泛型了。这里的SubOrder就是个普通类了。不是泛型类。
public class SubOrder extends Order<Integer>{
}
区别:👆 👇。
//SubOrder1<T>:仍然是泛型类。
public class SubOrder1<T> extends Order<T>{
}
package com.sorrymaker.Generics;
import org.junit.Test;
import java.util.*;
/**
* 在集合中使用泛型
* 总结:
* 1.集合接口或集合类在jdk5.0时都修改为带泛型的结构
* 2.在实例化集合类时,可以指明具体的泛型类型。
* 3.指明完后,在集合类或接口中凡事定义类或接口时,内部结构使用到类的泛型的位置,都指定为实例化时泛型的类型
* 比如:add(E e)---->实例化后:add(Integer e)
* 4.注意点,泛型的类型必须是类,不能是基本数据类型,需要用到基本数据类型的位置,拿包装类来替换。
* 5.如果实例化时,没有指明泛型的类型,默认类型为java.lang.Object类型。
*
* 如何自定义泛型结构:泛型类、泛型接口:泛型方法。
*
*
*/
public class day01 {
//在集合中使用泛型之前的情况:以ArrayList为例
