Java学习(三)--集合
2015-02-28 21:49
218 查看
java集合大致可分为Set、List、Map三种体系,其中set是无序的、不可重复的集合;List代表有序、重复的集合。而Map则代表具有映射关系的集合。Java集合就像一种容器,我们可以把多个对象丢进该容器。那么这些对象就同样被容器进行管理。所有的集合类都位于java.util包下。
Collection集合体系继承树
Map体系继承树
map体系的继承树,所有的实现类用于保存具有映射关系的数据。
根据继承树中的四个接口:Set、Queue、List、Map,可以把所有的集合分为三大类,其中Set集合类似于一个罐子,把对象添加到罐子中,set集合无法记住添加元素的顺序,所以set集合中的元素不能重复;List集合非常像一个数组,它可以记住每次添加元素的顺序,但是它的长度是可变的。Map集合也像一个罐子,知识它里面的每项数据都有两个值组成。
特点:1 不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也有可能发生变化。2 HashSet不是同步的,如果多个线程同时访问一个HashSet,假设有两个或者两个以上线程同时修改了HashSet集合时,则必须通过代码来保证其同步。3 集合元素值可以使null。
当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据该hashCode()方法返回值不相等,HashSet将会把他们存储在不同的位置,可以添加成功。
LinkedHashSet 在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet,因为它以链表来维护内部顺序。
注:虽然LinkedHashSet 使用了链表记录集合元素的添加顺序,但是LinkedHashSet仍然是HashSet,因为它依然不允许集合元素重复。
EnumSet在内部以位向量的形式存储,这种存储形式非常紧凑、高效,因此Enumset对象占用内存很小,而且运行效率很好。
EnumSet 是所有Set实现类中性能最好的,但它只能保存同一个枚举的枚举值作为集合元素。
Set的三个实现类HashSet、TreeSet和Enumset都是线程不安全的。如果有多个线程同时访问一个Set集合,并且有超过一个线程修改了该Set集合,则必须手动保证该Set集合的同步性。
总结:
J***A集合类是一种特别的的工具类,可以用于存储数量不等的多个对象,并可以实现常用的数据结构。除此之外,java集合还可以用于保存具有映射关系的关联数组。它是一个工具类,是帮助我们的,用好这些类。
一 根接口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集合的同步性。
总结:
J***A集合类是一种特别的的工具类,可以用于存储数量不等的多个对象,并可以实现常用的数据结构。除此之外,java集合还可以用于保存具有映射关系的关联数组。它是一个工具类,是帮助我们的,用好这些类。
相关文章推荐
- Java学习系列(八)Java面向对象之集合框架详解(下)
- Java学习系列(七)Java面向对象之集合框架详解(上)
- Java学习系列(七)Java面向对象之集合框架详解(上)
- Java学习系列(七)Java面向对象之集合框架详解(上)
- Java学习系列之---集合包
- Java学习系列(八)Java面向对象之集合框架详解(下)
- Java学习系列(八)Java面向对象之集合框架详解(下)
- C#中的集合类
- java集合中的一个移除数据陷阱
- JAVA学习(三)__c标签 if else c标签 总结
- 集合的运算
- 杭州果市花市大集合,最好的鲜花和水果在这里哟!
- Java中集合转数组
- Swift中级学习 3 集合Set
- JavaEE基础(十五)/集合
- Java集合概要
- Java多线程--并发中集合的使用ConcurrentSkipListSet(from java platform)
- Java集合----基本架构
- java集合详解与总结
- 关于Java集合