集合基础介绍(一)

集合

集合是Java中临时存储数据以及操作数据的一个非常重要的组成部分,掌握并熟练的使用集合将有利于实现相关的业务逻辑,提高代码质量,下面介绍集合相关的基础信息。

什么叫集合

集合是java中用来存储一系列的对象的引用容器,在使用时可以根据对象的引用调用相关的对象。

集合的分类

1、单例集合(collection):将数据进行一个一个的存储。
2、双例集合(map) :基于 Key 与 Value 的结构存储数据。

单例集合与双例集合的区别:
1、collection是单例集合,元素是孤立存在的(就像单身),向集合中储存元素是以单个元素的方式储存。
2、Map是双例集合,元素是成对以Key-Value的形式存在的(就像夫妻),每个元素都是以键和值的形式存储在Map中,可以通过键找到向对应的值。
3、Map中键的值是唯一的不允许重复,但是值可以重复并允许为null。

单例集合(collection)

List

特点:
有序:有序(元素存入集合的顺序和取出的顺序一致)。List 中每个元素都有索引标记。 可以根据元素的索引标记(在 List 中的位置)访问元素,从而精确控制这些元素。
可重复:List 允许加入重复的元素。更确切地讲,List 通常允许满足 e1.equals(e2) 的元素重复加入容器

常用实现类

1、ArrayList类
特点:
底层由数组实现,存储的数据具有有序性,重复性,且查询效率高,增删效率低,线程不安全,JDK1.8后使用了延迟加载,只有添加元素是才创建数组,扩容的大小为原来的1.5倍题

2、LinkedList类
特点:
底层由双向链表实现,特点是查询速度慢(需要遍历查询),增删效率高(只需要修改前后两个节点),线程不安全

3、Vector类(现在已经很少使用)
特点:
Vector 底层是用数组实现的,相关的方法都加了同步检查,因此“线程安全,效率低”。没有延时加载,一旦初始化后立即创建数组,数组长度为10,扩容大小为原来的2倍。

Set

特点:
存储无序且不重复的数据,其余数学中的“集合”更为接近。无序指 Set 中的元素没有索引,我们只能遍历查找;不可重复指不允许加入重复的元素。更确切地讲,新元素如果和 Set 中某个元素通过 equals() 方法对比为 true,则只能保留一个。

常用实现类

1、HashSet类
特点:
HashSet中元素的存放顺序都是无序的,且不可保存重复的元素,允许保存为null的元素,底层是通过HashMap实现的(HashSet就是一个简化版的HashMap),所以查询和增删效率都比较高。线程不安全。

2、LinkedHashSet类
特点:
元素唯一,元素无索引,元素存取有序
由哈希表结构保证元素唯一,由链表保证元素存取有序

3、TreeSet类
特点:
具备Set的基本特点元素不允许重复,但是TreeSet 是一个可以对元素进行排序的容器。底层实际是用 TreeMap 实现的,内部维持了一个简化版的 TreeMap,通过 key 来存储 Set 的元素。

双例集合(map)

1、HashTable类
特点:
Hashtable是遗留类,很多映射的常用功能与HashMap类似,不同的是它承自Dictionary类,并且是线程安全的,任一时间只有一个线程能写Hashtable,并发性不如ConcurrentHashMap,因为ConcurrentHashMap引入了分段锁。Hashtable不建议在新代码中使用,不需要线程安全的场合可以用HashMap替换,需要线程安全的场合可以用ConcurrentHashMap替换。

2、HashMap类
特点:
HashMap是Map接口的接口实现类,它采用哈希算法实现,是Map接口最常用的实现类。由于底层采用了哈希表存储数据,所以要求键值不能重复,如果发生重复,新值将会替换旧值。HashMap在查找、删除修改方面都有非常高的效率。
HashMap的初始扩容为16长度,扩容因子为0.75,即数组的使用长度为数组长度的0.75倍时进行扩容,扩容为原来的2倍,即2N

3、ConcurrentHashMap
特点:
主要就是为了应对hashmap在并发环境下不安全而诞生的,ConcurrentHashMap的设计与实现非常精巧,大量的利用了volatile,final,CAS等lock-free技术来减少锁竞争对于性能的影响,是线程安全的。
ConcurrentHashMap避免了对全局加锁改成了局部加锁操作,这样就极大地提高了并发环境下的操作速度。

4、TreeMap类
特点:
也是基于Map的实现类,效率要比HashMap低,可以实现通过键值进行排序,底层是由红黑树进行实现的。

5、LinkedHashMap类
特点:
LinkedHashMap是HashMap的一个子类,其特殊实现的仅仅是保存了记录的插入顺序,所以在Iterator迭代器遍历LinkedHashMap时先得到的键值是先插入的(也可以在构造时用带参构造方法来改变顺序为按照使用进行排序),其存储沿用了HashMap结构外还多了一个双向链表,具备HashMap的所有特性和缺点。总结:唯一的区别就是LinkedHashMap多了一个双向循环链表也因此多了插入排序的功能。

6、Properties类
特点:
Properties(Java.util.Properties),该类主要用于读取Java的配置文件,不同的编程语言有自己所支持的配置文件,配置文件中很多变量是经常改变的,为了方便用户的配置,能让用户够脱离程序本身去修改相关的变量设置。就像在Java中,其配置文件常为.properties文件,是以键值对的形式进行参数配置的。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高山无涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值