首页 > 编程知识 正文

java常用的容器类型有哪些(java中super的用法)

时间:2023-05-04 01:07:49 阅读:64594 作者:647

本文是阅读并总结《Java编程的逻辑》年的学习笔记,如有错误,请指正

抽象容器类、接口和具体容器类之间的关系如下图所示。

虚线框表示接口,其中包括CoIIction、List、Set、Queue、Deque和Map。 有六个抽象的容器类。

AbstractCollection :实现collection接口,由抽象类AbstractList、AbstractSet和AbstractQueue继承,ArrayDeque也是AbstractCollection 父类是AbstractCollection,实现列表接口,ArrayList、abstract-sequential list abstractsequentiallist :的父类是AbstractList LinkedList继承的AbstractMap:实现了Map接口,TreeMap、HashMap和EnumMap继承的abstractset : abstract queue :的父类是

Collection表示的数据集合有基本的添加、删除、检索、扫描等方法,但没有定义要素之间的顺序和位置,也没有规定是否存在重复要素。

List是Collection的子界面,它表示具有顺序和位置的数据集合,并添加了根据索引位置进行操作的方法。 有两个主要实现类: ArrayList链接列表。 ArrayList是基于数组实现的,而LinkedList是基于链表实现的; 随机访问ArrayList是高效的,但要从中间插入和删除元素,必须移动元素,而且效率不高。 链接的列表正好相反,随机访问效率不高,但要添加或删除元素,只需调整到邻居节点的链接即可。

Set也是Collection的子界面,没有添加新方法,但确保不包含重复元素。 有两个主要的实现类: HashSet和TreeSet。 HashSet基于哈希表实现,用密钥重写hash Code方法是高效的,但要求元素之间没有顺序; TreeSet基于排序的二叉树实现,元素排列得相对有序,元素必须实现Comparable接口。 或者,在创建TreeSet时提供Comparator对象。 HashSet还有一个子类LinkedHashSet,可以按插入顺序按。 还有枚举类型的实现类EnumSet。 这是基于位向量实现的,并且是高效的。

队列是Collection的子界面,表示先进先出队列,添加到末尾,从头部显示或删除。 Deque是Queue的子接口,表示更通用的双端队列,可以通过头或尾明确显示、添加和删除。 常规队列有两个主要实现类:链接列表和阵列请求。 LinkedList基于链表实现,ArrayDeque基于循环数组实现。 通常,如果只需要Deque接口,则ArrayDeque更高效。

Map接口表示键-值对的集合,通常基于键进行操作,有两个主要实现类: HashMap和TreeMap。

HashMap是基于哈希表实现的,需要用键重写hashCode方法,操作效率高,但元素没有顺序。 TreeMap基于排序二叉树的实现,需要在密钥上实现Comparable接口或提供Comparator对象,虽然操作效率稍低,但可以有序地按下密钥。

HashMap还有一个子类链接的HashMap,可以按插入或访问顺序。 之所以有序,是因为每个元素也被添加到双向链表中。 如果密钥本来就有规律,则使用链接的散列而不是树形映射可以提高效率。 根据访问顺序的特点,可以容易地用于实现LRU缓存。

如果密钥是枚举类型,则可以使用专用的实现类EnumMap。 这使用更高效的数组实现。

除了Hashtable、Vector和Stack之外,我们介绍的各种容器类都不是线程安全的。 这意味着,如果多个线程同时读写同一容器对象,则不安全。 如果需要线程安全,请使用Collections提供的synchronizedXXX方法同步容器对象,或使用线程安全的专用容器类。

容器类提供的迭代器还具有在迭代过程中检测结构变化的特点。 如果容器发生结构性变化,则抛出ConcurrentModificationExcep,因此无法在迭代过程中直接调用容器类提供的add/remove方法。 如果需要添加或删除迭代器,则必须调用相关方法。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。