把昨天的3、4题通过面向百度编程,做出来了。坚持了21天的学习,每天基本都有收获,感觉自己逐渐对Java有一定的了解了,开始用生锈的大脑记东西了。加油OVO
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 {
@Test
public void test1(){
HashMap map =new HashMap();
map.put("aa",11);
map.put("bb",22);
map.put("cc",33);
Set set1 =map.keySet();
Iterator iterator = set1.iterator();
while(iterator.hasNext()){
Object key = iterator.next();
Object value = map.get(key);
System.out.println(key +""+value);
}
}
}
5. Collecion 和Collections区别
Collection是一个接口,
Collections是一个工具类,操作collction和map的工具类
面试题:负载因子值的大小,对HashMap有什么影响
负载因子的大小决定了HashMap的数据密度。
负载因子越大密度越大,发生碰撞的几率越高,数组中的链表越容易长,造成查询或插入时的比较次数增多,性能会下降。
负载因子越小,就越容易触发扩容,数据密度也越小,意味着发生碰撞的几率越小,数组中的链表也就越短,查询和插入时比较的次数也越小,性能会更高。但是会浪费一定的内容空间。而且经常扩容也会影响性能,建议初始化预设大一点的空间。
按照其他语言的参考及研究经验,会考虑将负载因子设置为0.7~0.75,此时平均检索长度接近于常数。
泛型
//这里继承了Order<Integer>,所以SubOrder不用定义泛型了。这里的SubOrder就是个普通类了。不是泛型类。
public class SubOrder extends Order<Integer>{
}
区别: