专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

轻松解读源码系列之Java集合接口ampampamp抽象类(

  大家好,我是程序员xiao熊,本篇内容将为大家分享Java集合接口Collection的三大子接口:List、Set、Queue;这些接口和抽象类是Java集合框架的基础,为具体的子类实现提供了规范以及基础实现,降低了子类实现的成本;本篇包含内容如下:List接口Set接口Queue接口扩展阅读
  Collection的三大子接口1、List接口1。1、List接口介绍
  List是一个有序的集合(也称为序列),继承自Collection,Collection是直接父接口;其具备了如下规范和特性:开发者可以很精确的控制在哪个位置插入新元素,同时也可以通过整型索引下标来访问元素,以及查询列表中的元素;List允许元素重复;更正确的说应该是List允许满足e1。equals(e2)的两个元素存在,也允许存在多个null元素(如果实现类允许存在null元素的话);但是也有例外,有的List是不允许元素重复,此时当开发者添加重复的元素时,会抛出异常;List接口除了从Collection继承的规则约束之外,对iterator,add,remove,equals,以及hashCode方法还有一些约束规则;List接口提供了四个方法用于通过索引访问元素;List与数组一样,下标是从0开始的;需要注意的是,在某些实现中(例如LinkedList类),通过索引访问元素的执行时间与索引值成正比(具体原因参考《轻松解读源码系列之Java集合LinkedList(下)》的总结部分的第3点),性能会随着元素数量增加而降低。List接口提供了一个特殊的Iterator:ListIterator,ListIterator除了Iterator提供的方法之外,还提供了添加元素、更新元素以及双向访问元素的功能;并且还提供了一个方法用于获取指定了索引位置的ListIterator;List接口提供了两个方法用于快速地在列表的任意位置添加或者删除多个元素;
  子类实现接口时需要注意:List的具体实现可能会不允许元素重复,这时添加元素会抛出异常,我们需要尽量避免这种实现方式,因为这并不太符合List的使用场景;一些List的实现类对于包含的元素会有一些约束;例如,一些List实现不支持null元素,以及限制了数据元素类型;当添加一个不符合条件的元素,则一般会抛出非检查异常(一般是NullPointerException或者ClassCastException);查询一个不符合规范的元素,也许会抛出异常,也许直接返回false;此外,尝试对不符合条件的元素进行操作时,首先操作的完成不会导致不符合条件的元素插入到集合中,但操作可能会抛出异常,也可能会执行成功(不符合条件的元素不会进入集合,只是方法执行成功),具体取决于实现方式。
  使用的注意事项:如果调用者不知道所使用的列表的底层原理的话,遍历链表中的元素通常比索引的方式更好一点。List接口提供了两个方法用于查询特定的对象;从性能的角度来看,这些方法应该谨慎使用。在许多实现中,它们将执行代价高昂的线性搜索。虽然列表允许包含自己作为元素,但还是要格外小心:equals和hashCode方法已经不适用这样的列表了。1。2、List接口方法说明
  booleanadd(Ee)
  将元素添加至列表尾部
  voidadd(intindex,Eelement)(新增)
  在指定位置添加元素
  booleanaddAll(Collectionlt;?extendsEc)
  添加一个集合中的元素到当前集合的尾部
  booleanaddAll(intindex,Collectionlt;?extendsEc)(新增)
  在指定位置添加指定集合中的所有元素至当前集合的尾部
  voidclear()
  清除集合元素
  booleancontains(Objecto)
  判断是否包含指定的对象
  booleancontainsAll(Collectionlt;?c)
  判断是否包含集合中的所有元素
  booleanequals(Objecto)
  判断对象是否与当前集合相等,要求:集合的元素相等、元素顺序相同
  Eget(intindex)(新增)
  获取指定索引位置的元素
  inthashCode()返回集合的hashCode;逻辑如下:
  inthashCode1;
  for(Ee:list)
  hashCode31hashCode(enull?0:e。hashCode());
  intindexOf(Objecto)(新增)
  获取指定对象在列表中的索引位置(从头部开始)
  booleanisEmpty()
  判断结合是否为空
  Iteratoriterator()
  返回列表的iterator对象
  intlastIndexOf(Objecto)(新增)
  返回指定对象在列表的索引位置(从尾部开始)
  ListIteratorlistIterator()(新增)
  返回列表的listiterator
  ListIteratorlistIterator(intindex)(新增)
  返回定位在指定索引位置处的listiterator
  Eremove(intindex)(新增)
  删除指定所以位置处的元素
  booleanremove(Objecto)
  删除指定对象
  booleanremoveAll(Collectionlt;?c)
  删除存在于指定集合中的元素
  defaultvoidreplaceAll(UnaryOperatoroperator)(新增)
  根据原来的元素计算新的元素,并进行替换
  booleanretainAll(Collectionlt;?c)
  保留指定集合中元素
  Eset(intindex,Eelement)(新增)
  更新指定索引位置处的元素
  intsize()
  返回元素数量
  defaultvoidsort(Comparatorlt;?superEc)(新增)
  按照指定的comparator进行排序
  defaultSpliteratorspliterator()
  返回List的spliterator
  ListsubList(intfromIndex,inttoIndex)(新增)根据开始和结束下标获取子列表
  注意:不包含下标范围,例如:〔1,6)
  Object〔〕toArray()
  将元素以Object数组形式返回,返回的数组与集合互不影响
  T〔〕toArray(T〔〕a)
  返回指定类型的数组,返回的数组与集合互不影响2、Set2。1、Set接口介绍
  Set接口是对数学上集合的抽象,是一个不会包含重复元素的集合,继承自Collection,Collection是其直接父级接口;更准确的说是set集合不会包含两个满足e1。equals(e2)的元素,并且只有一个null元素;其具备以下规范和特性:除了从Collection继承的规则之外,Set接口对所有的构造函数、add、equals以及hashcode方法还增加了一些约束规则;所以Set接口再次声明了这些方法,而方法上声明的约束规则,仅仅只是针对Set接口的。Set接口对构造函数增加的约束规则是:所有的构造函数创建的集合是没有重复元素的集合;一部分Set接口的实现对其中的元素会有一些约束;例如,有一部分Set接口的实现禁止null元素,有一些实现类是对元素类型进行了限制;当尝试添加一个不符合规范的元素,则会抛出未检查异常,一般是NullPointerException或者ClassCastException;查询一个不符合规范的元素,也许会抛出异常,也许直接返回false;此外,尝试对不符合条件的元素进行操作时,首先操作的完成不会导致不符合条件的元素插入到集合中,但操作可能会抛出异常,也可能会执行成功(不符合条件的元素不会进入集合,只是方法执行成功),这取决于具体的实现策略。
  使用的注意事项:
  在时如果将可变对象用作set元素,则必须非常小心。如果对象是集合中的一个元素,但其值的改变影响了等值比较,则集合的行为将会是不确定的。还有一个特殊情况是,不允许一个集合包含自己作为一个元素;2。2、方法说明
  Set接口对add、equals以及hashcode有一些新增的规则约束,具体的方法如红色字体部分
  booleanadd(Ee)
  添加元素,如果元素已存在,则返回false,集合保持不变;否则元素添加成功
  booleanaddAll(Collectionlt;?extendsEc)
  添加集合中的元素至当前集合,如果元素已存在,不添加;最终的结果就是两个set集合的并集;需要注意的是,如果在add过程中,入参集合c发生了变化,则addAll操作的结果是不确定的
  booleanequals(Objecto)
  比较指定对象与此集合是否相等。如果指定对象也是一个集合,两个集合的大小相同,并且指定集合的每个成员都包含在这个集合中(或者等价地说,这个集合的每个成员都包含在指定集合中),返回true;这个定义确保了equals方法的逻辑在set接口的不同实现中都是正确的;
  inthashCode()
  返回此集合的哈希码值。集合的哈希码定义为集合中元素的哈希码之和,其中null元素的哈希码定义为零。这确保了对于任意两个集合s1和s2,s1。equals(s2)意味着s1。hashcode()s2。hashcode(),这符合Object。hashCode()的一般约定。
  voidclear()
  清除集合中的元素
  booleancontains(Objecto)
  判断是否包含某个元素
  booleancontainsAll(Collectionlt;?c)
  判断是否包含指定集合中的所有元素
  booleanisEmpty()
  判断当前集合是否是空集合
  Iteratoriterator()
  返回当前集合的iterator对象
  booleanremove(Objecto)
  删除指定的元素对象,如果元素存在,则返回true;否则返回false;
  booleanremoveAll(Collectionlt;?c)
  删除当前集合中存在于指定集合中的元素;如果当前集合于指定的集合有交集,则返回true(说明当前集合会发生变化);否则返回false;
  booleanretainAll(Collectionlt;?c)
  保留存在于指定集合中的所有元素
  intsize()
  返回集合中元素的数量
  defaultSpliteratorspliterator()
  返回集合的spliterator对象
  Object〔〕toArray()
  将元素以Object数组形式返回,返回的数组与集合互不影响
  T〔〕toArray(T〔〕a)
  返回指定类型的数组,返回的数组与集合互不影响3、Queue3。1、Queue接口介绍
  队列是在队头删除获取元素,在队尾添加元素的线性表,在JDK中对应的接口是Queue;Queue继承自Collection接口,Collection是其直接父接口。除了基本的集合操作,Queue还提供了插入、获取(删除)和检索元素的操作。每类方法都有两种形式:一种在操作失败时抛出异常,另一种返回特殊值(null或false,取决于操作)。其中,insert操作返回特殊值的形式专门设计用于有容量限制的队列实现。在其他大多数实现中,insert操作不会失败。
  队列方法总结
  抛出异常
  返回固定的值
  Insert操作
  add(e)
  offer(e)
  Remove操作
  remove()
  poll()
  Examine操作(检索元素)
  element()
  peek()
  元素顺序规则:
  队列一般是按照FIFO的规则存放元素;但是在队列的实现类中,也有例外,例如PriorityQueue,它是按照元素的comparator的结果决定元素顺序,或者是元素本身的顺序。LIFO队列(或者是栈)也是例外,它是按照LIFO(后进先出)的规则存放元素。不管以什么排序规则存储元素,队列的头结点(第一个元素)是remove()或者poll()方法在被调用时需要删除的元素。在一个FIFO队列中,所有新加入的元素都会被添加到对列表尾部;其他类型的队列具体实现,可能会使用不同的存放元素的规则;对于队列的实现类来说,必须要指定存放元素排序规则;
  实现队列的注意事项:Queue接口并没有定义阻塞队列(blockingqueue)的方法,阻塞队列通常用在并发编程中并发环境中;阻塞队列的方法会阻塞等待队列中有元素,或者队列中有空间存储元素;阻塞队列的直接父级接口是Queue;队列的实现通常不会定义基于元素的版本的equals和hashCode方法,而是从Object类继承基于identity(身份标识)的版本,因为元素相同但顺序属性不同的队列,基于元素的相等的规则并不是很好定义;
  队列使用注意事项:
  Queue的实现类通常不允许插入null值,不过也有例外的实现类:LinkedList;LinkedList是可以接收null值;但是即使实现类设计为可以接收null值,也最好不要把null值存入队列中,因为null值在某些场景下是有用的,例如poll方法通过返回null值,表示队列为空,3。2、方法说明
  由于Queue了继承了Collection,也会拥有Collection的方法,约束和实现规范与Collection保持一致,具体参考Collection的说明;此外,Queue作为队列的实现,还提供了队列专用的方法,具体如下:
  booleanadd(Ee)
  在队列尾部添加元素,如果添加成功,则返回true,如果添加失败,则抛出异常
  Eelement()
  获取队列头结点元素,但不会删除;如果队列为空,会抛出异常
  booleanoffer(Ee)
  在队列尾部添加元素,如果添加成功,则返回true,如果添加失败,则返回false(这是与add()的区别)
  Epeek()
  获取队列头结点元素,但不会删除;如果队列为空,则会返回null
  Epoll()
  获取队列头结点元素,并删除;如果队列为空,则会返回null
  Eremove()
  获取队列头结点元素,并删除;如果队列为空,则会抛出异常4、扩展阅读
  更多关于Java集合的内容,可参考以下文章:轻松解读源码系列之Java集合接口抽象类(1)Map和Collection轻松解读源码系列之Java集合接口抽象类(2)AbstractCollection轻松解读源码系列之Java集合ArrayList(上)轻松解读源码系列之Java集合ArrayList(下)轻松解读源码系列之Java集合LinkedList(上)轻松解读源码系列之Java集合LinkedList(中)轻松解读源码系列之Java集合LinkedList(下)轻松解读源码系列之ArrayList和LinkedList总结
  欢迎关注【程序员xiao熊】,今天的分享就到这里,欢迎大家在评论区进行交流

