集合常用方法 list、set、map、queue

111 阅读3分钟

集合、数组、类的使用时机

  1. 当要存储多个相同类型的数据时——数组
  2. 当要存储多个不同类型的数据时——创建类 -> 构造方法创建对象
  3. 当要存储多个相同类型的对象时—— 用泛型集合
  4. 当要存储多个不同类型的对象时—— 用集合

数组与集合的区别

数组:

  1. 连续的内存空间,存储单一类型的数据
  2. 内存空间固定长度
  3. 插入删除不方便,但查询快捷。
  4. 数据类型可以是基本数据类型也可以是引用数据类型

集合

  1. 存储不同类型的对象
  2. 内存空间可以动态调整
  3. 数据类型只能是引用类型

集合的接口分布与方法

集合接口:Collection 接口与 Map 接口,前者是单一对象的接口,后者是单对对象(key-value)的接口。

Collection的三个子接口

  1. List接口

    1. ArrayList,动态数组
    2. LinkedList,双向链表
    3. Stack , 栈,先进后出
    4. vector , 安全数组,效率慢
  2. Queue接口

    priorityQueue:优先队列,根据优先级进行出队入队

  3. Set 接口

    1. HashSet,以哈希表的结构存储数据。

    2. TreeSet,以二叉树的结构来存储数据

Collection接口

  1. add(),添加元素
  2. addAll(),添加元素集
  3. remove(),移除元素
  4. removeAll(),移除元素集
  5. contain(),是否包含元素
  6. containAll(),是否包含元素集
  7. size(),集合大小

List接口

  1. add(),添加元素
  2. addAll(),添加元素集
  3. remove(),移除元素
  4. size(),大小
  5. get(),获得元素
  6. subList(Int formindex,int toindex),返回从formindex(包含) 到 toinedx (不包含)的数据集。

Queue接口

  • boolean offer(E e) -插入元素进队列

  • E poll() - 移除元素进队列

  • E peek() - 返回队首元素

Set 接口

  1. HashSet,以哈希表用于数据管理
  2. TreeSet,以二叉树用于数据管理

HashSet 原理

  1. 插入数据时,计算该数据的哈希值。
  2. 将哈希值交给哈希算法找到对应的索引位置
  3. 如果位置为空就插入数据,如果不为空,判断前者与后者是否相等
  4. 如果相等则不插入,如果不相等则排在前者后面
  5. 下一个插入时也是如此

TreeSet,有序排序时使用。

实现方式

  1. 使用自然排序方法,类实现接口 Comparable
  2. 使用指定规则排序方法,传入 comparator 参数 return a - b 升序 return b - a 降序

iterater,迭代器的方法

  1. hasnext(),是否有下一个
  2. next(),返回下一个值
  3. remove(),移除当前值

Set 的方法

  1. add(),添加元素
  2. addALL(),添加元素集
  3. get(),根据索引获取元素
  4. size(),获取集合大小
  5. remove(),根据索引移除元素
  6. contains(),是否包含元素
  7. containAll(),是否包含元素集

Set遍历元素的方法:toString,迭代器,forEach List除了以上三种还有一个get()方法可以遍历

map接口

map是存储键值对,用于存储成对的集合 map<K,V>,参数类型:

  1. K 为键值不可重复
  2. V 为值

常见的实现类是

  • HashMap
  • TreeMap

方法:

  1. put(),新增则返回null,修改则返回之前的Value
  2. remove(),key不存在则返回null,删除成功则返回之前的Value
  3. get(),根据值获取Value
  4. containKey(),判断Key是否存在
  5. containValue(),判断Value是否存在
  6. entrySet(),返回包含映射关系的Set视图
  7. 使用getKey(),获取相应的key
  8. 使用getValue(),获取相应的Value
  9. KeySet(),返回Set视图

参考:blog.csdn.net/xyphf/artic…