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

为什么公开List <T>被认为是不好的?

在软件开发中,使用公开的List <T> 被认为是不好的,原因如下:

  1. 性能问题:List <T> 是一个接口,它没有实现任何方法。当我们使用List <T> 时,我们实际上是在使用一个具体的实现类,如ArrayList或LinkedList。这些实现类的性能各有优缺点,例如,ArrayList的随机访问速度很快,但插入和删除速度较慢;而LinkedList的插入和删除速度很快,但随机访问速度较慢。如果我们在代码中使用了List <T> 类型,那么编译器无法在编译时确定具体使用哪个实现类,从而导致性能问题。
  2. 可读性问题:使用List <T> 可能会导致代码的可读性降低。当其他开发人员查看代码时,他们可能不知道我们实际上使用的是哪个实现类,从而导致他们无法准确理解代码的性能特征。
  3. 扩展性问题:使用List <T> 可能会限制我们的代码扩展性。如果我们的代码需要使用一个具有特定性能特征的实现类,那么使用List <T> 可能会限制我们的选择。

因此,在实际开发中,我们应该尽量避免使用公开的List <T> 类型,而是应该使用具体的实现类,如ArrayList或LinkedList。这样可以确保代码的性能、可读性和扩展性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

面试官问我:“泛型擦除是什么,会带来什么问题?”

前言 这是我之前在抖音二面的时候自我感觉没有答好一题。因为我中心只是围绕在了TObject替换问题上了,并没有去讲解他会带来问题。 思维导图 什么是泛型擦除?...("listInteger size:" + listInteger.size()); } } 不好意思,有图有真相,我就是插进去了,要是你还不信,我还真没办法了。...从这里我们也就能够知道为什么我们数据从前面过来时候,String类型数据能够直接Integer进行接收了。 带来什么样问题?...(2)引用传递问题 上面的问题中,我们已经说过了T将在后期转义成Object,那我们对引用也进行一个转化,是否行得通呢?...解决方案 其实很简单,如果看过一些公开课想来就见过这样用法。

54020

最接地气负载均衡算法(含代码)

