Java集合框架综述

转载自  Java集合框架综述

 

集合框架(collections framework)

首先要明确,集合代表了一组对象(和数组一样,但数组长度不能变,而集合能)。Java中的集合框架定义了一套规范,用来表示、操作集合,使具体操作与实现细节解耦。

其实说白了,可以把一个集合看成一个微型数据库,操作不外乎“增删改查”四种操作,我们在学习使用一个具体的集合类时,需要把这四个操作的时空复杂度弄清楚了,基本上就可以说掌握这个类了。

设计理念

主要理念用一句话概括就是:提供一套“小而美”的API。API需要对程序员友好,增加新功能时能让程序员们快速上手。
为了保证核心接口足够小,最顶层的接口(也就是Collection与Map接口)并不会区分该集合是否可变(mutability),是否可更改(modifiability),是否可改变大小(resizability)这些细微的差别。相反,一些操作是可选的,在实现时抛出UnsupportedOperationException即可表示集合不支持该操作。集合的实现者必须在文档中声明那些操作是不支持的。

为了保证最顶层的核心接口足够小,它们只能包含下面情况下的方法:

  1. 基本操作,像之前说的“增删改查”
  2. There is a compelling performance reason why an important implementation would want to override it.

此外,所有的集合类都必须能提供友好的交互操作,这包括没有继承Collection类的数组对象。因此,框架提供一套方法,让集合类与数组可以相互转化,并且可以把Map看作成集合。

两大基类Collection与Map

在集合框架的类继承体系中,最顶层有两个接口:

  • Collection表示一组纯数据
  • Map表示一组key-value对

一般继承自CollectionMap的集合类,会提供两个“标准”的构造函数:

  • 没有参数的构造函数,创建一个空的集合类
  • 有一个类型与基类(CollectionMap)相同的构造函数,创建一个与给定参数具有相同元素的新集合类

因为接口中不能包含构造函数,所以上面这两个构造函数的约定并不是强制性的,但是在目前的集合框架中,所有继承自CollectionMap的子类都遵循这一约定。

Collection

java-collection-hierarchy

如上图所示,Collection类主要有三个接口:

  • Set表示不允许有重复元素的集合(A collection that contains no duplicate elements)
  • List表示允许有重复元素的集合(An ordered collection (also known as a sequence))
  • Queue JDK1.5新增,与上面两个集合类主要是的区分在于Queue主要用于存储数据,而不是处理数据。(A collection designed for holding elements prior to processing.)

Map

MapClassHierarchy

Map并不是一个真正意义上的集合(are not true collections),但是这个接口提供了三种“集合视角”(collection views ),使得可以像操作集合一样操作它们,具体如下:

  • 把map的内容看作key的集合(map’s contents to be viewed as a set of keys)
  • 把map的内容看作value的集合(map’s contents to be viewed as a collection of values)
  • 把map的内容看作key-value映射的集合(map’s contents to be viewed as a set of key-value mappings)

集合的实现(Collection Implementations)

实现集合接口的类一般遵循<实现方式>+<接口>的命名方式,通用的集合实现类如下表:

InterfaceHash TableResizable ArrayBalanced TreeLinked ListHash Table + Linked List
SetHashSet TreeSet LinkedHashSet
List ArrayList LinkedList 
Deque ArrayDeque LinkedList 
MapHashMap TreeMap LinkedHashMap

总结

今天先开个头,后面会陆陆续续来一系列干货,Stay Tuned。

需要说明一点,今后所有源码分析都将基于Oracle JDK 1.7.0_71,请知悉。

$ java -version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)

参考

  • http://docs.oracle.com/javase/7/docs/technotes/guides/collections/overview.html
  • https://en.wikipedia.org/wiki/Java_collections_framework

 

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

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

相关文章

vue项目没有启动成功的原因之一

删除mould。。。本地从新安装

RabbitMQ 高可用集群搭建及电商平台使用经验总结

面向EDA&#xff08;事件驱动架构&#xff09;的方式来设计你的消息AMQP routing key的设计RabbitMQ cluster搭建Mirror queue policy设置两个不错的RabbitMQ plugin 大型应用插件(Sharding、Rederation)Queue镜像失败手动同步各集群配置同步方式&#xff08;RabbitMQ export\i…

java实现遍历树形菜单方法——service层

Service接口&#xff1a; /** * Title: IVoteTreeService.java * Package org.Service * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-5-6 下午10:42:10 * version V1.0 */ package org.Service;import java.util.Li…

谷歌浏览器如何阻止弹窗广告?右下角弹窗一个接一个的弹出 每隔几分钟又来一波 怎么屏蔽?

谷歌浏览器如何阻止弹窗广告&#xff1f;右下角弹窗一个接一个的弹出 每隔几分钟又来一波 怎么屏蔽&#xff1f; 作者&#xff1a;知乎用户 链接&#xff1a;https://www.zhihu.com/question/319190736/answer/645314963 来源&#xff1a;知乎 著作权归作者所有。商业转载请联…

如何线程安全的使用HashMap

转载自 如何线程安全的使用HashMap 在周二面试时&#xff0c;一面的面试官有问到 HashMap 是否是线程安全的&#xff0c;如何在线程安全的前提下使用 HashMap,其实也就是 HashMap&#xff0c;Hashtable&#xff0c;ConcurrentHashMap 和 synchronized Map 的原理和区别。当时有…

