Java学习(三)--集合

        java集合大致可分为Set、List、Map三种体系,其中set是无序的、不可重复的集合;List代表有序、重复的集合。而Map则代表具有映射关系的集合。Java集合就像一种容器,我们可以把多个对象丢进该容器。那么这些对象就同样被容器进行管理。所有的集合类都位于java.util包下。

一  根接口Collection和Map

java的集合类主要是有两个接口派生而出:Collection和Map,collection和map是java集合框架的根接口,这两个接口又包含了一些子接口或实现类。下面是collection接口和map接口的继承树。

Collection集合体系继承树


Map体系继承树


map体系的继承树,所有的实现类用于保存具有映射关系的数据。

根据继承树中的四个接口:Set、Queue、List、Map,可以把所有的集合分为三大类,其中Set集合类似于一个罐子,把对象添加到罐子中,set集合无法记住添加元素的顺序,所以set集合中的元素不能重复;List集合非常像一个数组,它可以记住每次添加元素的顺序,但是它的长度是可变的。Map集合也像一个罐子,知识它里面的每项数据都有两个值组成。



collection

1 set集合

1.1  HashSet类
       HashSet 是set接口典型实现,大多数时候使用Set集合时就是使用这个实现类。HashSet按Hash算法(散列函数)来存储集合中的元素,隐私具有很好的存取和查找性能。
特点:1 不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也有可能发生变化。2  HashSet不是同步的,如果多个线程同时访问一个HashSet,假设有两个或者两个以上线程同时修改了HashSet集合时,则必须通过代码来保证其同步。3 集合元素值可以使null。
       当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据该hashCode()方法返回值不相等,HashSet将会把他们存储在不同的位置,可以添加成功。


1.2  Linkhashset类

        LinkedHashSet 集合同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。
       LinkedHashSet 在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet,因为它以链表来维护内部顺序。

注:虽然LinkedHashSet 使用了链表记录集合元素的添加顺序,但是LinkedHashSet仍然是HashSet,因为它依然不允许集合元素重复。

1.3  Enumset类

        EnumSet是一个专为枚举设计的集合类,EnumSet中的所有元素都必须是指定枚举类型的枚举值,该枚举类型在创建EnumSet时显示或隐式地指定。EnumSet的集合元素也是有序的,EnumSet以枚举值在Enum类内的定义顺序来决定集合元素的顺序。

       EnumSet在内部以位向量的形式存储,这种存储形式非常紧凑、高效,因此Enumset对象占用内存很小,而且运行效率很好。


1.4 比较分析

       HashSet和TreeSet是Set的两个典型实现,HashSet的性能总是比TreeSet好,因为TreeSet需要额外的红黑树算法来维护集合元素的次序。只有当需要一个保持排序的set时,才应该使用TreeSet,否则都应该使用HashSet。对于普通的插入、删除操作,LinkedHashSet比HashSet要略微慢一点,这是由维护链表所带来的额外开销造成的:不过,因为有了链表,遍历LinkedHashSet会更快。

        EnumSet 是所有Set实现类中性能最好的,但它只能保存同一个枚举的枚举值作为集合元素。

        Set的三个实现类HashSet、TreeSet和Enumset都是线程不安全的。如果有多个线程同时访问一个Set集合,并且有超过一个线程修改了该Set集合,则必须手动保证该Set集合的同步性。


总结:

       JAVA集合类是一种特别的的工具类,可以用于存储数量不等的多个对象,并可以实现常用的数据结构。除此之外,java集合还可以用于保存具有映射关系的关联数组。它是一个工具类,是帮助我们的,用好这些类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值