java集合——集合框架

【0】README

0.1) 本文描述转自 core java volume 1, 源代码为原创,旨在理解 java集合——集合框架 的相关知识;


【1】集合框架

1.1) java集合类库构成了集合类的矿建, 它为集合的实现者定义了大量的接口和抽象类。

  • 1.1.1)集合框架的接口如下图所示:
    这里写图片描述
    对上图的分析(Analysis):

  • A0)集合(Collection+Map)和集Set的区别:并不是所有的集合都是集,但所有的集都是集合;

  • A1)集合有两个基本接口: Collection 和 Map。 用add 方法插入集合;
  • A2)使用 V put(K key, V value) 插入键值对到Map集合;V get(K key)从集合中读取元素;(也需要使用迭代器访问)
  • A3)List 是一个有序集合。元素可以添加到 容器中某个特定的位置。
    • A3.1)将对象放置到某个位置上有两种方法: 使用整数索引或使用列表迭代器;
    • A3.2)List 接口定义 了几个用于随机访问的方法:
void add(int index, E lement)
E get(int index)
void remove(int idnex)
  • A3.3)RandomAccess 接口: List 接口在提供这些随机访问方法时,并不管他们对某种特定实现是否高效。 为了避免执行成本较高的随机访问操作, java SE 1.4 引入了一个标记接口 RandomAccess;

    • A3.4)这个接口没有任何方法, 但可以用来检测一个特定的集合是否支持高效的随机访问:(干货——RandomAccess 接口的作用)
* java.util Interface RandomAccess **All Known Implementing Classes:** ArrayList, AttributeList, CopyOnWriteArrayList, RoleList, RoleUnresolvedList, Stack, Vector public interface RandomAccess * Marker interface used by List implementations to indicate that they support fast (generally constant time) random access. The primary purpose of this interface is to allow generic algorithms to alter their behavior to provide good performance when applied to either random or sequential access lists. * The best algorithms for manipulating random access lists (such as ArrayList) can produce quadratic behavior when applied to sequential access lists (such as LinkedList). Generic list algorithms are encouraged to check whether the given list is an instanceof this interface before applying an algorithm that would provide poor performance if it were applied to a sequential access list, and to alter their behavior if necessary to guarantee acceptable performance. * It is recognized that the distinction between random and sequential access is often fuzzy. For example, some List implementations provide asymptotically linear access times if they get huge, but constant access times in practice. Such a List implementation should generally implement this interface. As a rule of thumb, a List implementation should implement this interface if, for typical instances of the class,
this loop:
for (int i=0, n=list.size(); i < n; i++)list.get(i); 
runs faster than this loop:
for (Iterator i=list.iterator(); i.hasNext(); )i.next(); 
* This interface is a member of the Java Collections Framework. Since: 1.4 * 该标记接口被List实现类用来指示是否它们支持快速(通常是常数时间)随机访问。该接口的主要目的是 允许一般算法可以更改其行为以提供良好性能, 当该接口应用于随机抑或是顺序访问列表的时候。 * 操纵随机访问列表(如ArrayList)的最佳算法是可以产生二次行为, 当它被应用于顺序访问列表的时候(如LinkedList)。 如果需要保证可接受的访问性能,在一个已经被应用到顺序访问列表且性能不佳的算法被应用之前,鼓励使用一般列表算法检查是否给定列表是该接口的一个实例,; * 我们意识到,随机访问和顺序访问的区别是模糊的。举个荔枝,一些List实现类提供趋于稳定地线性访问时间,如果它们在实际应用中获得一个较大且固定的访问时间的话。这样一个List实现类普遍应该实现该接口。 根据经验,一个List 实现类应该实现这个接口,如果可能的话。 * 该类的一个典型荔枝: 循环:
for (int i=0, n=list.size(); i < n; i++)list.get(i); 
明显快于下述循环:for (Iterator i=list.iterator(); i.hasNext(); )i.next(); 


if(c instanceof RandomAccess)
{use random access alg
}
else
{use sequential access alg
}

Annotation)

  • A1)理论上说, 有一个独立的Array接口, 它扩展于List接口, 并声明了随机访问方法是很合理的;
  • A2)但是,实际上,并没有去定义这样一个接口, 原因是 希望让类库的接口数量保持在一个较少的水平

1.2) ListIterator接口定义了一个方法,用于将一个元素添加到 迭代器所处位置的前面:void add(E element) , detailed Interface ListIterator , http://blog.csdn.net/pacosonswjtu/article/details/50302083

  • 1.2.1)要想获取和删除给定位置的元素, 只需要调用 Iterator 接口中的next方法和 remove 方法即可;

