集合类存放于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值。
分享到:
相关推荐
接口响应数据的解析 接口管理(Collection) 批量执行接口请求 日志调试 断言 变量 请求前置脚本 接口关联 常见的返回值获取 便捷功能 快速填写查询参数 快速填写请求头信息 快速实现添加一个请求 如何继承集合认证 ...
接口响应数据的解析 接口管理(Collection) 批量执行接口请求 日志调试 断言 变量 请求前置脚本 接口关联 常见的返回值获取 便捷功能 快速填写查询参数 快速填写请求头信息 快速实现添加一个请求 如何继承集合认证 ...
自定义解析器,当输入类型无法满足需求时或无法解析时,可实现Parser接口重写方法来添加自定义解析器 支持添加拦截器,添加拦截器后它会在最终打印输出前进行拦截处理,可以对日志信息进行重构处理 支持添加全局回...
正在安装npm install ampersand-jsonapi-collectionAPI参考除非如下所述,否则AmpersandJSONAPICollection具有与和相同的接口。 为了确保这一点,AmpersandJSONAPICollection通过了针对AmpersandRestCollection...
java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...
java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...
该软件包与和代码样式兼容,并支持对消息接口的解析。 如果您发现合规性疏忽,请通过拉取请求发送补丁。 安装 您将需要来安装软件包 composer require maxakawizard/json-collection-parser: ~ 1.0 输入数据格式 ...
list是有序collection接口 实现: arraylist是基于数组实现list接口的 线程不同步 vector也是实现list的接口 他的特点在与线程同步 在函数中添加了synchronized实现 所以性能上 比arraylist低 因为基于数组实现 ...
前言 上项目的时候,遇见一次需求,需要把在线的 其中一个 collection 里面的数据迁移到另外一个collection下,...一、使用http的接口先进行查询 使用如下格式查询: 其中:collection_name 是你查询的collection的名
109、以下哪个不是Collection的子接口? 25 110、.BufferedReader的父类是以下哪个? 25 112、div与span区别? 25 113、html的框架是什么? 25 114、alert怎样换行? 25 115、什么情况用HTML控件,什么情况用WEB控件,...
该app通过网络获取到网易体育新闻提供的api数据接口并解析,最终呈现到新闻列表中给用户浏览,用户可以点击想要查看的文章跳转到该文章的内容页面并收藏文章。用户的个人信息及新闻的收藏信息都存储在Android的...
java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...
java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...
java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...
java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...
java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...
java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...
java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 ...