集合框架图以及一些理解与总结

来源:互联网 发布:js 删除预览图片 编辑:程序博客网 时间:2024/06/05 00:48

Java集合架构支持3种类型的集合:规则集(Set),线性表(List),和图(Map),分别定义在Set,List,Map中。Set实例存储一组互不相同的元素(集合),List实例存储一组顺序排列的元素,Map存储一组 对象---关键值的映射


(图取自网络)

简单分析:

Set、List和Map可以看做集合的三大类。

     List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问。

     Set集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是不能集合里元素不允许重复的原因)。

     Map集合中保存Key-value对形式的元素,访问时只能根据每项元素的key来访问其value。

对于Set、List和Map三种集合,最常用的实现类分别是HashSet、ArrayListHashMap三个实现类。

HashSet(哈希集合):HashSet类是Set接口实现类之一,使用较为广泛,它不保存元素的加入顺序。HashSet类根据元素的哈希码进行存放,所以取出时也可以根据哈希码快速找到。注意:因为Set接口中不能加入重复元素,所以对于自定义类,需要提供元素的方法,即需要重写hashCode()和equals()方法。Java规范中要求,如果程序员重写了equals方法,就一定要重写hashCode方法。当两个对象调用equals方法比较时,如果返回true,那么他们的hashCode值要求返回值相等。

equals方法和hashCode方法的说明:
1)如果两个对象相同,那么他们的hashCode(哈希码)一定要相同;
2)如果两个对象的hashCode(哈希码)相同,这两个对象并不一定相同。

ArrayList(顺序表集合):ArrayList类扩展了AbstractList并实现List接口。
AyyayList类提供了一个随需要而增长的动态数组。在Java中,标准数组是固定长度的,在数组创建之后,他们不能被加长或缩短,这也就意味着我们必须事先知道数组可以容纳多少元素。但是知道运行时才能知道需要多大的数组。AyyayList类就是为了解决这个问题。(特点
对于使用索引查询元素效率较高,它可以使用索引快速定位元素位置,但删除或插入元素效率较低

HashMap(哈希映射集合)HashMap类是基于哈希表的Map接口实现,提供所有可选的映射操作,效率高,所以在实际应用开发中使用广泛。由于HashMap的键要求不重复,建议尽量使用标准库类,避免自定义类重写equals方法和hashCode方法。

补充说明:
1)如果涉及到堆栈、队列等操作,应考虑使用List接口的实现类;
2)如果要进行大量的随机访问,应该使用ArrayList;
3)如果经常进行插入和删除操作,应该使用LinkedList;
4)总是使用类型安全的泛型,避免在运行时出现ClassCastException异常;
5)尽量使用JDK的标准类作为Map的键(如String,Integer等,可以避免自体实现比较器
或equals方法和hashCode方法;



1 0