集合

所有集合框架都包含接口、实现类和算法,算法执行一些有用的计算 (如Collections实现了对集合的排序和遍历)

容器 集合 数组
长度 可变 固定
存储内容 对象 对象、基本数据类型
存储数据类型 不固定 固定
  1. Collection接口:存储一组重复、无序的对象

    • List接口:存储一组重复、有序的对象,重写equals方法保证唯一性

      ①ArrayList:动态数组,查询速度快,JDK7中默认容量是10,扩容到1.5倍

      ②Vector:类似于ArrayList,扩容到2倍,但线程安全
      Stack:例如递归
      ③LinkedList:底层数据结构是双向链表,增删速度快

      LinkedList特有方法
      boolean offerFirst() //在列表开头插入指定元素,优先级比addFirst()大
      E peekFirst() //获取但不删除此列表的第一个元素,此列表为空返回null 
      getFirst() //如果列表为空,会抛出异常
      E pollFirst() //获取并删除此列表的第一个元素
      ​
      数组和List间的转换:Arrays.asList(array)、list.toArray()
      
      
    • Set接口:存储一组唯一且无序的对象

      ①HashSet:基于HashMap ,通过hashCode和equals确保元素唯一性

      存储对象时先比较hashCode,若哈希表中有对应的hash码才调用equals方法判断hash码相同的对象是否为同一对象(返回false存储新对象)

      ②TreeSet:底层数据结构是二叉树(有序的遍历)

    • Queue接口

  2. Map接口:存储键值对(键唯一无序)

    ①HashTable:线程安全且键值不能为空,Properties的父类,保留类不建议使用

    注:ConcurrentHashMap位于JUC并发包,线程安全能解决性能低的问题

    ②HashMap:允许键或值为空,默认初始容量16

    • 底层是数组和单向链表,在JDK8中Hash冲突少时使用链表存储相同hash值的数据,多时使用红黑树

    • LinkedHashMap:散列表+双向链表

    ③TreeMap:底层数据结构是二叉树

    HashMap特有方法
    Object put(Object key,Object value) //放入集合
    boolean containsKey(Object key)
    Set keySet() //获取所有key的集合
    Collection values() //获取所有value的集合
    Set<Map.Entry<K,V>> entrySet() //获得键值对的集合
    
  3. Iterator接口:迭代器,即集合元素的取出方式

    • List有两种迭代器,Set只有一种迭代器,Map没有迭代器(转换为Set集合)

    • 增强for的底层原理是迭代器,只有列表迭代器能在遍历时增删改查

    • 迭代器是单列集合的,只有重写Iterable接口的iterator方法才能迭代遍历

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

推荐阅读更多精彩内容

  • 四、集合框架 1:String类:字符串(重点) (1)多个字符组成的一个序列,叫字符串。生活中很多数据的描述都采...
    佘大将军阅读 786评论 0 2
  • Java集合类可用于存储数量不等的对象,并可以实现常用的数据结构如栈,队列等,Java集合还可以用于保存具有映射关...
    小徐andorid阅读 1,978评论 0 13
  • 集合类框架的介绍: ![Java 集合类框架](https://upload-images.jianshu.io/...
    LynnGuo阅读 764评论 0 1
  • ArrayList实现原理要点概括 参考文献:http://zhangshixi.iteye.com/blog/6...
    晨光光阅读 1,097评论 0 1
  • 在编程中,常常需要集中存放多个数据。集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。所有的集合类都位于...
    一一一二二三阅读 427评论 0 1