`

Collection接口的解析

 
阅读更多


集合类存放于java.util包中。
集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。
集合类型主要有3种:set(集)、list(列表)和map(映射)。

1、List(单列元素的集合)
列表的主要特征是其对象以线性方式(数组方式)存储,有先后顺序的集合,每次加入的对象就像火车站买票有排队顺序一样,按先来后到的顺序排序。列表通常允许重复的元素。更正式地说,列表通常允许满足 e1.equals(e2) 的元素对 e1 和 e2,并且如果列表本身允许 null 元素的话,通常它们允许多个 null 元素。
列表的实现类主要有:数组(ArrayList)、链表(LinkedList)、向量(Vector)、堆栈(Stack)。

(1)ArrayList:List 接口的大小可变数组的实现。允许所有元素(包括 null)。每个实例都有一个容量,至少等于列表的大小。添加元素后,其容量也自动增长,每次默认增加原来的0.5倍。插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢。此实现不是同步的

(2)LinkedList:List 接口的链接列表实现。允许所有元素(包括 null)。使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数据较快索引数据慢。此类实现 Queue 接口,在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将LinkedList用作堆栈、队列或双端队列(deque)。此实现不是同步的

(3)Vector:Vector 类可以实现可增长的对象数组。允许所有元素(包括 null)。与数组一样,可以使用整数索引访问组件。但是Vector 的大小可以根据需要增大或缩小,Vector默认增长为原来两倍。此实现是同步的(线程安全)

2、Set(单列元素的集合)
集(set)是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合中,就像往口袋里放东西。对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象。 更正式地说,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。当增加相同的元素时,不会改变原有 set,并返回false。
集合的实现类主要有:TreeSet(实现排序功能)、HashSet。

(1)HashSet:此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用一个(最多一个)null 元素此实现不是同步的。对象类中必须override Object类中的两个方法(注意入参类型必须为Object),来确保对象元素的唯一性。
public int hashCode();
public boolean equals(Object obj);


(2)TreeSet:基于 TreeMap 的 NavigableSet 实现。使用元素的自然顺序对元素进行排序;或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法;或者根据set中对象类实现的Copmarable类的CompareTo方法比较,(1,-1,0)来确保对象元素的唯一性,为0表示对象相同,否则不同。不允许有 null 元素此实现不是同步的

3、Map(双列元素的集合)
将键映射到值的对象,此接口代替 Dictionary 类,后者完全是一个抽象类,而不是一个接口。每次存储时,要存储一对key/value,不能存储重复的key,但允许有重复value,每个key只能对应唯一一个value值

(1)TreeMap:该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。此实现不是同步的

(2)HashMap:基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键(只能有一个key为null,value为null的可以有多个)。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。此实现不是同步的

(3)HashTable:不允许使用 null 值和 null 键(key、value都不能为null)。此实现是同步的(线程安全)

总结:
1、ArrayList与Vector的区别:
相同点:都实现了List接口,都是有序集合,可以按位置索引号取出某个元素,数据元素允许重复,允许是 null 值。是单列元素集合。
ArrayList:线程不安全(不同步),效率高(由于不执行同步),扩容时默认增加原来的0.5倍。
Vector:线程安全(同步),效率低,扩容时默认增长原来的一倍。

2、HashMap与HashTable的区别:
相同点:都实现了Map接口,是双列元素集合,key值不可以重复,value值可以重复。
HashMap:允许将null作为一个entry的key或者value(只能有一个key为null,value为null的可以有多个),线程不安全(不同步),效率高(由于不执行同步)。
HashTable:不允许将null作为一个entry的key或者value(key、value都不能为null),线程安全(同步),效率低。

3、List、Set、Map的区别:
List:单列集合,允许null元素和重复元素,是有序的集合,通过索引进行数据的访问。
Set:单列集合,不允许有重复元素(Hashset允许有null,TreeSet不允许有null),通过对象的应用来访问元素,是无序的集合(TreeSet通过对象类的compareTo方法来排序)。
Map:双列集合,不允许有重复的key值,允许有重复的value值。
分享到:
评论

相关推荐

    Postman for macOS (x64).zip

    接口响应数据的解析 接口管理(Collection) 批量执行接口请求 日志调试 断言 变量 请求前置脚本 接口关联 常见的返回值获取 便捷功能 快速填写查询参数 快速填写请求头信息 快速实现添加一个请求 如何继承集合认证 ...

    Postman-win64-Setup.rar

    接口响应数据的解析 接口管理(Collection) 批量执行接口请求 日志调试 断言 变量 请求前置脚本 接口关联 常见的返回值获取 便捷功能 快速填写查询参数 快速填写请求头信息 快速实现添加一个请求 如何继承集合认证 ...

    Log 这是一个Android 轻量级简单易用的Log组件

    自定义解析器,当输入类型无法满足需求时或无法解析时,可实现Parser接口重写方法来添加自定义解析器 支持添加拦截器,添加拦截器后它会在最终打印输出前进行拦截处理,可以对日志信息进行重构处理 支持添加全局回...

    ampersand-jsonapi-collection:兼容JSON-API的AmpersandJS集合

    正在安装npm install ampersand-jsonapi-collectionAPI参考除非如下所述,否则AmpersandJSONAPICollection具有与和相同的接口。 为了确保这一点,AmpersandJSONAPICollection通过了针对AmpersandRestCollection...

    java api最新7.0

    java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...

    JAVA_API1.6文档(中文)

    java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...

    JsonCollectionParser:JSON集合的流解析器

    该软件包与和代码样式兼容,并支持对消息接口的解析。 如果您发现合规性疏忽,请通过拉取请求发送补丁。 安装 您将需要来安装软件包 composer require maxakawizard/json-collection-parser: ~ 1.0 输入数据格式 ...

    安卓毕业设计app项目源码6-android-interviewer:安卓面试官

    list是有序collection接口 实现: arraylist是基于数组实现list接口的 线程不同步   vector也是实现list的接口 他的特点在与线程同步 在函数中添加了synchronized实现 所以性能上 比arraylist低 因为基于数组实现 ...

    python 动态迁移solr数据过程解析

    前言 上项目的时候,遇见一次需求,需要把在线的 其中一个 collection 里面的数据迁移到另外一个collection下,...一、使用http的接口先进行查询 使用如下格式查询: 其中:collection_name 是你查询的collection的名

    java面试宝典

    109、以下哪个不是Collection的子接口? 25 110、.BufferedReader的父类是以下哪个? 25 112、div与span区别? 25 113、html的框架是什么? 25 114、alert怎样换行? 25 115、什么情况用HTML控件,什么情况用WEB控件,...

    Android体育新闻app课程设计

    该app通过网络获取到网易体育新闻提供的api数据接口并解析,最终呈现到新闻列表中给用户浏览,用户可以点击想要查看的文章跳转到该文章的内容页面并收藏文章。用户的个人信息及新闻的收藏信息都存储在Android的...

    [Java参考文档].JDK_API 1.6

    java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...

    JavaAPI1.6中文chm文档 part1

    java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...

    JDK_1_6 API

    java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...

    JavaAPI中文chm文档 part2

    java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...

    [Java参考文档]

    java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...

    Java 1.6 API 中文 New

    java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...

    java jdk-api-1.6 中文 chmd

    java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...

Global site tag (gtag.js) - Google Analytics