element

【java集合类】ArrayList和LinkedList源码分析(jdk1.8)

被刻印的时光 ゝ 提交于 2021-02-06 09:08:23
前言:   ArrayList底层是依靠数组实现的,而LinkedList的实现是含前驱后继节点的双向列表。平时刷题时会经常使用到这两个集合类,这两者的区别在我眼中主要是ArrayList读取节点平均时间复杂度是O(1)级别的,插入删除节点是O(n);LinkedList读取节点时间复杂度是O(n),插入节点是O(1)。   本文记录我对jdk1.8下的ArrayList和LinkedList源码中主要内容的学习。 1、ArrayList 1.1 主要成员变量 1 // 默认容量 2 private static final int DEFAULT_CAPACITY = 10 ; 3 // 空的数组 4 private static final Object[] EMPTY_ELEMENTDATA = {}; 5 6 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; 7 // 数据数组 8 transient Object[] elementData; // non-private to simplify nested class access 9 // 当前大小 10 private int size;   主要成员变量如上,最重要的就是size和elementData

Leetcode 34. Find First and Last Position of Element in Sorted Array

て烟熏妆下的殇ゞ 提交于 2021-02-06 09:03:57
文章作者:Tyan 博客: noahsnail.com | CSDN | 简书 1. Description 2. Solution 解析:最容易想到的就是二分查找,只是要进行一些修改,另一个方法是分别从前往后找以及从后往前找,满足条件就退出。 Version 1 class Solution : def searchRange ( self , nums , target ) : length = len ( nums ) start = - 1 end = - 1 left = 0 right = length - 1 while left <= right : mid = ( left + right ) // 2 if nums [ mid ] > target : right = mid - 1 elif nums [ mid ] < target : left = mid + 1 else : if mid == 0 or nums [ mid - 1 ] < target : start = mid break right = mid - 1 left = 0 right = length - 1 while left <= right : mid = ( left + right ) // 2 if nums [ mid ] > target : right =

【SICP练习】87 练习2.59

℡╲_俬逩灬. 提交于 2021-02-06 07:46:14
练习2.59 我们可以采用迭代来完成这个过程,至于怎么迭代的,接下来就是代码了。 ( define ( union-set set1 set2) ( define ( union-set-iter set1 set2) ( if ( null? input) ( reverse result) ( let ( ( current-element ( car input) ) ( remain-element ( cdr input) ) ( if ( element-of-set? current-element result) ( union-set-iter remain-element result) ( union-set-iter remain-element ( cons current-element result) ) ) ) ) ) ( union-set-iter ( append set1 set2) ‘ () ) ) 感谢访问,希望对您有所帮助。 欢迎关注或收藏、评论或点赞。 为使本文得到斧正和提问,转载请注明出处: http://blog.csdn.net/nomasp 版权声明:本文为 NoMasp柯于旺 原创文章,未经许可严禁转载!欢迎访问我的博客:http://blog.csdn.net/nomasp 来源: oschina 链接: https:/

深入ArrayList源码分析(JDK1.8)

妖精的绣舞 提交于 2021-02-06 07:44:54
深入ArrayList源码分析(JDK1.8) Java 集合系列源码分析文章: 深入TreeMap源码解析(JDK1.8) 深入LinkedHashMap源码解析(JDK1.8) ArrayList源码分析(JDK1.8) 数据结构中有两种存储结构,分别是:顺序存储结构、链式存储结构。在 Java 中,对于这四种结构分别进行实现的类有: 顺序存储结构:ArrayList、Stack 链式存储结构:LinkedList、Queue 这里只对 ArrayList 的源码进行分析, ArrayList 是一个数组队列,相当于 动态数组 。与Java 中的数组相比,它的容量能动态增长。 特点 基本的 ArrayList 常用于随机访问元素,但是在 List 中间插入和移除元素较慢; ArrayList 中的操作不是线程安全的。所以建议在单线程中才使用 ArrayList ,而在多线程中可以选择 Vector 或者 CopyOnWriteArrayList ,建议使用 CopyOnWriteArrayList 。 继承关系 image.png 上面可以看到,ArrayList 实现来四个接口一个抽象类。它继承类 AbstracList 抽象类,实现了 List 、 RandomAccess (随机访问)、 Cloneable (可克隆)、 Serializable (序列化)四个接口

源码分析--ArrayList(JDK1.8)

ぃ、小莉子 提交于 2021-02-06 07:44:08
  ArrayList是开发常用的有序集合,底层为动态数组实现。可以插入null,并允许重复。   下面是源码中一些比较重要属性:   1、ArrayList默认大小10。 /** * Default initial capacity. */ private static final int DEFAULT_CAPACITY = 10;      2、elementData就是真正存放数据的数组。elementData[]本身是动态的,并不是数组的全部空间都会使用,所以加上transient关键词进行修饰,防止自动序列化。 transient Object[] elementData; // non-private to simplify nested class access      3、ArrayList的实际大小。每次进行add或者remove后,都会进行跟踪修订。 /** * The size of the ArrayList (the number of elements it contains). * * @serial */ private int size;   下面分析主要方法:   1、add()方法有两个实现,一种是直接添加,一种是指定index添加。   直接添加代码如下: /** * Appends the specified element to

ArrayList源码分析(JDK1.8)

蹲街弑〆低调 提交于 2021-02-05 18:39:32
概述 ArrayList底层是基于 数组 实现的,并且支持 动态扩容 的动态数组(变长的集合类)。ArrayList允许空值和重复的元素,当向ArrayList中添加元素数量大于其底层数组容量时,会通过 扩容机制 重新生成一个容量更大的数组。另外,由于ArrayList底层数据结构是数组,所以保证了在O(1)复杂度下完成随机查找操作。ArrayList是非线程安全的,在并发环境下,多个线程同时操作ArrayList会引发不可预知的错误。 从上面的类图可以看出,ArrayList实现了4个接口和继承了1个抽象类,分别是: List接口:主要提供了数组的添加、删除、修改、迭代遍历等操作; Cloneable接口:标识克隆操作; Serializable接口:标识可序列列化操作; RandomAccess接口:标识可随机访问操作; 继承AbstractList抽象类,主要提供迭代遍历相关操作。 属性 ArrayList的属性比较少,只有两个属性:elementData和size。 1 private static final int DEFAULT_CAPACITY = 10; 2 3 private static final Object[] EMPTY_ELEMENTDATA = {}; 4 5 private static final Object[]

vue中使用element(菜鸟教程)

会有一股神秘感。 提交于 2021-02-05 14:47:44
前言: 在我们的vue项目中可供引入的框架是很多的,这里分享下在vue中使用element-ui的框架 element-ui官网入口 实现步骤: 一、引入 element-ui 方法1:安装 node 包 cnpm i element-ui --save 方法2: cdn 引入 <!-- 引入样式 --> <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> <!-- 引入组件库 --> <script src="https://unpkg.com/element-ui/lib/index.js"></script> 二、 main.js 中注册(如果上面使用的是cdn引入则没有这一步) import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI); 三、到这一步 element-ui 应该配置的文件我们都引入成功了,下来该使用了 1、打开官网地址,参照下面的 4个小步骤 可以拿到想要的效果和代码 2、实际练习,以 el-button 按钮作案例,找到 Button ,然后找到 基础用法 ,点击 粉色圈 ,打开源代码 3

