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

一文读懂《Effective Java》第43条:返回零长度数组或集合不是null

对于一个返回null 不是零长度数组或者集合方法,客户端几乎每次用到该方法都可能会忘记写专门处理null 返回值代码,进而导致NPE。...在返回值这种级别上担心性能问题是不明智,除非分析表明这个方法是造成性能问题真正源头 对于不返回任何元素调用,每次返回同一个零长度数组是有可能,因为零长度数组不可变不可变对象可能被自由共享...编写数组与集合返回值推荐做法 返回空数组,可以使用集合实现类toArray()方法,例如:ArrayList.toArray(): private final List cheeseList...Collections.emptyList(): public List getCheeseList() { if (cheeseList.isEmpty()){ // 返回一个不可变集合...,没理由返回null,二是返回一个零长度数组或者集合

1.6K20

【自然框架 NatureFW】里两种“映射”方式

用好ORM关键,我举在于:设计O时候是否会受到R影响;同理,设计R时候,是否受到了O影响?也就是说设计实体时候,完全不去考虑数据库,设计数据库时候也完全不考虑实体类!...用实际工作经历来说明一下。我在做设计时候,先根据需求设计数据库,这时候完全没有考虑类要如何设计(其实一开始根本就没有用实体类,呵呵)。...后来框架不断扩展,发现个问题:不弄个实体类来管理一下,确实挺麻烦。那么如何来设计需要类呢? 有一个表就建立一个类,表里字段都是类属性吗?真的是真么简单吗?...这是因为这个信息是很多地方都需要用到,验证信息并不是必须。只有页面表单里面才需要,“数据列表”和“数据查询”都不需要。 这样一来,表和类就不是完全对应,而是把一个表“拆开”了,对应多个类。...一个字段(描述信息)就是一条记录,表单里需要字段就是一个集合,数据列表里需要字段是另一个集合……这样就非常方便。这样处理带来了很多好处,最明显就是——权限到字段! ? ?

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

使用Repository模式支持产品客户化

(要了解OEA中客户化具体方案,见《基于OEA框架客户化设计(一) 总体设计》) 为了使用CSLA这些获取代码,在以后引入非CSLA实体时,可能都需要重写。...使用Repository模式,我们在主干版本中通过Repository工厂找到需要类型ARepository,然后通过它获取具体对象集合并进行操作。...当扩展后,主干版本中同样代码再次通过RepsotoryFactory获取ARepository时,得到其实是子类BRepository,这样,它获取出来对象集合都是B列表。...这样,就实现完全类型扩展,而且主干中代码不需要任何改变。 一旦实体类被动态扩展,相应数据层和界面也就被OEA框架自动地进行了调整。...同时,我们可以在Repository中管理一些整个实体类型信息,例如某个实体类A所有属性列表元数据。

66750

Java 集合深入理解(3):Collection

什么是集合框架集合框架是一个代表、操作集合统一架构。所有的集合框架都包含以下几点: 接口:表示集合抽象数据类型。接口允许我们操作集合时不必关注具体实现,从而达到“多态”。...实现类:集合接口具体实现,是重用性很高数据结构。 算法:用来根据需要对实体类中对象进行计算,比如查找,排序。 同一种算法可以对不同集合实现类进行计算,这是利用了“多态”。 重用性很高。...还有一些操作整个集合方法,比如 : boolean containsAll(Collection<?...感谢 密哥 提醒,parallel 应该是并行,不是并发。 并发与并行概念区别还是挺大。...“并发”在微观上不是同时执行,只是把时间分成若干段,使多个进程快速交替执行,从宏观外来看,好像是这些进程都在执行,这就好像两个人用同一把铁锨,轮流挖坑,一小时后,两个人各挖一个小一点坑,要想挖两个大一点得坑

1.1K50

JUC容器介绍

Synchronized和lock 5、集合类不安全 JUC结构 tools(工具类):又叫信号量三组工具类,包含有 CountDownLatch(倒计数) 是一个同步辅助类,在完成一组正在其他线程中执行操作之前...,相比synchronized关键字来进行同步锁,功能更加强大,它为锁提供了一个框架,该框架允许更灵活地使用锁包含实现类有: ReentrantLock 它是独占锁,是指只能被独自占领,即同一个时间点只能被一个线程锁获取锁...2、模拟并发,我需要启动 100 个线程去同时访问某一个地址,我希望它们能同时并发,不是一个一个去执行。...synchronized时,等待线程会一直等待下去,不能够响应中断;通过Lock可以知道有没有成功获取锁,synchronized却无法办到。...4、同一个类不同对象对象锁互不干扰 5、类锁作用于整个类 更多锁(ReentrantLock、ReadWriteLock读写锁)文章请关注更多文章 5、集合类不安全 ArrayList、HashSet

30720

探索Android架构DataLayer层(DataManager方式)具体实现

Clean架构可取分离DataLayer层思路,当然还有整个降耦合思路。 我构想架构大概是这样子: ?...DataLayer获取在Android端无非是网络,本地数据库(Sqlite),本地文件(SharePreference,文件)。网络获取框架当然是现在火不得了SSqure家Retrofit。...accessToken : ""; } 首先这是个典型单例对象,对于那些简单交互或者更直接说法--获取单个对象不是集合应用场景就可以直接获取这个类去获得api...用一个原子Integer包装类保证了计数原子性,不会因为CPU指令从排污染数据。具体见下面对面,有些需要解释地方有注释,大家看时候比较方便。...//计数器 private final AtomicInteger loadingCount; private final MicalPrefs micalPrefs; //数据加载情况回调接口集合

59120

C# API中模型和它们接口设计

它返回是IEnumerable不是IEnumerable,这让它看起来就像是一个C# 1接口,不是泛型。...缺点是它接受ValidationContext对象作为参数,几乎没有人知道如何使用这个类。以下是ValidationContext属性。 DisplayName:获取或设置要验证成员名称。...集合变更通知 正如我们需要知道单个属性变更一样,我们也需要知道整个集合发生变更。我们可以使用INotifyCollectionChanged接口来解决这个问题。...为此,集合需要在将对象添加到集合或从集合中移除时附加和移除事件处理程序。 变更跟踪和撤消 虽然使用不是很频繁,.NET还是提供了专门用于跟踪对象变更接口,这些接口甚至还提供了撤消功能。...我通常假设RejectChanges会遍历对象图,并拒绝所有挂起变更。但在涉及集合属性时,这可能有点蹊跷,最好是将其封装在类中,不是尝试构建临时解决方案。

1.6K20

EntityFramework 外键值映射

Entity Framework 实体框架形成之旅--实体框架开发几个经验总结 在前阵子,我对实体框架进行了一定研究,然后把整个学习过程开了一个系列,以逐步深入方式解读实体框架相关技术,期间每每碰到一些新问题需要潜入研究...我整个实体框架学习和研究,是以我Winform框架顺利升级到这个实体框架基础上为一个阶段终结,这个阶段事情很多,从开始客运联网售票WebAPI平台开发,到微软实体框架深入研究,以及《基于Metronic...1、实体框架主键类型约束问题 在我们搭建整个实体框架过程中,我们一般都是抽象封装处理很多基础增删改查、分页等常见数据处理功能,如下所示。...例如我们如果要获取一个树形机构列表,如果我们指定了一个开始机构节点ID,我们需要递归获取下面的所有层次集合时候,常规做法如下所示。...使用实体框架后,主要就是利用LINQ进行一些集合操作,这些LINQ操作虽然有点难度,不过学习清楚了,处理起来也是比较方便

4.1K50

基于ABP落地领域驱动设计-02.聚合和聚合根最佳实践和原则

对于习惯使用 EF Core 和 关系数据开发者来说,这看起来似乎有些奇怪。获取 Issue 所有数据是没有必要且低效。为什么我们不直接执行一个SQL插入命令到数据库,不查询任何数据呢?...考虑数据完整性、有效性和一致性。 实际: 大多数聚合根没有子集合。 一个子集合最多不应该包含超过100-150个条目。...聚合根/实体主键 一个聚合根通常有一个ID属性作为其标识符(主键,Primark Key: PK)。推荐使用 Guid 作为聚合根实体PK。 聚合中实体不是聚合根)可以使用复合主键。...一个设计良好构造函数,担负以下职责: 获取所需实体属性参数,来创建一个有效实体。应该强制只传递必要参数,并可以将非必要属性作为可选参数。 检查参数有效性。 初始化子集合。...AssignToAsync 获取一个 AppUser 实体,实际上只用到 user.Id,传递实体是为了确保参数值是一个存在用户,不是一个随机值。

2.9K30

2018-10-31 网易考拉规则引擎平台架构设计与实践

但是这并不是一种面向对象思考方式,往往我们是以一种面向过程思维去编程。...这样我们就把原本全部在service里面的逻辑划入到不同负责相关职责“领域对象”当中了,service逻辑变得非常清楚明了,想实现A给B转账,直接获取A实体,然后调用A实体转账方法即可。...每次获取指标值时,我们都是先计算出需要key集合(比如我要获取“单个账号最近10分钟下单量”,我可能需要获取30个key,因为每个key跨度是20s),然后获取到对应value集合,再进行累加。...实际上我们只是需要累加后值,这里可以通过redis+lua脚本进行优化,脚本里面直接根据key集合获取value后进行累加然后返回给客户端,这样就较少了每次响应数据量。...有了统一标准就可以实现事件自动接入不需要修改代码上线,这样也可以保证整个引擎稳定性。 模型生命周期管理。

1.4K30

这个面试中常考数据结构,你掌握了吗?

很多小伙伴可能知道是ConcurrentHashMap,却对其没有太多了解,本文就带大家先来看一下ConcurrentHashMap集合size()方法是如何保证准确获取集合大小。...首先,通过size()方法取得的当前集合中数据总量值,很可能不是一个精确值,也就是在调用size()方法还未得到返回值时,集合数据总量可能就已经发生了变化。...ConcurrentHashMap集合使用counterCells数组不是baseCount属性记录集合键值对数据量,前提条件就是通过compareAndSetLong方法进行baseCount属性操作时...当计算某个线程计数值应该存放在counterCells数组哪一个索引位时,使用就是“探针”值和counterCells数组长度通过“与”运算取余数方式完成。...▊《Java高并发与集合框架:JCF和JUC源码分析与实现》 银文杰 著 掌握Java集合框架和Java并发工具包,轻松应对80%工作场景 本书并不讲解JCF和JUC中各个组件基本使用方法,因为作者相信

27410

Rafy 领域实体框架 - 树型实体功能(自关联表)

针对这样场景,许多ORM框架都不做默认处理,开发者往往每次都要做重复工作:建立类似结构表,编写关系处理代码,编写查询代码……而这种场景经常会出现,所以 Rafy 实体框架中,默认就支持了树型实体一系列功能...此属性会映射为数据库中字段。 TreeParent:该树节点父节点实体。 TreeChildren:该树节点所有子节点集合。...所以这个属性值非常重要,只能由框架来自行维护,不能由开发者来设置。...另外,EntityTreeChildren 集合可以按需加载。当它还没有进行加载时,遍历整个树只能遍历到当前已经在内存中树节点。...使用此方法后,指定节点父节点将被赋值到它 TreeParent 属性上。 GetAllTreeParents:获取指定索引对应树节点所有父节点。

1.6K80

欢迎使用开源持久化框架 MyBatis Enhance

实体创建 根据对应数据库内表来创建实体,Enhance采用是Spring Data JPA形式来管理实体类,并且已经预先提供一些Annotation,数据实体(Entity)对应数据库内数据表...,并且同时可以获取内部提供CRUD方法!!!...,第二个则是实体类主键类型,这样方便我们在传参或者返回值时做到统一,否则还需要进行Object类型转换,那样不仅麻烦还会提高运行成本,详细介绍请阅读 使用文档 暂时内置方法 // 统计数据 Long...,针对MyBatis Enhance框架来说,我单独配套编写了一个代码生成工具,能够把创建实体、Mapper等必须需要类自动化创建以及可以通过freemarker模版来完成自定义实体类创建,从而实现代码上真正快速开发...敬请期待DSL动态查询 Enhance内部默认支持了单表数据操作方法,但是我们平时在项目中多表查询是最普遍,我结合了QueryDSL动态查询框架优点将部分基础实现迁移到了Enhance框架内,极大方便了多表联合查询以及动态返回任意数据实体

1.3K30

Java遍历集合几种方法分析(实现原理、算法性能、适用场合)

概述 Java语言中,提供了一套数据集合框架,其中定义了一些诸如List、Set等抽象数据类型,每个抽象数据类型各个具体实现,底层又采用了不同实现方式,比如ArrayList和LinkedList...Java中提供遍历方式有哪些? 1、传统for循环遍历,基于计数: 遍历者自己在集合外部维护一个计数器,然后依次读取每一个位置元素,当读取到最后一个元素后,停止。...所以基于顺序存储集合Iterator可以直接按位置访问数据。基于链式存储集合Iterator,正常实现,都是需要保存当前遍历位置。然后根据当前位置来向前或者向后移动指针。...所以我们可以知道,对于顺序存储,因为读取特定位置元素平均时间复杂度是O(1),所以遍历整个集合平均时间复杂度为O(n)。...Java最佳实践是什么? Java数据集合框架中,提供了一个RandomAccess接口,该接口没有方法,只是一个标记。

93710

python使用MongoDB,Seaborn和Matplotlib文本分析和可视化API数据

默认情况下,MongoDB始终返回该_id字段(它自己唯一ID字段,不是我们从GameSpot提取ID),但是我们可以告诉它通过指定一个0值来抑制它。...我们需要从文档中获取检测到命名实体和概念列表(单词列表): doc = nlp(str(review_words))... 我们可以打印出找到实体以及实体数量。...我们只需要创建一个函数来获取不同类别的实体数量,然后使用它来获取所需实体即可。...让我们从评论集合获取分数值,对它们进行计数,然后绘制它们: scores = []...plt.xticks(rotation=-90)plt.show() 上图是给出评分总数(从0到9.9)图表...结论 收集,存储,检索和分析数据是当今世界上非常需要技能,MongoDB是最常用NoSQL数据库平台之一。

2.3K00

Java多线程与并发面试题

一个线程安全计数器类同一个实例对象在被多个线程使用情况下也不会出现计算失误。很显然你可以将集合类分成两组,线程安全和非线程安全。...造成如此慢主要原因是锁, 同步集合会把整个Map或List锁起来,并发集合不会。并发集合实现线程安全是通过使用先进和成熟技术像锁剥离。...不是锁。...Java.util.concurrent.lock 中 Lock 框架是锁定一个抽象,它允许把锁定实现作为Java 类,不是作为语言特性来实现。...简单来说,它有一个与锁相关获取计数器,如果拥有锁某个线程再次得到锁,那么获取计数器就加1,然后锁需要被释放两次才能获得真正释放。

67620

阿里P8架构师总结Java并发面试题(精选)

一个线程安全计数器类同一个实例对象在被多个线程使用情况下也不会出现计算失误。很显然你可以将集合类分成两组,线程安全和非线程安全。...造成如此慢主要原因是锁, 同步集合会把整个Map或List锁起来,并发集合不会。并发集合实现线程安全是通过使用先进和成熟技术像锁剥离。...不是锁。...Java.util.concurrent.lock 中 Lock 框架是锁定一个抽象,它允许把锁定实现作为Java 类,不是作为语言特性来实现。...简单来说,它有一个与锁相关获取计数器,如果拥有锁某个线程再次得到锁,那么获取计数器就加1,然后锁需要被释放两次才能获得真正释放。

1K10

数据驱动型设计01

数据结构由数据值与它们之间关系组成集合,可以表示为: Data_Structure = ( D , R ) 其中D是数据元素集合,R是该集合中所有元素之间关系有限集合。...例如: 1)在平面设计中对象指的是图片、文字、符号、色彩等实体,对象之间关系主要是指布局、间距等2维平面空间关系; 2)在建筑/景观设计里对象指的是铺装、墙体、顶、柱子、植物等实体,对象之间关系指的是各实体之间...2.1 基于视觉设计数自动排版 曾经在《智能设计应用于视频广告,从鲁班视觉引擎谈起》总结过一个基本数据驱动思路:从半结构化设计图,例如 psd 文件、sketch 文件等,提取设计数据,...一般有2种策略,面向物理世界设计我们更多会采用传感器来帮助我们采集真实数据,面向虚拟世界设计,我们会更多从社交媒体,各大内容平台去获取我们需要大数据。...指定一系列约束,比如视图高度、宽度等等。每一个约束其实都是一个简单线性等式或不等式,整个界面上所有约束在一起就明确地定义了整个界面的布局。

97720
领券