文档章节

java集合框架

l
 linyaohua
发布于 2016/03/31 21:51
字数 1155
阅读 21
收藏 0
点赞 1
评论 0

http://doc.okbase.net/picture/addon/2014/08/20/A192136220-94766.jpg

java的集合框架主要由Set、List、Map、(Queue)接口构成,其中List、Set继承了Collection接口,Map并没有继承Collection接口,而是自成了一套key-value的集合。需要注意的是Collection、Collections是有区别的,Collection是java集合框架里一个重要的抽象接口,该接口下实现了一系列集合类,而Colllections(java.util)则是一个服务于集合框架的一个实现类,或者说是工具类,提供了很多的方法供我们使用,而且不能被实例化,所有方法都已static的方式呈现。

Collection接口

Collection是最基本的集合接口,由它派生了Set、List接口,如果想要实现Collection接口,必须实现两个构造函数,一个是无参构造函数,一个是包含Collection的构造函数。

List接口

List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。

List的实现有两种数组类型、链表类型,对应的实现类分别是(ArrayList、Vector、Stack)、LinkedList。

LinkedList

LinkedList 底层实现是链表类型,所以插入、删除的效率会比数组类型的List要快,但是查询的效率就不及数组类型了。

通过LinkedList我们可以实现单双向队列以及堆栈的数据集合。

而LinkedList本身并没有实现线程同步,所以涉及多线程并发的时候,需要自己控制资源同步的问题,也可以通过

Listlist=Collections.synchronizedList(newLinkedList(...));建立List的同步机制。

ArrayList 底层实现是数组类型,在查询效率上会比链表型要高。

ArrayList没有实现线程同步,所以它也是线程不安全的。ArrayList初始化的时候可以指定或者分配默认长度,如果插入数据超出原有长度是,会按原长度的50%增长数组长度。也可以通过手动控制调整数组长度,增加数组的执行效率,制定数组长度可以通过ensureCapacity实现。

Vector

Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的 Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。

 Stack

Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。

Set接口

HashSet : 它不允许出现重复元素;不保证和政集合中元素的顺序,可以自己做个例子可以看出加入的字段顺序跟遍历出的不一样,允许包含值为null的元素,但最多只能有一个null元素(不允许重复嘛!)。

TreeSet : 可以实现排序等功能的集合,它在讲对象元素添加到集合中时会自动按照某种比较规则将其插入到有序的对象序列中,并保证该集合元素组成按照“升序”排列。

a)(在对大量信息进行检索的时候,TreeSet比AraayList更有效率,能保证在log(n)的时间内完成)。

b)TreeSet是实用树形结构来存储信息的,每个节点都会保存一下指针对象,分别指向父节点,左分支,右分支,相比较而言,ArrayList就是一个含有元素的简单数组了,正因为如此,它占的内存也要比ArrayList多一些。

c)想TreeSet插入元素也比ArrayList要快一些,因为当元素插入到ArrayList的任意位置时,平均每次要移动一半的列表,需要O(n)的时间, 而TreeSet深度遍历查询花费的实施只需要O(log(n))(普遍的都是,set查询慢,插入快,list查询快,插入满, .

LinkedHashSet : 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。



© 著作权归作者所有

共有 人打赏支持
l
粉丝 0
博文 5
码字总数 3006
作品 0
广州

暂无文章

Hbase增删查改工具类

package cn.hljmobile.tagcloud.service.data.repository;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util......

gulf
2分钟前
0
0
详解机器学习中的梯度消失、爆炸原因及其解决方法

前言 本文主要深入介绍深度学习中的梯度消失和梯度爆炸的问题以及解决方案。本文分为三部分,第一部分主要直观的介绍深度学习中为什么使用梯度更新,第二部分主要介绍深度学习中梯度消失及爆...

tantexian
3分钟前
0
0
JavaMail 发送邮件

参考 https://www.cnblogs.com/xdp-gacl/p/4216311.html 发送html格式邮件 package com.example.stumgr;import java.util.Properties;import javax.mail.Message;import javax.mail......

阿豪boy
5分钟前
0
0
Mongodb安装教程

MongoDB是一个基于分布式文件存储的数据库,是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bso...

木筏笔歆
6分钟前
0
0
Hadoop之YARN命令

概述 YARN命令是调用bin/yarn脚本文件,如果运行yarn脚本没有带任何参数,则会打印yarn所有命令的描述。 使用: yarn [--config confdir] COMMAND [--loglevel loglevel] [GENERIC_OPTIONS] [...

舒运
7分钟前
0
0
个推数据统计产品(个数)iOS集成实践

最近业务方给我们部门提了新的需求,希望能一站式统计APP的几项重要数据。这次我们尝试使用的是个推(之前专门做消息推送的)旗下新推出的产品“个数·应用统计”,根据官方的说法,个推的数...

个推
8分钟前
0
0
Git 修改提交的用户名和邮箱名字

在通过git提交代码时,发现提交的用户名是自己mac的账户名,想要修改为其他名字和邮箱。 首先可以通过以下命令查看当前配置下的信息,包括用户名和邮箱: > git config --list 针对单项目的相...

edwardGe
11分钟前
0
0
Object.defineProperty()

Object.defineProperty(obj, props)方法直接在一个对象上定义新的属性或修改现有属性,并返回该对象。 obj 在其上定义或修改属性的对象 props 要定义其可枚举属性或修改的属性描述符的对象 ...

litCabbage
12分钟前
0
0
JEESZ分布式框架--单点登录集成方案(三)

多项目集成单点登录配置 当sso验证完成之后,客户端系统需要接收sso系统返回的结果时,需要定义一个过滤器获取返回结果,然后针对返回结果做相关处理.如果不需要做处理时,此处Filter也可以不...

明理萝
13分钟前
0
1
plisteditor 查看ipa包名及其它信息

1.下载ipa安装包 2.用rar等工具打开 3.将iTunesMetadata.plist文件解压出来 4.用plist Editor 工具打开 或http://www.atool.org/plist_reader.php在线反编译工具 5.在其中中找到softwareVer...

xiaogg
13分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部