protected Referer doSelect(Request request) { List> referers = getReferers(); int...protected Referer doSelect(Request request) { List> referers = getReferers(); int...,而加权轮询算法是在此基础上,给每个节点赋予一个权重,从而使每个节点访问到概率不同,权重大节点访问概率就高,权重小节点访问概率就小。...连接数大节点,可以认为是处理请求慢,而连接数小节点,可以认为是处理请求快。所以在挑选节点时,可以以连接数为依据,选择连接数最少节点访问。...尤其在服务端节点性能差异较大,而又不好做到预先定义权重时,采用最少活跃连接算法是比较好选择。

57220

为什么实现 .NET ICollection 集合时需要实现 SyncRoot 属性?如何正确实现这个属性?

非泛型版本 ICollection 中有 IsSynchronized 属性和 SyncRoot 属性,这两个属性用来设计成以线程安全方式访问和修改集合。...虽然泛型版本 ICollection 已经改进了设计,不再引入 SyncRoot 这样属性到接口中,但如果我们在某些场景下需要实现 ICollection 非泛型集合时,如何正确实现 SyncRoot...而 ICollection 接口中 SyncRoot 属性在接口中必然是公开,于是没有任何途径可以保证调用方不会发生死锁。...结合 .NET Core 源代码中一些常用写法,我给出一个推荐 SyncRoot 模式写法: // Is this List synchronized (thread-safe)?...然而这个属性都是 public 了,不管返回什么,与 this 还有什么区别…… 关于为什么同步时不应该返回 this 或者返回公开对象,原因可以看我另一篇博客: 为什么不应该公开用来同步加锁对象

78230

面试官问我:“泛型擦除是什么,会带来什么问题?”

从这里我们也就能够知道为什么我们数据从前面过来时候,String类型数据能够直接Integer进行接收了。会带来什么样问题?...(2)引用传递问题 上面的问题中,我们已经说过了T将在后期转义成Object,那我们对引用也进行一个转化,是否行得通呢?...解决方案 其实很简单,如果看过一些公开课想来就见过这样用法。...Parent>语句,其实这就是将基类重新规划操作,就算编译,虚拟机也会知道将数据转化为Parent而不是直接用Object来直接进行替代。...因为他保存是Object,而不是我们赋予Apple啊。 关于插入操作,为什么要用逆变 通过引入协变机制,List<?

2.1K41

知识都是公开,程序员水平相差巨大因素有哪些

为一个程序员,我深感有网络好处。遇到什么难题,上网搜索一番,一般能找到解决办法,或者启发。于是有时忍不住感想,既然各种知识都是公开,是不是每个程序员表现都差不多?...大家当然知道,现实是,程序员水平差异,依然是巨大。   那么,既然知识是公开,都可以得到,水平之间相差巨大因素有哪些?仔细思考了一下,供大家参考。 ?   勤快程度。...同样事情,不同人找起来结果当然不同。为什么呢?有的人找不到之后,认为是没有,而不是想办法改进自己查找办法。有的人会反复寻找,组织各种关键字,甚至硬着头皮看外文。   然后呢?...动脑能力 人是很懒,而动脑是最累——这是当然事情,因为大脑最想偷懒嘛。遇到问题,反复分析、思考、尝试,一般总会找到解决办法(当然这里不要抬杠,指能力范围)。...不管新知识怎样,如果基本功不好,什么新语言都玩不好

35530

【C++】STL——容器适配器 stack和queue 深度剖析及模拟实现 & 适配器模式了解

另外,大家可能注意到,stack是不是没有迭代器啊,而我们之前学string、vector、list都有啊,为什么呢?...当然你也可以借助erase去搞,但效率是不是不好啊。 所以我们可以用list: 当然库里面默认给还是deque。 来试一下: 没问题。 5....如果它真的是一个很牛逼设计,那我们数据结构书上为什么没有学它呢?既然它这么牛,兼具vector和list功能,那vector和list是不是就可以淘汰了? 那它底层到底是怎么样呢?...但是,它应该是比list随机访问效率高。库里面list压根就没提供operator[],为什么?就是效率太低了嘛。...6.3 deque优点 那上面分析这些可以认为是deque优点: 与vector相比,扩容代价低 头部尾部插入和删除数据是不需要挪动数据,效率比较高 支持随机访问且效率比list好 6.4 deque

11210

Java8新特性学习之一:lambda表达式入门

前言: 最近在系统性学习一些java8新特性,说一下为什么打算系统学习它呢。...但是过了几天,农民伯伯又找到我,需要我帮忙从一堆苹果中挑选出比较大苹果(苹果有重量,大于150g认为是大苹果) 3、尝试三 同样很简单,几行代码就搞定了 private static List<Apple...return true; } return false; } }); 然后一顿操作猛如虎,一看战绩0-5,还是不优雅,匿名内部类太多了,代码不美观、阅读性也不好...实现过滤方法,这个时候不管是要过滤苹果、梨子、香蕉都ok啦 private static List filterFruits(List inventory, FruitsPredicate... fruitsPredicate){ List filterFruits = new ArrayList(); for (T t : inventory){

16710

沟通视窗:改善人际沟通

在《可复制领导力》书里对隐私象限分了三个层次:忘了说(知识诅咒)、不好意思说(害羞、碍于情面等)、DDS(deep dark secret)。...不好意思说:这里指的是,你本来应该说,但碍于情面或者害羞,而不去说。这样会导致本来可以解决小问题,到后面越来越不好解决。比如说,你无意间一些话语对同事造成了伤害,你想去道歉,但不好意思去说。...或者,你发现同事有上班期间外出情况,你发现了,但是觉得他没有影响工作,不好意思说。结果他外出频率越来越频繁,以至于其他同事举报,以至于开除。...公开象限:自己知道,他人也知道。 双方进行沟通时,公开象限越多越容易达成共识,沟通也更顺畅。我们在项目中做编码规范就是在创造公开象限。 有些专家为什么会被人信任?...分清楚了这四个象限,我们主要要做就是:在沟通之前,扩大公开象限 1、将隐私象限转化为公开象限 将那些不好意思说或者忘记说内容向员工做自我揭示。除了工作上内容,还可以多谈谈生活、爱好。

84420

【5min+】 对象映射只有AutoMapper?试试Mapster

可能您会认为是性能问题,毕竟在上面 dudu 那篇文章标题真的很有吸引力。 但这只是很小一部分原因。...如果在库中创建,那么用户必须在使用库时候进行配置,比如库公开一个委托来配置: service.AddMyLibary(config=> { //config wrap automapper }...可能您现在正在使用框架中就是使用了这种方式。 当然也不是说这样不好,但是我个人感觉很奇怪。...Mapster 提供了一个 TypeAdapterConfig 静态泛型类型来进行配置,所以我们可以在任何地方书写配置: TypeAdapterConfig...您问我为什么不好好命名,比如ChildEntity就命名为Child呀,为什么要命名成读不懂东西。” 因为……您命名规范了,根本都不用写配置,Mapster会自动完成映射。

1.8K20

不满国内监管,谷歌回归中国计划再遭抗议

2018年11月27日,有近300名谷歌员工联名发布公开信,呼吁谷歌停止蜻蜓计划(Project Dragonfly)。...根据此前消息,谷歌推出蜻蜓计划目的是打造一款针对中国市场搜索引擎产品,此后谷歌高管也承认了该项目确实存在,而这项计划也外界认为是谷歌搜索重返中国一个信号。 ?...在今年8月份蜻蜓计划消息曝出之后,就有上千名谷歌员工在一封抗议书上签字,要求公司提高透明度,以便他们了解自己工作道德后果。 ? 而最新一份公开信中,大体内容也基本一致。...针对谷歌回归中国言论,李彦宏曾在朋友圈表示,“”百度一直认为是占了Google 退出中国便宜“、”如果现在Google回来,我们正好可以真刀真枪地再PK一次,再赢一次。...谷歌搜索是否能回归中国,似乎并没有我们想象那么有影响力,一定程度上我赞成李彦宏观点,即便当初没有退出或是现在回归中国,百度和Google鹿死谁手,还真不好说。

45120

在生产环境中重新思考测试

在生产环境中进行测试长期以来一直认为是一项风险较大尝试,经常在开发人员、测试人员和利益相关者之间引起争议。...测试生产环境一直认为是一项风险较大尝试,通常在开发人员、测试人员和利益相关者之间存在争议。在部署到生产环境之前,在开发和暂存等受控环境中精细地测试软件传统方法一直是常态。...在实时生产环境中进行测试想法本身由于潜在中断、不可预见错误和损害用户体验担忧而获得了不好名声。...功能标志使开发人员能够在开发阶段生产环境中为自己启用某个功能,使他们能够在向更广泛测试受众公开之前对其进行精致地完善和完美化。 这种渐进式方法可以确保潜在问题能够在开发过程早期就被识别和解决。...为什么使用功能标志在生产中测试 在采用功能标志同时,还有两个至关重要要点浮出水面: 功能标志释放了精简环境潜力,甚至可能采用单环境设置。(如前所述,这是一个选项,而不是一个要求。)

9310

kubernetes炼气期之掌握Kubernetes背景

Google 是最早研发 Linux 容器技术企业之一(组建了cgroups),曾公开分享介绍 Google 如何将一切都运行于容器之中(这是 Google 云服务背后技术)。...直到2015年4月,传闻许久 Borg 论文伴随 Kuberneters 高调宣传谷歌首次公开,大家才得以了解它更多内幕。...Kubernetes 建立在 Google 在大规模运行生产工作负载方面拥有十几年经验基础上,结合了社区中最好想法和实践。 kubernetes时代 [wlw18iw54t.png?...=&q-url-param-list=&q-signature=155dd888f24d41ce9c516e377a652c2bc8b1317a] 通过对比来看一下为什么我们需要kubernetes,为什么新时代需要...容器部署时代: 容器类似于 VM,但是它们具有轻量级隔离属性,可以在应用程序之间共享操作系统OS。因此,容器认为是目前最轻量级。容器与 VM 类似,具有自己文件系统、CPU、内存、进程空间等。

88750

ios Category

声明私有方法 category其他几个使用场景: 模拟多继承 把framework私有方法公开 Category真面目 typedef struct category_t { const...struct method_list_t *classMethods;//类方法列表 struct protocol_list_t *protocols;//所有协议列表...过程: 1.在编译时期,会将分类中实现方法生成一个结构体 method_list_t 、将声明属性生成一个结构体 property_list_t ,然后通过这些结构体生成一个结构体 category_t...,那么category附加完成之后,类方法列表里会有两个methodA 2)、category方法放到了新方法列表前面,而原来类方法放到了新方法列表后面,这也就是我们平常所说category...Category 为什么不能添加实例变量 通过结构体 category_t ,我们就可以知道,在 Category 中我们可以增加实例方法、类方法、协议、属性。

40610

【微服务架构】让我们谈谈“拥有”他们数据微服务

当我仅仅提出让 UI 后端直接从 Elastic Search 查询数据亵渎想法时,经典“微服务不应该暴露其底层数据存储”论点点燃了。 Who owns the data??...令人惊讶是,“接口-数据存储解耦”范式纯粹主义者根本不认为这是一种不好做法。...同样,技术并不重要,重要是数据用途定义。 重要是要澄清,即使这些数据公开和共享,消费者也只能从中读取。...为什么你甚至想通过 Couchbase 或 Athena 而不是严格地通过 REST 或 GraphQL 等 WEB API 来公开数据,你可能会问。...一个数据集可以认为是内部并且驻留在 State Store 中,而相同数据投影可以驻留在同一个 State Store 中并暴露在外部。

52330

漫谈C变量——对齐(3)

【正文】 ----   前面的两篇文章,我们分别介绍了“为什么变量要对齐到它尺寸大小”,“编译器会怎么处理内存对齐问题”以及“非对齐是如何产生和非对齐后果”,感觉自己错过了重要内容朋友可以发送关键字...大小中断向量表,其首地址必须要对齐到 0x0200(是0x200整数倍)   为什么会存在这样限制呢,原因很简单,假设向量号为x中断触发了,Cortex-M内核就会用这个x作为下标去访问这个uint32...我们认为是这样: 中断向量地址 = 向量表基地址 + (x * 4) 然而,我们天真了,为了省事,这里“+”运算替换成了简单"或"运算,也就是说,实际硬件实现是这样: 中断向量地址...,为了硬件实现方便,MPU每一个Region设置加入了一个人为限制: Region大小必须是 2^n (4<n<33),也就是32,64...2G, 4G Region基地址必须对齐到它大小...是的,就是这么坑,所以如果你想用MPU保护一个任意位置任意大小Memory,比如stack,不好意思,你要用很多个Region一起来拼接……具体怎么拼,说起来都麻烦,何况用……算了不说了。

49930
领券