【Java集合框架的3个核心问题】
1、比较ArrayList、LinkedList和Vector的异同?
2、谈谈HashMap和TreeMap的实现原理?
3、如何选择合适的集合类?
……
第四篇:集合框架(3个)
1、比较ArrayList、LinkedList和Vector的异同?
相同点:
三者都实现了List接口,存储数据的方式都是基于动态数组的形式。
当元素数量超过当前数组长度时,会在内存中分配一块更大的内存…
将原有数组中的数据复制过去,释放原数组,然后将新元素放到新数组中。
不同点:
1)ArrayList和Vector是动态数组,LinkedList是双向链表。
2)ArrayList和Vector支持随机访问元素,而LinkedList不支持。
3)ArrayList在内存不足时,扩容为原来的1.5倍,Vector扩容为原来的2倍。
而LinkedList在内存上更加优化,因为LinkedList的节点不需要连续存储。
4)ArrayList和LinkedList不是线程安全的,而Vector是线程安全的。
…
2、谈谈HashMap和TreeMap的实现原理?
HashMap和TreeMap,是Java中两种常用的Map实现。
它们各自有着,独特的实现原理和使用场景。
一、HashMap:
HashMap是基于哈希表实现的Map接口。
它允许使用null键和null值。
HashMap不保证映射的顺序,特别是它不保证该顺序恒久不变。
HashMap的实例,有两个参数影响其性能,即初始容量和加载因子。
初始容量,是哈希表在创建时的容量;
加载因子,是哈希表在其容量自动增加之前,可以达到多满的一种尺度。
当哈希表中的条目数,超过了加载因子与当前容量的乘积时…
哈希表就会进行rehash操作;
也就是创建一个新的数组,然后将原数组中的数据,重新映射到新数组中。
HashMap的核心数据结构,是一个Node数组。
每个Node,都保存了键值对信息,以及指向下一个Node的引用。
在HashMap中,通过key的hashCode经过一定的计算后得到数组下标…
然后,在对应的数组位置上,进行存储。
如果,计算出的数组下标位置,已经存在元素,那么就在这个位置形成链表。
当链表长度太长(默认是8)时,链表就转换为红黑树,这样可以大大提高查询的效率。
二、TreeMap:
TreeMap是基于红黑树实现的Map接口。
它根据键的自然顺序,对键进行排序;
或者根据创建TreeMap时,提供的parator进行排序,具体取决于使用的构造方法。
TreeMap不允许使用null键。
红黑树,是一种自平衡的二叉查找树;
通过对任何一条,从根到叶子的路径上,各个节点着色的方式的限制;
红黑树确保从根到叶子的最长的可能路径,不会超过最短可能路径的两倍长。
这种特性,使得红黑树在插入、删除和查找操作中,都保持了相对稳定的性能。
在TreeMap中,每个键都关联一个值。
你可以使用put(key, value)方法,将键值对添加到映射中;
使用get(key)方法,获取与指定键关联的值。
TreeMap的键集合(keySet()方法返回)按照键的排序顺序(升序或降序)进行迭代。
TreeMap的键和值都不能为null。
三、综上所述
HashMap和TreeMap的主要区别,在于其内部实现机制、性能特点以及使用场景。
HashMap适用于需要快速插入、删除和查找的场景。
而TreeMap,则适用于需要按照键的排序顺序,进行操作的场景。
…
3、如何选择合适的集合类?
在Java中,选择合适的集合类,对于程序的性能和正确性至关重要。
Java提供了丰富的集合类,每种集合类都有其特定的用途和性能特点。
本章未完 点击下一页继续阅读