List、Set和Map三者之间有什么区别呢?
下文笔者讲述list,Set,Map之间的区别说明,如下所示
下文笔者将从三个数据容器List,Set,Map的简介中总结出其区别 如下所示
List(列表)简介
List中的元素 使用线性方式存储 可存放重复对象
List中常见的实现类
ArrayList 长度可变的数组 可对元素进行随机的访问 向ArrayList中插入与删除元素的速度慢 JDK8中ArrayList扩容的实现是通过grow()方法: 使用语句newCapacity = oldCapacity + (oldCapacity >> 1) (即1.5倍扩容)计算容量 然后使用Arrays.copyOf()方法进行对原数组进行复制。 LinkedList 使用链表数据结构 插入和删除速度快 但访问速度慢
Set(集合)
Set中的对象不按特定(HashCode)的方式排序 且没有重复对象
Set中实现类
HashSet: HashSet按哈希算法来存取集合中的对象,存取速度比较快 当HashSet中的元素个数超过数组大小*loadFactor(默认值为0.75)时 就会进行近似两倍扩容(newCapacity = (oldCapacity << 1) + 1)。 TreeSet: TreeSet实现SortedSet接口,可对集合中的对象进行排序
Map(映射)
Map是一种把键对象和值对象映射的集合 Map中每一个元素都包含一个键对象和值对象
Map实现类
HashMap: HashMap基于散列表实现 其插入和查询<K,V>的开销是固定 可以通过构造器设置容量和负载因子来调整容器的性能。 LinkedHashMap 类似于HashMap 但是迭代遍历它时 取得<K,V>的顺序是其插入次序 或是最近最少使用(LRU)的次序。 TreeMap: TreeMap基于红黑树实现 查看<K,V>时,它们会被排序 TreeMap是唯一的带有subMap()方法的Map,subMap()可以返回一个子树。
list,set,map接口常见的实现类
List ArrayList、LinkedList、Vector Set HashSet、TreeSet、LinkedHashSet Map HashTable、TreeMap、HashMap
list,set,map接口区别
不同点 | List | Set | Map |
---|---|---|---|
继承接口 | Collection | Collection | |
常见实现类 | AbstractList(其常用子类有ArrayList、LinkedList、Vector) | AbstractSet(其常用子类有HashSet、LinkedHashSet、TreeSet) | HashMap、HashTable |
常见方法 | add( )、remove( )、clear( )、get( )、contains( )、size( ) | add( )、remove( )、clear( )、contains( )、size( ) | put( )、get( )、remove( )、clear( )、containsKey( )、containsValue( )、keySet( )、values( )、size( ) |
元素 | 可重复 | 不可重复(用equals() 判断) |
不可重复 |
顺序 | 有序 | 无序(实际上由HashCode决定) | |
线程安全 | Vector线程安全 | Hashtable线程安全 |
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。