Skip to content

JavaCollection

kcp edited this page Oct 13, 2020 · 2 revisions

title: Java的集合 date: 2018-11-21 10:56:52 tags: - 数据结构 categories: - Java

目录 start

  1. JDK中的集合
    1. 集合继承和实现关系
    2. Iterator
    3. Map
      1. HashMap
      2. ConcurrentHashMap
      3. TreeMap
    4. List
    5. Set
  2. 第三方开源集合框架
    1. fastutil
    2. Koloboke
    3. Trove

目录 end|2020-04-27 23:42|


JDK中的集合

Java集合必会14问(精选面试题整理)

集合继承和实现关系

  • Collection 接口

    • List 接口
      • ArrayList
      • LinkedList 也实现了Queue接口 双向链表实现
      • Vector
    • Set 接口 内容不允许重复
      • SortedSet 接口 单值排序接口
        • TreeSet
    • Queue 接口 队列接口
      • PiorityQueue
  • Map接口

    • HashMap 无序, key不重复
    • HashTable 无序, key不重复
    • TreeMap 按key排序, key不重复
    • IdentityMap key可重复
    • WeakHashMap 弱引用Map集合

Iterator

迭代器


Map

HashMap 键能为null, HashTable则不可以, 而且HashTable是线程安全的(依靠 synchronized 关键字实现)

参考: Java Map 集合类简介

HashMap

ConcurrentHashMap

避免 ConcurrentModificationException

TreeMap

参考: TreeMap 红黑树算法实现


List

interface

包括的方法有: List method

List接口有众多实现, 最常用的 ArrayList LinkedList


stackoverflow: list add then unsupportedoperationexception

有时候会使用 Arrays.asList() 或者 Collections.singletonList() 来快速生成 List
但是 这两个生成的实例都是返回 AbstractList 的实现类, 其 add remove 方法是没有实现的, 如果调用了就会抛出异常

    public void add(int index, E element) {
        throw new UnsupportedOperationException();
    }

这是因为, 这个类设计就是采用的定长数组来实现List, 所以不能对其中元素进行更改 类似的还有 Collections.emptyXxx()


Set

  • Set是无序的,但是StringRedisTemplate的对象操作返回的set竟然是有序的
    • 因为有一个类是SortSet,顾名思义,所以是有序的,要继续多学习和使用Java原生的集合对象了

3分钟搞掂Set集合


第三方开源集合框架

fastutil

Github

Koloboke

Github

Trove

BitBucket

Summary

Clone this wiki locally