在java编程中,常用的数据结构主要分为两大类:collection和map。这些数据结构通过java.util包中的接口和类来实现。以下是这些数据结构的详细介绍和它们之间的关系:
Collection---->Collections Map----->SortedMap------>TreeMap Collection---->List----->(Vector \ ArryList \ LinkedList) Map------>HashMap Collection---->Set------>(HashSet \ LinkedHashSet \ SortedSet)


Collection接口及其实现类:
Collections API:这是一个包含静态方法的类,用于操作或返回集合。它提供了多态算法、包装器(返回由指定集合支持的新集合)以及其他一些功能。如果提供给这些方法的集合或类对象为null,它们会抛出NullPointerException。
-
List API:这是一个包含静态方法的类,用于操作或返回集合。它提供了多态算法、包装器以及其他一些功能。如果提供给这些方法的集合或类对象为null,它们会抛出NullPointerException。List是一个有序的Collection,允许精确控制每个元素的插入位置,并通过索引访问元素,类似于Java数组。
立即学习“Java免费学习笔记(深入)”;
Vector API:Vector类实现了一个可增长的对象数组。类似于数组,它可以通过整数索引访问组件,但Vector的大小可以根据需要增长或缩小。Vector基于数组实现,封装了数组的一些功能,但也受限于数组的限制。Vector是线程同步的,这与ArrayList的一个重要区别。
ArrayList API:ArrayList是List接口的可调整大小的数组实现。它实现了所有可选的列表操作,并允许包括null在内的所有元素。与Vector类似,但ArrayList不是同步的,因此在性能上优于Vector,但在多线程环境中需要手动管理线程同步。
LinkedList API:LinkedList是List接口的链表实现。它实现了所有可选的列表操作,并允许包括null在内的所有元素。LinkedList提供了在列表开始和结束处获取、移除和插入元素的统一命名方法,使其可以用作堆栈、队列或双端队列。LinkedList不基于数组,因此不受数组性能限制。
List总结:
- 所有的List只能容纳单个不同类型的对象,而不是键值对。
- 所有的List可以包含相同的元素。
- 所有的List可以包含null元素。
- 基于数组的List(Vector和ArrayList)适合查询,而LinkedList适合添加和删除操作。
Set(接口)API:Set是一个不包含重复元素的集合。更正式地说,Set中不包含任何一对元素e1和e2,使得e1.equals(e2),并且最多包含一个null元素。
HashSet API:HashSet实现了Set接口,由哈希表(实际上是HashMap实例)支持。它不保证集合的迭代顺序,特别是不保证顺序会随时间保持不变。HashSet允许null元素。HashSet的存储方式是将HashMap中的键作为Set的对应存储项。
LinkedHashSet API:LinkedHashSet是HashSet的一个子类,是一个链表实现。它实现了所有可选的列表操作,并允许包括null在内的所有元素。
Dbsite企业网站管理系统1.5.0下载Dbsite企业网站管理系统V1.5.0 秉承"大道至简 邦达天下"的设计理念,以灵巧、简单的架构模式构建本管理系统。可根据需求可配置多种类型数据库(当前压缩包支持Access).系统是对多年企业网站设计经验的总结。特别适合于中小型企业网站建设使用。压缩包内包含通用企业网站模板一套,可以用来了解系统标签和设计网站使用。QQ技术交流群:115197646 系统特点:1.数据与页
SortedSet API:SortedSet是一个提供其元素总排序的Set。元素按其自然顺序或通过在创建排序集时提供的Comparator进行排序。迭代器将按元素升序遍历集合。SortedSet通过SortedMap实现。
Set总结:
- Set的实现基础是Map(HashMap)。
- Set中的元素不能重复,如果使用add(Object obj)方法添加已存在的对象,则会覆盖前面的对象。
Map接口及其实现类:
Map是一种将键对象和值对象关联的容器,一个值对象可以是另一个Map,从而形成多级映射。Map中的键对象不允许重复,以保持查找结果的一致性。对于值对象则没有唯一性要求。
HashMap API:HashMap是基于哈希表的Map接口实现。它提供了所有可选的映射操作,并允许null值和null键。HashMap与Hashtable大致相当,但它是非同步的并允许nulls。HashMap不保证映射的顺序,特别是不保证顺序会随时间保持不变。
TreeMap API:TreeMap是基于红黑树的NavigableMap实现。映射根据其键的自然顺序或在映射创建时提供的Comparator进行排序。TreeMap提供了一些扩展方法,如firstKey()、lastKey()等,还可以从TreeMap中指定一个范围以获取其子Map。
说明:
-
几个常用类的区别:
- ArrayList:元素单个,效率高,多用于查询。
- Vector:元素单个,线程安全,多用于查询。
- LinkedList:元素单个,多用于插入和删除。
- HashMap:元素成对,元素可为空。
- HashTable:元素成对,线程安全,元素不可为空。
-
Vector、ArrayList和LinkedList:
- 大多数情况下,ArrayList的性能最佳,但在频繁插入和删除元素时,LinkedList表现更好。它们三个的性能都比不上数组,Vector是线程同步的。
- 如果能使用数组(元素类型固定,数组长度固定),请尽量使用数组来代替List。
- 如果没有频繁的删除插入操作,又不用考虑多线程问题,优先选择ArrayList。
- 如果在多线程条件下使用,可以考虑Vector。
- 如果需要频繁地删除插入,LinkedList就有了用武之地。
- 如果你什么都不知道,用ArrayList没错。
-
Collections和Arrays:
- 在Java集合类框架中,Collections和Arrays是功能强大的工具类。它们提供了封装器实现、数据结构算法和数组相关的应用。
- Collections类提供了丰富的静态方法,如二分查找(binarySearch)、排序(sort)、逆序(reverse)、旋转(rotate)、交换(swap)等。
- Collections还提供了“封装器”功能,可以将一个集合转换成一个特殊的集合,如只读集合(unmodifiableXXX)、同步集合(synchronizedXXX)、单元素集合(singleton、singletonList、singletonMap)以及空集合(EMPTY_SET、EMPTY_LIST、EMPTY_MAP)。