脚本可以放在html外,关于把script脚本放在html结束标签外的运行结果???

杨__羊羊在哪里放置 JavaScript 代码&#xff1f;通常情况下&#xff0c;JavaScript 代码是和 HTML 代码一起使用的&#xff0c;可以将 JavaScript 代码放置在 HTML 文档的任何地方。但放置的地方&#xff0c;会对 JavaScript 代码的正常执行会有一定影响&#xff0c;具体如下所…

后端解决跨域问题---SpringBoot

解决跨域问题 在后端解决跨域问题&#xff1a; 新建配置类 config/ CrosConfig.java /*** 解决跨域问题*/ Configuration public class CrosConfig implements WebMvcConfigurer {Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/*…

java实现遍历树形菜单方法——HibernateUtil实现

/** * Title: HibernateUtil.java * Package org.web * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-5-6 下午1:41:30 * version V1.0 */ package org.util;import org.hibernate.Session; import org.hibernate.cfg…

用.net core 写后端—— c++外的另一种选择?

一、.net core简介 &#xff08;1&#xff09;.net是什么 .net实际是遵守同一个标准&#xff08;ECMA&#xff09;的多种不同实现&#xff0c;如.net Framework、Mono、和较新的.netcore。C#是.net支持的其中一种语言&#xff0c;理论上任何遵循公共语言规范&#xff08;CLS&am…

16-就业课(2.1)-应用容器-Docker

https://www.jianshu.com/writer#/notebooks/46975630/notes/74245796 01-今日内容.mp4 02-初始docker-docker概述.mp4 03-初始docker-docker安装.mp4 04-初始docker-docker架构.mp4 05-初始docker-配置镜像加速器.mp4 https://www.jianshu.com/writer#/notebooks/4697563…

如何使ArrayList 线程安全

转载自 如何使ArrayList 线程安全 ArrayList是线程不安全的&#xff0c;轻量级的。如何使ArrayList线程安全&#xff1f; 1、继承Arraylist&#xff0c;然后重写或按需求编写自己的方法&#xff0c;这些方法要写成synchronized&#xff0c;在这些synchronized的方法中调用Arr…

百度地图描绘轨迹html,百度地图API 绘制轨迹历史

DOCTYPE html>2 3 4 5 6 7 body, html{width:100%;height:100%;overflow:hidden;margin:0;font-family:"微软雅黑";}8 #allmap{width:100%;height:100%;overflow:hidden;margin:0;font-family:"微软雅黑";}9 style>10 script>11 script>1213 车…

java实现遍历树形菜单方法——TreeAction实现

/** * Title: TreeAction.java * Package org.web * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-5-6 下午11:27:32 * version V1.0 */ package org.web;import net.sf.json.JSONArray; import net.sf.json.JSONObje…

传统请求风格 VS RestFul 风格

RestFul 风格 概念 Restful就是一个资源定位及资源操作的风格。不是标准也不是协议&#xff0c;只是一种风格。基于这个风格设计的软件可以更简洁&#xff0c;更有层次&#xff0c;更易于实现缓存等机制。 功能 资源&#xff1a;互联网所有的事物都可以被抽象为资源 资源操…

《微软开源跨平台移动开发实践》团购通知

【新书推荐】《微软开源跨平台移动开发实践》带你走近微软开源开源跨平台技术 大家的响应非常积极&#xff0c;接近400位同学想团购。 这两天通过作者李争的努力&#xff0c;为大家争取到了非常实惠的价格&#xff0c;投票结果看不到具体是谁参与了投票&#xff0c;请参与投票的…

java实现遍历树形菜单方法——OpenSessionView实现

/** * Title: OpenSessionView.java * Package org.util * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-5-6 下午1:48:25 * version V1.0 */ package org.web;import java.io.IOException;import javax.servlet.Filt…

学生用计算机说明方法,15.文中多处运用了作比较的说明方法.请任选一例.说说运用这种方法的作用. 例子: 作用:...

一、积累与运用(31分)1&#xff0e; 要求间架结构正确&#xff0c;书写规范、端正、整洁&#xff0c;否则扣分。2&#xff0e; 河改为何 &#xff1b;播改为拨。3&#xff0e;B4&#xff0e;要求符合文意&#xff0c;语言通顺。5&#xff0e;(1)示例&#xff1a;文学?真诚?…

java提高篇(二四)—–HashSet

转载自 java提高篇&#xff08;二四&#xff09;—–HashSet 在前篇博文中&#xff08;java提高篇&#xff08;二三&#xff09;-----HashMap&#xff09;详细讲解了HashMap的实现过程&#xff0c;对于HashSet而言&#xff0c;它是基于HashMap来实现的&#xff0c;底层采用Has…

$router VS $route

$router是一个VueRouter的实例 可以导航到不同的路由里 $route是$router跳转到的当前一个对象&#xff0c;里面包含该对象的path、query、name 、params 用法 &#xff1a; this.$router.push() 跳转到指定的url 会向history栈添加一个记录 点击后退会返回上一页面 1、this.…

Invalid character found in the request target. The valid characters are defi

解决Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 问题 ApiOperation(value "根据排污口类型获取所有企业排污口信息和经度和纬度", notes "获取所有企业排污口信息和经度和纬度") PostMappin…