GStreamer系列-基础概念

别等时光非礼了梦想. 提交于 2021-02-05 06:05:56
目录: 一、什么是 GStreamer 二、GStreamer 架构 1. app 层 2. core framework层 3. plugin 层 三、GStreamer基础概念 1. element 和 pipeline 2. pads 和 capabilities 3. bins 4. bus 一、什么是 GStreamer? 参考: What is GStreamer [1] cnblogs-John [2] 一个 C 语言编写的支持 Windows/Linux/Android/iOS 的跨平台的多媒体框架; 几乎可用来开发任何与多媒体相关的应用,例如媒体播放器、流媒体服务器、音视频编辑应用等; 基于 plugin (插件)和 pipeline (管道),这里说的pipeline跟Linux系统下的管道是同一个概念,UNIX系统里经久不衰的设计哲学; plugin 负责实现音视频传输协议、音视频输入输出源、音视频编解转码等真实的媒体处理功能,而 plugin 之间通过 pipeline 关联在一起, pipeline 负责将上一个 plugin 的数据流(data flow) 传输给下一个 plugin ,最终形成一个完整的多媒体处理应用; 狭义上的 GStreamer 是指 GStreamer core,它负责统筹管理 plugin、data flow、media

译——欢迎来到人工智能驱动的自动化世界——人工智能自动化测试应用

家住魔仙堡 提交于 2021-02-04 21:01:14
顾翔老师的《软件测试技术实战设计、工具及管理》网上购买地址: https://item.jd.com/34295655089.html 《基于Django的电子商务网站》网上购买地址: https://item.jd.com/12082665.html 店铺二维码: 来源:https://www.testwo.com Welcome to the world of automation powered by AI 欢迎来到人工智能驱动的自动化世界 With one API call, you can add the power of AI to your mobile test automation. The team at test.ai has teamed up with Jonathan Lipps , the lead contributor of Appium and founder of Cloud Grey , to add a bit of AI to Appium. The AI finds common elements in mobile apps such as search text boxes, login buttons, etc., so test developers don’t have to worry about all those

滑动窗口的中位数 · Sliding Window Median

人盡茶涼 提交于 2021-02-04 17:49:00
[抄题]: 给定一个包含 n 个整数的数组,和一个大小为 k 的滑动窗口,从左到右在数组中滑动这个窗口,找到数组中每个窗口内的中位数。(如果数组个数是偶数,则在该窗口排序数字后,返回第 N/2 个数字。) 对于数组 [1,2,7,8,5] , 滑动大小 k = 3 的窗口时,返回 [2,7,7] 最初,窗口的数组是这样的: [ | 1,2,7 | ,8,5] , 返回中位数 2 ; 接着,窗口继续向前滑动一次。 [1, | 2,7,8 | ,5] , 返回中位数 7 ; 接着,窗口继续向前滑动一次。 [1,2, | 7,8,5 | ] , 返回中位数 7 ; [暴力解法]: 时间分析: 空间分析: [思维问题]: 不理解两个heap和窗口的大小关系:把窗口容量全扔进来,具体分到哪个格子另当别论 体会到了treemap相对于heap的优越性:想 romove 哪个点是随便的。注意接口、实现都不是PQ,是 treeset 而且树状的题想想里面装的是 node 还是数字 [一句话思路]: 窗口 移动就是加一个元素、减一个元素,用俩函数实现,所以可以放在maxheap minheap中 [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入): [画图]: [一刷]: 窗口满了之后romove第一个点,i - k + 1,不是第i个点,写习惯了就错了