Java集合(1)--Collection接口及其实现类

Collections是其他集合类的根接口

Set、List、Queue是子接口,同样不能实例化

子接口下面的实体类(如ArrayList)才可以实例化。

Collections中没有get()方法,Lisi和ArrayList中才有,因为get()方法不是所有集合类的共性

HashSet集合存入一个元素时,会调用该对象的hashCode()方法得到该对象的hashCode值,根据hashCode值决定存放位置

Iterator接口 定义了4个方法:hasNext() next() remove() forEachRemaining() 用于遍历Collections中的元素

Set接口 线程不安全 多线程操作同一集合时需要同步

  • HashSet:无序集合 以hashcode值计算存储位置存储 <- LinkedHashSet:链表无序集合,按添加顺序排列元素
  • SortedSet接口:有排列的集合 <- TreeSet:红黑树数据结构 默认按元素大小排列,可改成自然排序/定制排序
  • EnumSet:枚举集合

List接口(增加了与索引有关的方法)

有一个initialCapacity参数 默认为10 增加元素超过该数组长度时会自动增加

  • ArrayList 新 常用 线程不安全 性能高
  • Vector 古老 少用 线程安全 所以性能低 <- Stack子类 模拟栈的数据结构 有peak pop push等方法
  • LinkedList:既实现了List接口 也实现了Deque接口 可当作List集合也可当双边队列来使用

Queue接口 (模拟队列:先进先出)

  • PriorityQueue 非绝对标准的队列 以与元素大小排序 而非以进入队列顺序排序 可改成自然排序/定制排序
  • Deque接口:代表双端队列 头尾都可插入元素 可当成栈来用(只操作尾部)
  • Deque接口:<- ArrayDeque实现类 与ArrayList一样基于数组

ArrayList与ArrayDeque的实现机制相似,底层采用一个动态的,可重分配的Object[]数组来存储集合元素,当超容量时,系统在底层重新分配一个Object[]数组来存储集合元素

Vector也是以数组形式存储,但实现了线程同步,所以性能较低

LinkList与LinkedHashSet的实现机制,内部以链表的形式保存集合元素,随机访问时效率低,但插入,删除时性能高

List集合使用tips:

  • 对于数组型,遍历时采用随机访方法get() ; 对于链表型,遍历时采用迭代器(Iterator)
  • 需要经常插入、删除则用链表型
  • 若多个线程同时操作,可使用Collections将集合包装成线程安全的集合(后面讲)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容