JAVA基础-集合
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JAVA基础-集合,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3905字,纯文字阅读大概需要6分钟。
内容图文
![JAVA基础-集合](/upload/InfoBanner/zyjiaocheng/606/c95774bd458d40feb74382148b4b16bb.jpg)
JAVA基础-集合
1.概述
JAVA容器分为两大类:
Collection接口的子接口包括:List接口和Set接口;List接口实现类主要有ArrayList、LienkedList、Vector等;Set接口的主要实现类有HashSet、TreeSet、LinkedHashSet等;
Map接口的实现类主要有HashMap、TreeMap、Hashtable、ConcurrentHashMap等;
- Collection
List
|------- ArrayList
|------- LinkedList
|------- Vector
Set
|------- HashSet
--------- |------- LinkedHashSet
|------- TreeSet - Map
HashMap
|------- LinkedHashMap
TreeMap
ConccurrentHashMap
Hashtable
2.List和Set的异同
- List接口:List是有序的Collection,保持了每个元素插入的顺序,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素;
- Set接口:Set 不保存重复的元素。Set 接口存储一组唯一,无序的对象。
允许重复对象 | null元素 | 是否有序 | 常见实现类 | |
---|---|---|---|---|
List | 是 | 允许多个null元素 | 是 | ArrayList LinkedList Vector |
Set | 否 | 允许插入一个null元素 | 否 | HashSet LinkedHashSet TreeSet |
两个接口都是继承自Collection?,是常用来存放数据项的集合,主要区别如下:
? ① List和Set之间很重要的一个区别是是否允许重复元素的存在,在List中允许插入重复的元素,而在Set中不允许重复元素存在。
? ② 与元素先后存放顺序有关,List是有序集合,会保留元素插入时的顺序,Set是无序集合。
? ③ List可以通过下标来访问,而Set不能。
List和Set可以相互转化:
//List转Set
Set<String> set = new HashSet<>(list);
//Set转List
List<String> list1 = new ArrayList<>(set);
3. List接口常用实现类
ArrayList、Vector和LinkedList类均在java.util包下;ArrayList和Vector都是基于存储元素的Object[] array来实现的,它们会在内存中开辟一块连续的空间来存储,因为数据存储是连续的,所以它们支持用下标来访问元素,索引数据的速度比较快。LinkedList是采用双向列表来实现的,对数据的索引需要从列表头开始遍历,因此用于随机访问则效率比较低,但是插入元素时不需要对数据进行移动,因此插入效率较高。同时,LinkedList是非线程安全的容器。
数据结构 | 并发安全 | 扩容机制 | |
---|---|---|---|
ArrayList | 数组 | 非线程安全 | 自动增长原数组的0.5倍 |
Vector | 数组 | 线程安全 | 增长为原数组的1倍 |
LinkedList | 双向链表 | 非线程安全 | 无 |
4.Set接口常用实现类
HashSet: 无序
LinkedHashSet: 按照插入顺序
TreeSet: 从小到大排序
-
(1)HashSet
HashSet有以下特点- 不能保证元素的排列顺序,顺序有可能发生变化
- 不是同步的
- 集合元素可以是null,但只能放入一个null
-
(2)TreeSet
TreeSet类型是J2SE中唯一可实现自动排序的类型TreeSet是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方式,自然排序 和定制排序,其中自然排序为默认的排序方式。向 TreeSet中加入的应该是同一个类的对象。
-
(3)LinkedHashSet
LinkedHashSet集合同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺 序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。
LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。
4.List和Map的区别
-
List是存储单列的集合
-
Map存储的是key-value键值对的集合
-
List存储的数据是有序且可以重复的
-
Map中存储的数据是无序且key值不能重复
5.Map接口常用实现类
允许key/value为空 | 并发安全 | 排序 | |
---|---|---|---|
HashMap | 允许为空 | 非线程安全 | 无序 |
LinkedHashMap | 允许为空 | 非线程安全 | 保持插入时顺序 |
TreeMap | 允许为空 | 非线程安全 | 根据键排序,默认升序 |
ConccurrentHashMap | 不允许为空 | 线程安全 | 无序 |
Hashtable | 不允许为空 | 线程安全 | 无序 |
-
1)HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为null,不允许多条记录的值为null。HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要同步,可以用Collections.synchronizedMap(HashMap map)方法使HashMap具有同步的能力。
-
2)Hashtable与HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,然而,这也导致了Hashtable在写入时会比较慢。
-
3)LinkedHashMap保存了记录的插入顺序,在用Iteraor遍历LinkedHashMap时,先得到的记录肯定是先插入的。在遍历的时候会比HashMap慢。有HashMap的全部特性。
-
4)TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用Iteraor遍历TreeMap时,得到的记录是排过序的。TreeMap的键和值都不能为空。
内容总结
以上是互联网集市为您收集整理的JAVA基础-集合全部内容,希望文章能够帮你解决JAVA基础-集合所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。