jquery网站发展历史时间轴,网站首页设计要求,六年级做的网站的软件下载,wordpress 站点地址 wordpress地址1.什么是集合#xff1f;
集合就是一个存放数据的容器#xff0c;准确的说是放数据对象引用的容器。
集合和数组的区别
数组是固定长度#xff0c;集合是可变长度。数组可以存储基本数据类型#xff0c;也可以存储引用数据类型#xff0c;集合只能存储引用数据类型
集合就是一个存放数据的容器准确的说是放数据对象引用的容器。
集合和数组的区别
数组是固定长度集合是可变长度。数组可以存储基本数据类型也可以存储引用数据类型集合只能存储引用数据类型数组存储的元素必须是同一个数据类型集合存储的对象可以是不同的数据类型。
使用集合框架的好处
容量自增长提供了高性能的数据结构和算法使得编码更轻松提高了程序速度和质量允许不同API之间相互操作API之间可以来回传递集合可以方便的扩展或改写集合提高了代码的复用性和可操作性通过使用JDK自带的集合类可以降低代码维护和学习新API的成本
2.常用的集合类有哪些
Map接口和Collection接口是所有集合框架的父接口
Collection接口的子接口包括Set接口和List接口Queue接口Map接口的实现类主要有HashMap,TreeMap,HashTable,ConcurrentHashMapSet接口的实现类主要有HashSetTreeSetLinkedHashSetList接口的实现类主要有ArrayListLinkedListStackVector
3.ListSetMap三者的区别
List
可以允许重复对象可以插入多个null对象是一个有序的容器保持了每个元素的插入顺序它的输出顺序就是插入顺序常用的实现类有ArrayListLinkedListVector。
Set
不允许重复对象无序容器没法保证每个元素的存储顺序TreeSet通过Comparator或者Comparable维护了一个排序顺序只允许一个null元素常用的实现类是HashSetLinkedHashSetTreeSet
Map
Map里你可以拥有随意个null值但只能有一个null键常用的是实现类HashMapTreeMapHashtableLinkedHashMap
4.集合框架底层数据结构
List接口
1.ArrayList
底层数据结构动态数组特点基于动态数组实现数组在存储元素时是连续的内存空间当数组容量不足时会自动扩容通常为原容量的1.5倍随机访问元素时O(1)的时间复杂度但在插入或者删除元素时为O(n);
2.LinkedList
底层数据结构双向链表特点基于双向链表实现每个节点包含一个数据元素以及指向前后节点的两个指针插入和删除操作O(1)随机访问O(n)因为需要从头或者尾部开始遍历链表
3.Vector
底层数据结构动态数组特点Vector时线程安全的每个方法都被sychronized关键字修饰因此在多线程环境下会出现数据不一致的问题性能比ArrayList较差适用场景适合多线程环境中需要频繁访问的场景但由于Vector的性能开销一般推荐ArrayList和同步机制配合使用
Set接口
1.HashSet
底层数据结构哈希表特点基于HashMap实现哈希表使用散列函数来计算每个元素的哈希值并将元素存储在相应的哈希桶中HashSet不保证集合的顺序插入删除查找操作的时间复杂度为O(1)允许一个null值适用场景需要快速查找插入删除并且不关心元素顺序的场景
2.LinkedHashSet
底层数据结构链表和哈希表特点继承自HashSet但维护者一个双向链表以保证插入顺序
3.TreeSet
底层数据结构红黑树(自平衡的二叉搜索树)特点基于TreeMap实现元素的顺序是根据提供的比较器来排序的插入删除查找操作为O(logn)不允许null值因为null无法比较
Map接口
1.HashMap
底层数据结构哈希表和链表/红黑树特点基于哈希表实现使用散列函数计算键的哈希值并将键值对存储在相应的哈希桶中当哈希冲突发生时HashMap使用链表来存储冲突的元素。从Java 8开始当链表长度超过一定阈值默认8时链表会转换为红黑树以提高查找和删除效率。
2.LinkedHashMap
底层数据结构链表和哈希表特点除了使用哈希表存储键值对外还维护了一个双向链表来记录元素的插入顺序或访问顺序。
3.TreeMap
底层数据结构红黑树特点底层基于红黑树实现键值对按键的自然顺序或自定义比较器排序不允许null键场景适合需要键值对有序排列和范围查找的场景。
4.Hashtable
底层数据结构哈希表特点和HashMap类似但Hashtable是线程安全的所有方法都被synchronized修饰。场景适合多线程环境下线程安全的键值对存储
5.哪些集合类是线程安全的
VectorVector 是一个古老的动态数组实现所有的方法都被 synchronized 关键字修饰因此是线程安全的。然而由于性能较差不推荐在现代代码中使用。HashtableHashtable 是一个古老的哈希表实现也是线程安全的所有的方法都被 synchronized 关键字修饰。和 Vector 一样由于性能原因现在一般推荐使用 HashMapConcurrentHashMapConcurrentHashMap 是 Java 5 及以后版本引入的并发哈希表实现。它采用分段锁机制支持高并发的读和写操作是一个高性能的线程安全集合类