A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

[我的日记] Java集合框架汇总

© 庭院深深深几许 金牌黑马   /  2019-4-28 16:27  /  1203 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  如今初学Java工程师越来越多,但对Java集合框架有深刻了解的又有几个呢?告诉您,当一个对象存入集合的时候,会变成Object类型,取出的时候需要转换类型。集合里存储的是引用,所以泛型不能使用基本类型。下面就详细讲述一下Java集合框架的具体内容:
  首先是常见集合,如下图:

20190130101255_7926.png  
 常见集合

20190130101323_2926.png
  集合概览

20190130101339_6676.png
  集合家族具体解析:
  Set是一种Collection,不过其中没有重复的对象;List也是一种Collection,其中的元素按顺序排列(不过可能有重复)。
  SortedSet和SortedMap是特殊的集和映射,其中的元素按顺序排列。
  Collection、Set、List、Map、SortedSet和SortedMap都是接口,不过java.util包定义了多个具体实现,例如基于数组和链表的列表,基于哈希表或二叉树的映射和集。除此之外,还有两个重要的接口:Iterator和Iterable,用于遍历集合中的对象。
  Collection接口
  Collection接口是参数化接口,表示由泛型E对象组成的集合。这个接口定义了很多方法,用来把对象添加到集合中,把对象从集合中移除,测试对象是否在集合中,以及遍历集合中的所有元素。还有一些方法可以把集合中的元素转换成数组,以及返回集合的大小。
  Set接口
  集(set)是无重复对象组成的集合:不能有两个引用指向同一个对象,或两个指向null的引用,如果对象a和b的引用满足条件a.equals(b),那么这两个对象也不能同时出现在集中。多数通用的Set实现都不会对元素排序,但并不禁止使用有序集(SortedSet和LinkedHashSet就有顺序)。而且集与列表等有序集合不同,一般认为,集的contains方法,不论以常数时间还是以对数时间都为1,运行效率都高。
  List接口
  List是一组有序的对象集合。列表中的每个元素都有特定的位置,而且List接口定义了一些方法,用于查询或设定特定位置(或叫索引)的元素。从这个角度来看,List对象和数组类似,不过列表的大小能按需变化,以适应其中元素的数量。和集不同,列表允许出现重复的元素。
  除了基于索引的get()和set()方法之外,List接口还定义了一些方法,用于把元素添加到特定的索引,把元素从特定的索引移除,或者返回指定值在列表中首次出现或最后出现的索引。从Collection接口继承的add()和remove()方法,前者把元素添加到列表末尾,后者把指定值从列表中首次出现的位置移除。继承的addAll()方法把指定集合中的所有元素添加到列表的末尾,或者插入指定的索引。retainAll()和removeAll()方法的表现与其他Collection对象一样,如果需要,会保留或删除多个相同的值。
  List接口没有定义操作索引范围的方法,但是定义了一个subList()方法。这个方法返回一个List对象,表示原列表指定范围内的元素。子列表会回馈父列表,只要修改了子列表,父列表立即就能察觉到变化。
  Map接口
  映射(map)是一系列键值对,一个键对应一个值。Map接口定义了用于定义和查询映射的API。Map接口属于Java集合框架,但没有扩展Collection接口,因此Map只是一种集合,而不是Collection类型。Map是参数化类型,有两个类型变量。类型变量K表示映射中键的类型,类型变量V表示键对应的值的类型。例如,如果有个映射,其键是String类型,对应的值是Integer类型,那么这个映射可以表示为Map。
  Map接口定义了几个最有用的方法:put()方法定义映射中的一个键值对,get()方法查询指定键对应的值,remove()方法把指定的键及对应的值从映射中删除。一般来说,实现Map接口的类都要能高效执行这三个基本方法:一般应该运行在常数时间中,而且绝不能比在对数时间中运行的性能差。
  Map的重要特性之一是,可以视作集合。虽然Map对象不是Collection类型,但映射的键可以看成Set对象,映射的值可以看成Collection对象,而映射的键值对可以看成由Map.Entry对象组成的Set对象。(Map.Entry是Map接口中定义的嵌套接口,表示一个键值对。)
  Queue接口和BlockingQueue接口
  队列(queue)是一组有序的元素,提取元素时按顺序从队头读取。队列一般按照插入元素的顺序实现,因此分成两类:先进先出(first-in,first-out,FIFO)队列和后进先出(last-in,first-out,LIFO)队列。
  LIFO队列也叫栈(stack),Java提供了Stack类,但强烈不建议使用,应该使用实现Deque接口的类。
  队列也可以使用其他顺序:优先队列(priorityqueue)根据外部Comparator对象或Comparable类型元素的自然顺序排序元素。与Set不同的是,Queue的实现往往允许出现重复的元素。而与List不同的是,Queue接口没有定义处理任意索引位元素的方法,只有队列的头一个元素能访问。Queue的所有实现都要具有一个固定的容量:队列已满时,不能再添加元素。类似地,队列为空时,不能再删除元素。很多基于队列的算法都会用到满和空这两个状态,所以Queue接口定义的方法通过返回值表明这两个状态,而不会抛出异常。具体而言,peek()和poll()方法返回null表示队列为空。因此,多数Queue接口的实现不允许用null作元素。
  阻塞式队列(blockingqueue)是一种定义了阻塞式put()和take()方法的队列。put()方法的作用是把元素添加到队列中,如果需要,这个方法会一直等待,直到队列中有存储元素的空间为止。而take()方法的作用是从队头移除元素,如果需要,这个方法会一直等待,直到队列中有元素可供移除为止。阻塞式队列是很多多线程算法的重要组成部分,因此BlockingQueue接口(扩展Queue接口)在java.util.concurrent包中定义。



  传智播客精益求精的教学品质,也赢得了学员口口相传,这也使得传智播客稳居国内IT培训的领先地位。
  java培训
  传智播客的java培训课程已经有十三年的历史。教育质量始终领先同行业。
  传智Java培训拥有6大课程优势:(http://www.itcast.cn/javaee/
  ①独有的一站式IT职业教育体系,让学员通过6个月的线下学习实现高起点就业, 12个月的线上在职进阶课实现升职加薪,大幅提升学员的职场晋升速度。
  ②60+套技术解决方案,覆盖职场常见开发问题,让学员就业后快速上手开发难题,轻松成为核心员工。
  ③超大项目库,覆盖7大就业主流热门行业,让学员边学习边积累项目开发经验。
  ④超千人投入的3大课程研发库,每年耗资千万打造领先行业的优质课程。
  ⑤传智&华为课程共建,持续为课程输出前沿技术。
  ⑥120+超强师资团队,多为总监、架构师出身,除了专业技能,还为你规划适合你的职业发展路线。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马