1. 集合分类:
    单列集合(Collection): 每次存储1个元素
    双列集合(Map): 每次存储2个元素
    (有对应关系的数据—用Map双列集合存储)

  2. Collection(接口)基本方法:
    add(元素): 添加元素 clear清空集合元素 size(): 集合长度
    contains判断是否包含某元素 toArray 将集合转为数组 forEach 逐一处理(遍历)
    集合1.addAll(集合2): 将后集合的元素 加到前集合后面 eg. list1.addAll(list2)
    isEmpty判断是否为空集合 (size为0的是空集合) ( !list.isEmpty() 表示集合不是空 )
    remove(元素)—删除出现元素, 集合中可能没有该元素, 所以返回boolean值
    注意:
    要删除的元素是小于集合长度的整数时, 要将元素转为包装类Integer.valueOf(元素)
    父类定义的是共性内容, Collection没有带索引的方法, List才有带索引的方法(增删改查)
    集合存储的是对象时, 元素是地址, 将地址和对象关联起来—类类型变量 = 角标值

  3. Collection接口:
    List—ArrayList / LinkedList
    Set—HashSet / LinkedHashSet

  4. List集合:
    add (角标, 新元素): 将新元素插入到指定角标
    (其他元素顺延) (插入到最后—直接用add(元素)
    remove(角标)—后续元素向前挪1位(i–) 返回被删除的元素
    集合&&Stream流 (汇总)
    set(角标, 新元素): 将指定角标改为新元素 (返回修改前的元素)
    get(角标): 获取角标值
    (add直接调用 size输出调用 set/get/remove用赋值调用时 类型就是元素类型)

  5. ArrayList数组集合 (增 删 改 查 / 长度)
    格式: ArrayList<类型> 集合名 = new ArrayList<>();

  6. LinkedList链表集合: LinkedList link = new LingkedList()
    addFirst(元素): 将元素添加到链表头 (addFirst是倒序存储数据)
    addLast(元素): 将元素添加到链表尾 (常规存储方式addLast)
    getFirst(): 获取链表头元素
    getLast(): 获取链表尾元素
    removeFirst(): 删除链表头元素, 返回被删除的元素
    removeLast(): 删除链表尾元素, 返回被删除的元素
    LinkedList查找元素:
    角标<长度/2时, 从链表头开始查, 否则 从链表尾开始查 (内部有算法, 会自动识别)

  7. Map集合:
    put(键, 值): 添加/修改键值对 (一般直接调用) eg. map.put(“001”, “jack”)
    get(键): 获取键对应的值 (键不存在 返回null) eg. map.get(key)
    remove(键): 删除指定键的键值对, 返回键对应的值, 如果键不存在, 返回null
    (Map增删查 返回的都是原来的值, 没有—返回null)

要增减键值对的值:
直接用map.put() 添加 eg. map.put(“柳岩”, map.get(“柳岩”) + 300);

clear(): 清空集合
size(): 获取Map集合的键值对个数
isEmpty(): 判断集合是否为空 (键值对个数为0, 就是空集合)
containsKey(键): 判断集合中是否包含指定的键

  1. HashMap: (哈希表结构) 无序 无索引 元素不可重复
    无序: 指不是按添加顺序存储, 而是按哈希值的取模值存储
    创建格式: Map<键类型, 值类型> 集合名 = new HashMap<>();

键值对—键唯一, 值可以重复 (不能重复的是键)
键类型是对象时, 对象类要重写equals和hashCode方法 (键要唯一)
键类型不是对象时, 对象类可以不重写这2个方法 (值可以重复)
9. LinkedHashMap: (哈希表+链表结构) 跟HashMap功能一样, 可以让元素存取有序


Stream流 操作集合/数组
每个数组/集合 都可以转为流对象
数组/集合: 筛选/转型/抽前/删前/拼接—用Stream流 (链式编程)

单列集合转流对象: 集合名.stream()
双列集合转流对象: 键集合/值集合/entry集合.stream()
数组转流对象: Stream.of(数组名/同类数据) — 同类数据就是可变参, 可变参就是数组
(转为流对象, 要指明元素类型)

流对象转List集合: 流对象.collect(Collectors.toList())
流对象转Set集合: 流对象.collect(Collectors.toSet())
流对象转数组: 流对象.toArray(类型[ ] :: new)

转化成了其他流, 原来的流就被关闭了, 后续不能再使用
调用了concat拼接, 它的子流就被关闭了, 后续不能再使用子流
调用了count / forEach方法, 该流就被关闭了, 后续不能在使用该流对象

链式方法: (返回流对象的方法)
limit(n): 抽取前n个元素
skip(n): 删除前n个元素
(n不能是负数, 否则会报异常)
map(Lambda): 转换类型
filter(Lambda): 筛选符合要求的元素
Stream.concat(流1, 流2): 按顺序拼接元素
(concat是静态方法, 要用类名调用 // concat要链式编程的话, 必须写在最前面)

终结方法:
count(): 流的长度
forEach(System.out :: println): 逐一打印
(count 和 forEach是终结方法, 要链式编程的话, 必须写在最后面)

没有元素的流 是空流
打印 流对象内容: 要调用forEach(Lambda)方法 (直接打印 流对象 显示的是地址)

Stream流的分类
串行流:在当前线程 按顺序执行操作 (不开线程)
并行流:开启多个线程 和当前线程一起执行操作

转为并行流:
集合名. parallelStream() 流对象. parallel()
(注意: 只在涉及到IO 且 数据间没依赖关系时, 才用并行流, 其他场景串行流效率更高)

相关文章:

  • 2021-06-19
  • 2021-05-15
  • 2021-07-23
  • 2021-08-10
猜你喜欢
  • 2021-05-19
  • 2021-11-23
  • 2021-05-24
  • 2021-04-03
  • 2021-12-26
相关资源
相似解决方案