Java笔记:单线程集合类

目录

  1. List 接口
  2. Set 接口
  3. Queue 接口
  4. Map 接口
  5. 集合遍历
  6. 集合算法

说明
从应用的角度只需关注两个问题:
(1)如何操作集合,主要涉及增删查改,排序和遍历。
(2)如何选择集合,主要考虑应用场景和集合的内部实现方式。


1. List 接口

  • 接口特性:保持元素插入位置;可通过索引访问元素;允许重复元素。
  • 实现类:
    (1)ArrayList:采用动态数组实现。
    (2)LinkedList:采用双向链表实现。
  • 常用方法:add,get,set,remove,iterator,toArray,forEach,sort。
  • 备注:只有在列表头部位置增删元素时,ArrayList 才会明显比 LinkedList 低效,因为 ArrayList 需要搬动大量元素。在其它位置增删查改元素时,ArrayList 大部分情况下会明显优于 LinkedList,因为增删改都要建立在查的基础上,而 LinkedList 在随机位置上查的效率是很低的,且调整双向指针和开辟新空间也会消耗不少时间。因此,在实际应用中一般使用的是 ArrayList (以实测为主,不要教条主义)。

2. Set 接口

  • 接口特性:不包含重复元素。
  • 实现类:
    (1)HashSet:无序集;采用链表数组实现。
    (2)TreeSet:有序集;采用红黑树实现;要求元素实现 Comparable 接口。
    (3)LinkedHashSet:保序集;在链表数组的基础上采用双向链表记录位序。
    (4)EnumSet:枚举集;采用位序列实现。
  • 常用方法:add,remove,iterator,toArray,forEach。
  • 备注:在实际应用中一般使用 HashSet 比较多。

3. Queue 接口

  • 接口特性:限定在列表的头部/尾部位置进行插入/删除元素。
  • 实现类:
    (1)ArrayQueue:双端队列;采用循环数组实现。
    (2)PriorityQueue:优先级队列;采用堆实现;要求元素实现 Comparable 接口。
    (3)LinkedList:采用双向链表实现。
  • 常用方法:add,offer,remove,poll,element,peek。
  • 备注:在实际应用中使用多线程队列比较多。

4. Map 接口

  • 接口特性:不能包含重复键。
  • 实现类:
    (1)HashMap:无序映射表;实现方式类似于HashSet。
    (2)TreeMap:有序映射表;实现方式类似于TreeSet。
    (3)LinkedHashMap:保序映射表;实现方式类似于LinkedHashMap。
    (4)EnumMap:枚举映射表;采用值数组实现。
    (5)WeakHashMap:弱引用映射表。
    (6)IdentityHashMap:基于等号比较键值的映射表。
  • 常用方法:get,put,replace,remove,keySet,entrySet,values。
  • 备注:在实际应用中一般使用 HashMap 比较多。

5. 集合遍历

  • 优先采用 for-each 循环遍历,其次采用迭代器遍历。
  • 如果要对集合内的元素进行某种统一的操作,可以使用 forEach 方法。
  • 虽然 List 接口支持 for 循环遍历,但要注意用 for 循环遍历 LinkedList 要比用 for-each 循环或迭代器慢得多。

6. 集合算法

  • Collections 是集合类的辅助类,用于提供操作集合的各种方法,如排序,混排和二分查找等。有的方法要求集合实现某种接口,如排序算法要求集合实现 Comparable 接口;二分查找算法要求集合实现 Comparable 接口,且实现 RandomAccess 接口(否则会退化成线性查找算法)。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容