集合学习笔记(二)

简介: TreeMap是红黑树实现的有序映射,操作如containsKey、get、put、remove的时间复杂度为log(N)。它有root、size和comparator成员,Entry节点按Key排序,比较依赖comparator。Map与Set的区别在于Map包含键值对,Set仅存储元素,二者皆无重复。List与Set的区别在于List有序且可重复元素。ArrayList基于数组,适合随机访问,而LinkedList基于链表,插入删除更高效但占用更多内存。

1.请介绍TreeMap的底层原理

​ TreeMap基于红黑树(Red-Black tree)实现。映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。TreeMap的基本操作containsKey、get、put、remove方法,它的时间复杂度是log(N)。

​ TreeMap包含几个重要的成员变量:root、size、comparator。其中root是红黑树的根节点。它是Entry类型,Entry是红黑树的节点,它包含了红黑树的6个基本组成:key、value、left、right、parent和color。Entry节点根据根据Key排序,包含的内容是value。Entry中key比较大小是根据比较器comparator来进行判断的。size是红黑树的节点个数。

  1. Map和Set有什么区别?

​ Set代表无序的,元素不可重复的集合;

​ Map代表具有映射关系(key-value)的集合,其所有的key是一个Set集合,即key无序且不能重复。

  1. List和Set有什么区别?

​ Set代表无序的,元素不可重复的集合;

​ List代表有序的,元素可以重复的集合。
4 .ArrayList和LinkedList有什么区别?

​ ArrayList的实现是基于数组,LinkedList的实现是基于双向链表;
​ 对于随机访问ArrayList要优于LinkedList,ArrayList可以根据下标以O(1)时间复杂度对元素进行随机访问,而LinkedList的每一个元素都依靠地址指针和它后一个元素连接在一起,查找某个元素的时间复杂度是O(N);
​ 对于插入和删除操作,LinkedList要优于ArrayList,因为当元素被添加到LinkedList任意位置的时候,不需要像ArrayList那样重新计算大小或者是更新索引;
​ LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。
  1. 有哪些线程安全的List?

    ​ Vector

    ​ Vector是比较古老的API,虽然保证了线程安全,但是由于效率低一般不建议使用。

    ​ Collections.SynchronizedList

    ​ SynchronizedList是Collections的内部类,Collections提供了synchronizedList方法,可以将一个线程不安全的List包装成线程安全的List,即SynchronizedList。它比Vector有更好的扩展性和兼容性,但是它所有的方法都带有同步锁,也不是性能最优的List。

    ​ CopyOnWriteArrayList

    ​ CopyOnWriteArrayList是Java 1.5在java.util.concurrent包下增加的类,它采用复制底层数组的方式来实现写操作。当线程对此类集合执行读取操作时,线程将会直接读取集合本身,无须加锁与阻塞。当线程对此类集合执行写入操作时,集合会在底层复制一份新的数组,接下来对新的数组执行写入操作。由于对集合的写入操作都是对数组的副本执行操作,因此它是线程安全的。在所有线程安全的List中,它是性能最优的方案。

相关文章
|
5天前
|
存储 Java 索引
集合进阶Collection集合
这篇文档介绍了Java中的Collection集合和其子类List与Set的基本概念和特性。
25 3
|
5天前
集合
数组的长度不可以发生改变。 但是ArrayList集合的长度是可以随意变化的。 对于ArrayList来说,有一个尖括号代表泛型。 泛型:也就是装在集合当中的所有元素,全都是统一的什么类型。 注意:泛型只能是引用类型,不能是基本类型。 注意事项: 对于ArrayList集合来说,直接打印得到的不是地址值,而是内容。如果内 容是空,得到的是空的中括号:[]
30 0
|
11月前
|
设计模式 安全
集合
集合
49 0
|
11月前
|
索引
集合理解
集合的个人理解笔记 与二叉查找树规律
51 0
|
存储
|
存储 算法 安全
|
存储 Java 容器
|
存储 算法 安全
集合总结
集合总结
74 0
|
存储 安全 Java
第9章 集合
集合体系、集合的数据结构以及操作。
91 0
|
存储 安全 Java
笔记16-集合
笔记16-集合
笔记16-集合