首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java 注解

本文参照学习: 感谢大佬~ 个人源码地址:https://gitee.com/WSM540 注解 前言: 框架等于:注解 + 反射 + 设计模式~ JDK 5.0 开始, Java 增加了对元数据的支持...Annotation 可以像修饰符一样被使用: 用于修饰包,类, 构造器, 方 法, 成员变量, 参数, 局部变量的声明 为什么要引用注解: 使用【注解】之前: xml 是被广泛的应用于描述元数据,...JDK是向下兼容的,不然每次更新一些老项目如果不符合就会出错,就不好了~ 场景: 如果你的项目中有一个,你写的方法,突然一个大佬也写了一个更好的,你又不想删除曾经的方法 都是手敲的多少有点舍不得 可以使用该...;i++){ //输出注解集合的值!...;i++){ //输出注解集合的值!

7810

ArrayList源码解析

第二种方式是编码规范的要求我们这么写的,传入一个初始化的容量。这么做的目的主要是防止向集合中添加数据时,由于集合扩容导致的性能下降问题。...当我们向集合中添加元素的时候,集合首先会判断当前的数组容量能否容纳得下所需添加的元素,如果容纳不下,就会触发自动扩容机制。...而size只的是集合中存入的元素个数。 什么意思呢,比如我capacity是10,就代表我的集合中数组的长度是10个,然后我向集合中add一个元素,那么size就是1。...从jdk8开始,集合不是你new完了就把空间创建出来的,从代码也可以看出来,我们new完的集合(0参和无参),实际上就给了一个空数组,只有当我们向集合中添加元素的时候,才会根据长度初始化数组的长度。...也就是当我们向集合中添加元素的时候,如果元素个数小于10,那么这个结果就是10, 如果元素个数大于10了,就取当前的最大值。