1.3)Set接口与 Collection接口是一样的,只不过其方法的行为有着更加严谨的定义:

  • 1.3.1)集Set的add 方法拒绝添加重复的元素;
  • 1.3.2)集Set的 equals 方法定义两个集相等的条件是它们包含相同的元素但顺序不必相同;
  • 1.3.3) hashCode 方法定义应该保证具有相同元素的集合将会得到相同的散列码;
  • 1.3.4)既然方法签名都相同了, 为什么还要建立一个独立的接口呢?(干货) 从概念上讲,并不是所有集合都是集。 建立Set 接口后, 可以让程序员编写仅接受集的方法;

1.4) SortedSet 和 SortedMap 接口暴露了 用于排序的比较器对象, 并且定义的方法可以获得集合的子集视图;
1.5)最后, Java SE 6 引入了接口 NavigableSet 和 NavigatableMap, 其中包含了 几个用于在有序集合映射表中查找和遍历的方法(从理论上讲, 这几个方法以及包含在 SortedSet 和 SortedMap的接口中)。 TreeSet 和 TreeMap 类实现了这几个接口;
1.6) 集合接口有大量的方法,这些方法可以通过更基本的方法加以实现。 抽象类提供了很多这样的实例:

AbstractCollection
AbstractList
AbstractSequentialLIst
AbstractSet
AbstractQueue
AbstractMap
  • 1.6.1)要知道, 抽象类实现了集合接口的部分方法, 其余方法由其子类实现;
  • 1.6.2) 如果实现了自己的集合类,就可能要扩展上面某个类;

1.7)java 类库支持下面几种具体类:

LinkedList
ArrayList
ArrayDeque
HashSet
TreeSet
PriorityQueue
HashMap
TreeMap
  • 1.7.1)下图展示了这些类间的关系:
    这里写图片描述
  • 1.7.2)最后, 还有许多java 第一版留下来的 容器类(遗留下来的):
Vector + Stack + Hashtable + Properties

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle密码不能重复用_重复码

oracle密码不能重复用介绍 在我们的Java应用程序中复制/粘贴代码通常不好&#xff0c;但是有时这是不可避免的。 例如&#xff0c;项目License3j在Feature类中为其支持的每种XXX类型提供了一个isXXX方法。 在这种情况下&#xff0c;我们做不到写 public boolean isBinary() { r…

oracle rman 用户,对Oracle数据库进行RMAN备份的Oracle数据库用户权限

在Oracle 12版本或者更高版本&#xff0c;Oracle备份用户需要具有SYSDBA或者SYSBACKUP权限在Oracle 11(包括11版本)以前&#xff0c;Oracle备份用户需要具有SYSDBA权限创建及授权用户权限命令示例如下&#xff1a;SQL>create user backupuser identified by oracle;SQL>g…

java之类

一、构造方法1)构造方法具有与类的相同名字2)构造方法没有返回值&#xff0c;甚至连void都没有3)创建新对象使用new&#xff0c;构造方法的作用就是初始化对象。格式为&#xff1a; [可见修饰符] 类名(参数表){}例如&#xff1a;public Myclass(){}普通方法&#xff1a; p…

pmml_再访PMML

pmml嗨伙计&#xff01; 从今年年初开始&#xff0c;就有了重新设计Drools PMML模块的计划。 在这篇文章中&#xff0c;我将描述我们将如何处理它&#xff0c;目前的状态&#xff0c;未来发展的想法等&#xff0c;等等……敬请期待&#xff01; 背景 PMML是一个标准&#xff…

java集合——视图与包装器

【0】README 0.1&#xff09; 本文描述转自 core java volume 1&#xff0c; 源代码为原创&#xff0c;旨在理解 java集合——视图与包装器 的相关知识&#xff1b; 0.2&#xff09; for full source code , please visit https://github.com/pacosonTang/core-java-volume/b…

php把表单转为json保存,javascript – 使用jquery将表单数据保存到本地json文件中