粉丝用虚幻5引擎重制了魔兽世界的巫妖王之怒版本魔兽世界巫妖王怀旧服已经上线,与此同时,一名国外的魔兽粉丝在近期发布了其自制的巫妖王之怒版本,不同的是使用了虚幻5引擎。该玩家叫Majusbeh,也被称作PixelsPlease,拿捏人性的羊了个羊,你看透了吗?最近风靡朋友圈的小游戏羊了个羊可谓是风头无两啊,冷静下来分析分析,这款一夜爆红的羊了个羊套可谓是套路满满了,那么我们这款爆红的游戏为什么火起来,这背后我们又可以看到些什么呢?来,今小白兔电商电子商务生活从无到有gal的基本玩法分为gal模拟操作,但gal没什么好说的。传统gal游戏的框架在性能系统等方面都保持了一个商业GAL的基本水平。而作为gal部分的多结尾设计并不明显,除了主角兔毛,明确致癌物幽门螺杆菌,究竟该怎么防幽门螺杆菌是慢性胃炎消化性溃疡的重要致病因子,并与胃癌及胃MALT淋巴瘤密切相关。1994年世界卫生组织国际癌症研究机构(WHOIARC)将幽门螺杆菌定为第类生物致癌因子,并明确为神奇的针刺法,三针解决困扰多年的耳鸣1耳鸣症状详解耳鸣它是没有相应的外界的声源,而主观上感觉到耳内或者是颅内有声音的感觉,这一类的患者可伴有听力下降,长期的耳鸣有可能还会影响到睡眠。有的患者还会有烦躁焦虑紧张恐惧或者吃得越咸,死得越早?哈佛研究吃盐过多,或增加28早亡风险老张最近突然确诊甲状腺癌,虽然病情不算十分严重,但还是挨了一刀,受了一些罪。朋友们来探望,问起得病的原因,有人猜测一定是你盐吃太多了,谁不知道你重口味,做的菜咸不拉几的。还有朋友说湿邪与痰湿的逻辑解析刚刚看了湿毒,一湿难除。开篇就是这样一段为什么说百病易去,一湿难除?因为湿气被称为万恶之邪万病之源,在致病的风寒暑湿燥火这六淫邪气中,湿邪最难除!这里湿就是水分多少。估计没有异议。没喝酒也成为了酒鬼,人体肠道会自动酿酒,这是怎么一回事?大家都知道在我们饮用或者食用含有酒精的食品,体内就会含有酒精,而有的人可能连这一些东西都没有碰,体内就含有酒精了,而且还让自己醉得不成样。其实,这是因为患有了一种疾病,称为自动酿酒俄主帅证实考虑加入亚足联!盼1年内完成,俄媒踢国足会很有趣北京时间9月29日,俄罗斯男足主帅卡尔平,在接受本国媒体的采访时证实,俄罗斯足协正在考虑加入亚足联。卡尔平说道让我们看看什么时候能够完成,六个月内可能不会,两三年后也许可以,但是我史上最奢侈世界杯?卡塔尔食宿,英格兰太太团都嫌贵记者寒冰报道对于想到卡塔尔现场享受足球盛宴的球迷们来说,他们可能要头痛了。虽然世界杯主办国在赛事期间食宿价格暴涨是常事,但从目前已曝光的价格来看,卡塔尔世界杯史上最贵的头衔恐怕是跑中国GPU设计商沐曦预计在2025年备妥游戏GPU产品线外媒TomsHardware于2022年9月19日刊载之评论指出,中国本土GPU设计商沐曦(METAX)预计在2025年前将应用于电玩游戏的GPU产品开发完成,并于2025年推出功
聪明散户选龙头股龙回头战法讲清晰了关注点赞谢谢编辑不易请多多支持聪明散户选龙头股龙回头战法讲清晰了,把握到了就去烧高香!光会看如何是买点如何是卖点还是不够的,心态的锻炼才是散户投资人最欠缺的,散户欠缺的是杀手的本质早资道美团回应在深圳设立消金公司传闻乐视控股被强制执行6174万美团拟在深圳设立消金公司?公司回应暂时没有明确的短期计划和目标近日,有消息称,美团消费金融在2023年或落户深圳。目前,推动该消费金融牌照落地的是深圳罗湖区。该区在2022年与央行豪掷超6000万,10转3派6元,今年第二只高送转股出炉!航运板块异动,3股量价齐升(附股)数据是个宝数据宝炒股少烦恼新瀚新材高送转公布方案,股价年初以来大涨超50。航运板块6股自2022年低点股价翻倍。2月17日晚间,凯瑞德新瀚新材2家公司公布了2022年年报同时,新瀚消费降级?不,是消费摆烂!2月财经新势力视频加载中01hr从现在的情况来看,年轻人根本不是在消费降级,而是在消费摆烂!前不久,周黑鸭对外发布了盈利警告,表示公司2022年度的净利润预期在2000万左右的规模中国氧化铁行业运营现状研究与发展战略调研报告(20222029年)一行业基本概述氧化铁(ferricoxide),化学式Fe2O3。又称烧褐铁矿烧赭土铁丹铁红红粉等。外观为红棕色粉末,易溶于强酸,中强酸,其红棕色粉末为一种低级颜料,工业上称氧化铁谁更优秀?香港与澳门的全面对比!香港和澳门作为中国的两个特别行政区,它们的历史文化和发展道路各有不同,但它们都是独特的充满活力的地方。在各自的领域中,香港和澳门都有着出色的表现。首先,让我们来看看香港在经济方面的结果通报!2022年度东莞建设行业企业量化评价排名公布2022年,东莞市建设行业广大企业紧紧围绕市委市政府既定的经济发展目标,积极营造诚信守法规范有序的建设市场氛围,大力推进建筑业转型升级加快创新发展,用心打造精品优质工程,为努力推动人这辈子最大的失败,不是贫穷,是60岁后遇到这两件怪事01hr有人在网络上提出了一个问题人这一生最大的失败,到底是什么呢?一部分人觉得,最大的失败,就是没有赚到钱一部分人觉得,最大的失败,就是无法功成名就一部分人觉得,最大的失败,就是土耳其震区将进入重建,新的挑战不断,地震记忆会如何影响该国大选?文齐然(发自土耳其安卡拉)编辑漆菲摄影齐然当我在夜里遇到那些微笑着的灾民时,距离地震已经过去一周。微笑比嚎哭更让人心酸。这里是几乎半个城市被夷为平地的距离震中以东一百多公里的土耳其海南岛战役如何打造陆军海战队海南岛战役,四野第15兵团在没有海空军配合的情况下,四渡琼州海峡,以伤亡4500余人的代价,歼灭国民党军3。3万余人,一举解放海南岛全境。当时,我军之所以能够依靠木船和少量机帆船成终于不再心慈手软,泽连斯基拒绝和谈,俄军动用新手段暴击乌克兰时至今日,俄乌冲突持续快一个年了,经过近一年的鏖战,可以说,双方都已经是元气大伤了。原本繁华富丽的乌克兰变成了一片废墟,到处都是断壁残垣,而俄罗斯同样也遭受了严重损失,不仅折损了大
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网