30210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    为什么 HashMap 要用 h^(h >>>16) 计算hash值?槽位数必须是 2^n?

    大家好,我是一航! 昨天中午,一位粉丝朋友在微信私信我,问:为啥HashMap的hash值计算格式是这样:(h = key.hashCode()) ^ (h >>> 16)?...为什么槽位数(数组长度)必须是2^n? HashMap能不能用空对象(null)作为key?...,这样就会导致,key的hash值是低位相同,高位不同的话,计算出来的槽位下标都是同一个,大大增加了碰撞的几率; 但如果使用h ^ (h >>> 16),将高位参与到低位的运算,整个随机性就大大增加了;...问题二:为什么槽位数(数组长度)必须是2^n?...: (h = key.hashCode()) ^ (h >>> ); } 当(key == null)时得到的hash值为0,带入到槽位计算公式(n - 1) & hash,空对象是保存的槽位是:0;

    1.1K10

    从源码角度解读Java Set接口底层实现原理

    咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!...当我们向HashSet中添加元素时,首先会对元素进行哈希,并通过哈希值来确定元素在数组中的位置。...每个节点都有一个额外的颜色属性,只能是红色或黑色。红黑树的基本操作包括插入、删除和查找。当我们向TreeSet中添加元素时,它会根据元素的大小来将元素添加到树中的合适位置。...类代码方法介绍HashSetadd(E e):向集合中添加元素;clear():清空集合中所有元素;contains(Object o):判断集合中是否存在指定的元素;isEmpty():判断集合是否为空...这段代码演示了如何使用Java中的Set接口和HashSet类。具体来说,代码实现了:1.创建一个HashSet对象。2.向集合中添加元素。3.打印出集合中的元素个数。4.判断集合是否为空。

    36712

    Python 元组和集合

    # Python 元组和集合 # 什么是元组 元组 Python内置的数据结构之一,是一个不可变序列 不可变序列与可变序列 不可变序列:字符串、元组 不变可变序列:没有增、删、改的操作 可变序列...# 为什么要将元组设计成不可变序列 为什么要将元组设置成不可变序列 在多任务环境下,同时操作对象时不需要加锁 因此,在程序中尽量使用不可变序列 注意事项:元组中存储的是对象的引用 如果元组中对象本身不可变对象...'''由于[20,30]是列表,而类表是可变序列,所以可以向列表中添加元素,而列表的内存地址不变''' t[1].append(100) #向类表中添加元素 print(t,id(t[1]))...集合元素的新增操作 调用**add()**方法,一次添中一个元素 调用update()方法至少添加一个元素 集合元素的删除操作 调用**remove()**方法,一次删除一个指定元素,如果指定的元素不存在抛出...=**进行判断 一个集合是否是另一个集合的子集 可以调用方法issubset进行判断 B是A的子集 两个集合是否没有交集 可以调用方法isdisjoint进行判断 """ @Author :frx

    50320

    2017年5月iOS招人心得(附面试题)

    如果是集合是内容复制的话,集合里面的元素也是内容复制么? 为什么IBOutlet修饰的UIView也适用weak关键字? nonatomic和atomic的区别?atomic是绝对的线程安全么?...Runtime objc在向一个对象发送消息时,发生了什么? 什么时候会报unrecognized selector错误?iOS有哪些机制来避免走到这一步? 能否向编译后得到的类中增加实例变量?...内部是如何实现的?它为什么会覆盖掉原来的方法? 运行时能增加成员变量么?能增加属性么?如果能,如何增加?如果不能,为什么? objc中向一个nil对象发送消息将会发生什么?...知不知道集合操作符,能不能访问私有属性,能不能直接访问_ivar) 项目 有已经上线的项目么? 项目里哪个部分是你完成的?(找一个亮点问一下如何实现的) 开发过程中遇到过什么困难,是如何解决的?...不过其中一位面试通过者是有github账号的,并且有几个小项目,印象非常好,加了不少分。

    57340

    为什么我总学不好TS?

    上述历程我反复经历了两次。痛定思痛,决定系统学一遍TS。 经过这次系统学习,我终于明白「我为什么总学不好TS」。希望这篇文章对和我有同样经历的同学有帮助。...当我们只把TS看作JS超集时,会忽略「TS本身就是一门语言」这一事实。...B; // 1 | 2 TS的语法规则被称为「结构化类型系统」,与JS类比如下: 在TS中,「类型」与「结构化类型系统」的关系可以用我们中学学到的「集合」的概念来类比,其中: 「类型」是一类值的集合...,比如number是数字字面量的集合,interface A是满足接口A规范的对象的集合 「结构化类型系统」是集合之间「兼容性判断」的规则,比如怎么判断交集、怎么判断并集、怎么判断差集?...所以,当我们想深入使用TS时,必然会触碰TS语言本身的规则,此时我们需要从TS出发学习。 只有这样,才能真的学懂、用好TS。

    33810

    Objective—C语言的新魅力——Nullability、泛型集合与类型延拓

    在OC中,以前是没有这样的功能的,因此我们在开发中会经常遇到因为某个函数应该返回实例而返回了空导致的崩溃。...如果仅仅是在返回值中给开发者一些提示,你可能觉得应用并不大,是的,对开发者最大的帮助是这一特性可以用于函数的参数中,这样我们在调用函数时起到的提示作用,将是非常重要的,越是多人合作的项目,作用也越大。...例如: -(void)setValue:(NSNumber * _Nonnull )number{      } 我们在调用函数时,如果传入了空值,编译器会给我们警告: ?...三、泛型集合的支持         这一特性和Nullability一样,只作用于编译期,是为我们开发者服务的另一重要特性。...所以,当我看到Xcode7中的集合类型时,我着实兴奋了一下。

    1.1K30

    高级Java都这样优雅处理空值

    有时候,更可怕的是系统因为这些空值的情况,会抛出空指针异常,导致业务系统发生问题。 此篇文章,我总结了几种关于空值的处理手法,希望对读者有帮助。...空集合返回值 :如果有集合这样返回值时,除非真的有说服自己的理由,否则,一定要返回空集合,而不是 null Optional: 如果你的代码是 jdk8,就引入它!...如果不是,则使用 Guava 的 Optional, 或者升级 jdk 版本!它很大程度的能增加了接口的可读性! jsr 303: 如果新的项目正在开发,不防加上这个试试!一定有一种特别爽的感觉!...jsr 305: 如果老的项目在你的手上,你可以尝试的加上这种文档型注解,有助于你后期的重构,或者新功能增加了,对于老接口的理解!...当我们看到这个方法的时候,会觉得有一些歧义: “如果 username 是 absent, 是返回空集合吗?还是返回全部的用户数据集合?”

    1.7K30

    如何优雅地根治null值引起的Bug!

    尤其是对接口的抽象,它在设计和开发中占很大的比重,我们在开发时希望尽量面向接口编程。...空集合返回值 :如果有集合这样返回值时,除非真的有说服自己的理由,否则,一定要返回空集合,而不是null Optional: 如果你的代码是jdk8,就引入它!...如果不是,则使用Guava的Optional,或者升级jdk版本!它很大程度的能增加了接口的可读性! jsr 303: 如果新的项目正在开发,不防加上这个试试!一定有一种特别爽的感觉!...jsr 305: 如果老的项目在你的手上,你可以尝试的加上这种文档型注解,有助于你后期的重构,或者新功能增加了,对于老接口的理解!...当我们看到这个方法的时候,会觉得有一些歧义: “如果username是absent,是返回空集合吗?还是返回全部的用户数据集合?”

    88710

    JavaScript 编程精解 中文第三版 七、项目:机器人

    图是节点(村里的地点)与他们之间的边(道路)的集合。 这张图将成为我们的机器人在其中移动的世界。 字符串数组并不易于处理。 我们感兴趣的是,我们可以从特定地点到达的目的地。...机器人的当前位置和未送达的包裹集合,其中每个都拥有当前位置和目标地址。这样就够了。 当我们到达新地点时,让我们这样做,在机器人移动时不会改变这种状态,而是在移动之后为当前情况计算一个新状态。...为什么我不想改变对象?...因为它帮助我理解我的程序。 这又是关于复杂性管理。 当我的系统中的对象是固定的,稳定的东西时,我可以孤立地考虑操作它们 - 从给定的起始状态移动到爱丽丝的房子,始终会产生相同的新状态。...如果其中之一是目标,则可以返回完成的路线。 否则,如果我们以前没有看过这个地方,就会在列表中添加一个新项目。

    86360

    Java集合--阻塞队列(引言)

    5.7 Queue并发集合 之前,我们介绍了Queue队列。对于队列的相关知识,你应该有了一个大概的了解! 在本篇中,我们会继续深入学习,来了解下线程安全的队列集合!...其中,阻塞队列典型的实现类是BlockingQueue(接口)--ArrayBlockingQueue实现类,而非阻塞队列典型的实现类就是ConcurrentLinkedQuue。...阻塞,顾名思义:当我们的生产者向队列中生产数据时,若队列已满,那么生产线程会暂停下来,直到队列中有可以存放数据的地方,才会继续工作;而当我们的消费者向队列中获取数据时,若队列为空,则消费者线程会暂停下来...直白的来说:队列满时,生产线程停止生产;队列空时,消费线程停止活动。 阻塞队列怎么进行阻塞操作 对于队列(集合)来说,最常用的操作,无疑只有两类,一种是添加操作,一种是移除操作!...remove():队列空时,抛出异常; poll():队列空时,返回null; take():队列空时,线程一直阻塞; poll(time,unit):队列空时,线程被阻塞一段时间,超时则直接返回

    1K120

    苏炳添博士论文研究自己,奥运学术两兼顾,还是暨大副教授,网友:真正的Run数据

    萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI “我为什么能跑这么快?” 这可不是调侃,而是“亚洲飞人”苏炳添的正经博士论文!...在备战东京奥运会的同时,苏炳添写下了这篇论文,详细介绍了自己这些年的“备赛经验”。 “我是如何越跑越好的” 整体论文是一篇综述,简要概括了我国男子100m短跑的发展历程、进步原因、展望和启示。...其中,10.16秒(2011年)、9.99秒(2015年)和9.91秒(2018年)的最好成绩都是苏炳添跑出来的。...事实证明,这样的科学化训练确实取得了非常不错的效果,在训练前后,苏炳添的身体素质、技术能力得到了极大提升: 当然,在苏炳添看来,这也只是取得成功的原因之一,此外良性团队竞争、用接力项目促进单项训练、参考国外技术和多参加国际比赛...而这些纪录的保持者,除了Justin Gatlin在打破纪录时是33岁以外,其他人均为30岁以下。 苏炳添可以说是以一人之力,冲破了原本被其他各大洲“占领”的短跑田径项目纪录。

    41410

    Kotlin Maps:五个基本函数

    此外,Kotlin 添加了一些额外的功能,使maps使用起来更加方便。 在这篇文章中,我谈论的是maps的基础知识。我将向您展示处理maps时最常用的函数。...Kotlin 中maps的用途 在使用maps之前了解什么是maps。本质上,映射是键值对的集合。关键是标识符。您可以使用它来查找集合中的特定元素。该值是您要存储的数据,它与一个键相关联。...减少对象的可变性是最佳实践。例如,开创性的《Effective Java》 一书就推荐了它。这是为什么?不可变对象更容易推理。他们不太容易出现意外错误。您应该尽可能多地使用不可变对象。...空安全。这就是为什么返回类型被清楚地标记为可空类型的原因。它强制您处理该值可能为空的事实以防止运行时异常。 空安全强制您处理值可能为空的事实以防止运行时异常。...一些示例是方便的方法,例如forEach、map或filter。 maps是核心抽象 关于maps还有很多要说的。请务必查看 API 参考,因为这里有比我向您展示的方法更多的方法。

    2.4K10

    Java集合--线程安全(CopyOnWrite机制)

    (当然,这个集合必须是共享了,所以才会有数据不一致) 所以,当我们在进行并发任务时候,共享了一个不适用于并发的数据结构,也就是将此数据结构变成了程序中的成员变量,那么我们将会遇到数据的不一致,进而影响到我们程序的运行...(3)此外,我们还可以使用集合工具类--Collections,通过调用其中的静态方法,来得到线程安全的集合。...阻塞式集合:当集合已满或为空时,被调用的添加(满)、移除(空)方法就不能立即被执行,调用这个方法的线程将被阻塞,一直等到该方法可以被成功执行。...非阻塞式集合:当集合已满或为空时,被调用的添加(满)、移除(空)方法就不能立即被执行,调用这个方法的线程不会被阻塞,而是直接则返回null或抛出异常。...这样就实现了,添加方法无论如何操作数组对象,获取方法在获取到集合后,都不会受到其他线程添加元素的影响。 这也就是在执行add()时,为什么还要在加锁的同时又copy了一分新的数组对象!!!

    78140

    【Rust学习】17_常见集合_向量

    每种集合都有不同的能力和成本,选择适合当前情况的集合是您会随着时间推移而发展的一项技能。在本章中,我们将讨论 Rust 程序中经常使用的三个集合:向量允许您将可变数量的值彼此相邻存储。...向量只能存储相同类型的值。当您有项目列表时,例如文件中的文本行或购物车中项目的价格,它们非常有用。...创建一个向量要创建一个新的空向量,我们调用Vec::new函数,如下所示:fn main() { let v: Vec = Vec::new();}请注意,我们在这里添加了一个类型注解。...因为我们没有向这个向量中插入任何值,Rust 不知道我们打算存储什么类型的元素。这是一个重要的观点。向量是使用泛型实现的;我们将在后续的章节中介绍如何将泛型与您自己的类型一起使用。...幸运的是,枚举的成员是在相同的枚举类型下定义的,所以当我们需要一个类型来表示不同类型的元素时,我们可以定义并使用枚举!

    8710

    谈一谈Android内存

    而有些人是心有余而力不足,“我也想优化,可是怎么去优化呢?”。本篇文章将给你带来一点启示,让你从力不从心到知道怎么去入手优化。 01 一、为什么需要做内存优化?...如果在不同的系统平台上我都要分别去使用所在平台的编译器编译生成它们对应的机器码去执行(参考下图)。这就给应用的移植带来很大的困难。 聪明的人类总是能想到好办法,虚拟机的概念从空而降。...每当我们的一个应用程序启动时,zygote进程就会folk一个进程作为应用程序的进程,并且与zygote进程共享分配内存的堆。...c.静态集合要置空 集合会引用存储的对象,静态的集合生命周期与应用一样,导致存储的对象的内存无法释放,所以在不用的时候一定要将集合置空。...这个是非常棒的工具,简单明了,笔者从15年的项目到现在的项目都有在用。

    63620

    Java:如何更优雅的处理空值?

    有时候,更可怕的是系统因为这些空值的情况,会抛出空指针异常,导致业务系统发生问题。 此篇文章,我总结了几种关于空值的处理手法,希望对读者有帮助。...空集合返回值 :如果有集合这样返回值时,除非真的有说服自己的理由,否则,一定要返回空集合,而不是null Optional: 如果你的代码是jdk8,就引入它!...如果不是,则使用Guava的Optional,或者升级jdk版本!它很大程度的能增加了接口的可读性! jsr 303: 如果新的项目正在开发,不防加上这个试试!一定有一种特别爽的感觉!...jsr 305: 如果老的项目在你的手上,你可以尝试的加上这种文档型注解,有助于你后期的重构,或者新功能增加了,对于老接口的理解!...当我们看到这个方法的时候,会觉得有一些歧义: “如果username是absent,是返回空集合吗?还是返回全部的用户数据集合?”

    5.1K61

    使用Optioanl优雅的处理空值

    空集合返回值 : 如果有集合这样返回值时,除非真的有说服自己的理由,否则,一定要返回空集合,而不是null Optional: 如果你的代码是jdk8,就引入它!...如果不是,则使用Guava的Optional,或者升级jdk版本! 它很大程度的能增加了接口的可读性! jsr 303: 如果新的项目正在开发,不防加上这个试试! 一定有一种特别爽的感觉!...jsr 305: 如果老的项目在你的手上,你可以尝试的加上这种文档型注解,有助于你后期的重构,或者新功能增加了,对于老接口的理解!...查询所有数据集合,如果username是空,也要返回所有的用户集合....当我们看到这个方法的时候,会觉得有一些歧义: “如果username是absent(缺省),是返回空集合吗?还是返回全部的用户数据集合?”

    1.9K20
    领券