Java集合

基本概念:

数组可以储存基本类型和数组,集合类只能储存引用对象,不能储存基本类型

Collection接口和Iterator接口

  • Iterator接口是Collection接口的父接口
  • Iterator接口提供hasNext、next、remove等迭代器方法
  • 集合的迭代器遍历:
List<String> strings = new ArrayList<>();

Iterator<String> iterator = strings.iterator();//集合.iterator返回迭代器
if (iterator.hasNext()) { //hasNext判断有无下一个元素
    System.out.println(iterator.next()); //next()返回下一项
    iterator.remove(); //remove删除上一次next的元素
}
  • Collection接口是Set、List、Queue的父接口,提供add、remove、contain、clear、isEmpty、size、toArray等集合的增删改查方法

Set接口

  • HashSet
    • HashSet使用数组来维护,通过hashCode来确定存储位置
    • HashSet先hashCode判断元素存储位置,再通过equals判断是否是同一元素(替换或者追加链表元素)
    • 尽量不要去修改set中可变对象的实例变量,尤其是参与hashCode计算的实例变量,这会导致set元素混乱
  • LinkedHashSet是有序set,记录元素的插入顺序
    • 使用链表来维护,其查找速度比HashSet慢,优势在于遍历很快
  • TreeSet是自动排序的set
    • TreeSet调用元素的compareTo方法自动升序排序
    • 内部通过红黑树维护元素顺序,其查找和插入速度都是O(logn)
    • 元素必须实现Comparable方法,否则会抛出异常
    • 与HashSet不同,TreeSet判断相等的唯一标准是compareTo方法返回0,如果与现有元素相等,将无法插入
    • TreeSet只在插入时排序,之后如果修改元素,不会重新排序
  • TreeSet的特殊方法:
    • first、last
    • lower、higher,返回大于/小于参数的第一个元素
    • subSet、headSet、tailSet,返回大于/小于/一个范围的set子集
  • 性能比较
    • HashSet总是比TreeSet性能好,因为TreeSet需要维护红黑树来保持排序
    • LinkedHashSet比HashSet遍历更快,但插入、删除稍慢

List接口

  • List是带索引的有序集合,因此提供的方法大多与索引有关
  • 根据index,可以add、remove、get、set、indexOf、subList

队列接口Queue、双向队列Deque接口

  • Deque接口是Queue的子接口
  • Deque接口的实现类:ArrayDeque、LinkedList
  • ArrayDeque以数组形式保存,随机访问速度更快
  • LinkedList以链表形式保存,实现了List接口、Deque接口,可以作为List、队列、栈使用

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java集合类可用于存储数量不等的对象,并可以实现常用的数据结构如栈,队列等,Java集合还可以用于保存具有映射关...
    小徐andorid阅读 5,952评论 0 13
  • 集合概述 集合用来储存数量不等的对象,且只能保存对象,实际保存的是对象的引用变量 主要由两个接口派生而出,Coll...
    Utte阅读 2,958评论 0 0
  • 以下是《疯狂Java讲义》中的一些知识,如有错误,烦请指正。 集合概述 Java集合可以分为Set、List、Ma...
    hainingwyx阅读 3,567评论 0 1
  • 3.3 集合 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另...
    闫子扬阅读 4,053评论 0 1
  • 原文地址 Java集合 Java集合框架:是一种工具类,就像是一个容器可以存储任意数量的具有共同属性的对象。 Ja...
    gyl_coder阅读 4,525评论 0 8