我有一个带有一些输入字段的基本表单.我想在提交表单时将表单数据保存到json文件中.json文件中保存数据的格式应如下所示.[{"title":"some text","description":"some text","info":"some text","username&q…

java之包装类与BigInteger、BigDecimal

一、包装类 &#xff08;1&#xff09;包装类与原类型 Integer int 的包装类 Boolean boolean 的包装类 Character char的包装类 Double double的包装类 Float float 的包装类 Byte …

哈希值 哈希表_哈希杰森

哈希值 哈希表我最近写了一个简单的库&#xff0c;可预测地对json进行哈希处理 。 该实用程序基于出色的Jackson Json解析库构建 问题 我需要从相当大的基于json的内容生成的哈希值&#xff0c;以便稍后确定该内容是否发生了更改。 将json视为字符串不是格式化的选项&#xf…

新浪微博搜索php待遇,新浪微博面试

PHP技术基础1、合并数据的函数。我当时回答的是array_merge()&#xff0c;array_combine()(注意与前者的区分);当时面试官告诉我还可以使用 加号()2&#xff0c;判断一个IP地址是否合法。只让说一下思路&#xff1a;(1)用点分割.&#xff0c;$arrIp explore()&#xff1b;(2)判…

java集合——集合与数组间的转换+算法

【0】README 0.1&#xff09; 本文描述转自 core java volume 1&#xff0c; 源代码为原创&#xff0c;旨在理解 java集合——集合与数组间的转换算法 的相关知识&#xff1b; 0.2&#xff09; for full source code , please visit https://github.com/pacosonTang/core-jav…

java之String

一、String类的特性 String对象是不可变的&#xff0c;字符串一旦创建&#xff0c;就不可以改变。二、构造字符串字符串直接量String anew String("字符串直接量"); 字符数组String bnew String(chars);字符串直接量赋值&#xff0c;java把字符串直接量看作String对象…

java记录目录树_Java记录

java记录目录树https://openjdk.java.net/jeps/359概述了Java的新功能&#xff0c;该功能可能会/将在某些将来的Java版本中实现。 JEP建议使用一种新的“类别”&#xff1a;记录。 JEP中的示例内容如下&#xff1a; record Range( int lo, int hi) { public Range { if (lo >…

java集合——遗留的集合

【0】README 0.1&#xff09; 本文描述转自 core java volume 1&#xff0c; 源代码为原创&#xff0c;旨在理解 java集合——遗留的集合 的相关知识&#xff1b; 0.2&#xff09; for full source code , please visit https://github.com/pacosonTang/core-java-volume/blo…

oracle 扩展分区,Oracle 在线扩展分区

在对Oracle分区表操作是&#xff0c;当一个分区已经有了最大的分区&#xff0c;如何再次扩展分区呢&#xff1f;简单的方式是先删除最大分区&#xff0c;然后添加需要的分区在对Oracle分区表操作是&#xff0c;当一个分区已经有了最大的分区&#xff0c;如何再次扩展分区呢&…

java之StringBuider与StringBuffer

一、StringBuider与StringBuffer StringBuider与StringBuffer类比String更加灵活&#xff0c;只要使用字符串的地方&#xff0c;都可以使用StringBuider与StringBuffer类。三者的共同之处都是 final 类&#xff0c;不允许被继承&#xff0c;这主要是从性能和安全性上考虑的&…

织机原理_项目织机

织机原理为什么为什么&#xff1f; Java 8流背后的驱动程序之一是并发编程。 在流管道中&#xff0c;指定要完成的工作&#xff0c;然后任务将自动分配到可用处理器上&#xff1a; var result myData.parallelStream().map(someBusyOperation).reduce(someAssociativeBinOp)…

java集合——java.util.Properties类

【0】README 0.1&#xff09;以下全文转自 &#xff1a;  http://trans.blog.51cto.com/503170/110227/ 【1】认识properties文件 1、 properties文件是一个文本文件2、 properties文件的语法有两种&#xff0c;一种是注释&#xff0c;一种属性配置。 注 释&#xff1a;前…

电力系统潮流计算matlab程序,大神们,求个电力系统潮流计算的matlab程序。

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼ninput(Please input n\n); %n表示系统的节点数d0input(Please input d0\n); %d0表示系统的误差minput(Please inpit m\n); %m表示系统的pq节点的个数p0ones(n-1,1);q0ones(m,1);d1;dpvones(n-1,1);dqvones(m,1);dpzeros(n-1,1);dq…

java之正则表达式

一、匹配字符串String类的matchs方法用的是正则表达式匹配&#xff0c;matchs方法与equals类似。"javac".matchs("javac");"javac".equals("javac");结果都为true。match方法更强大&#xff0c;不仅能匹配固定字符串&#xff0c;还能匹…

gradle配置_Gradle配置

gradle配置在这篇文章中&#xff0c;我们将介绍有关Gradle配置的综合文章。 1.技术 Gradle是用于自动任务管理的开源构建工具。 它基于Apache Ant&#xff0c;Apache Maven的概念。 Gradle是使用Groovy语言开发的。 Gradle是使用基于Groovy的领域特定语言&#xff08;DSL&…