java 集合基本概念扫盲贴

231 阅读3分钟

java 集合类扫盲贴,一起学习一个进步

一秒钟辨识集合结构

集合类知识结构


学习java 集合前了解下数据结构的基本概念:

1数组:
    概念:存中划分出一块连续的内存,数据顺序存储,读取数据时需要提供数组的索引,java 只有相同类型的数据才会存放在一个数组中。

    优点: 内存地址连续,寻址读取数据容易,快速访问。
    缺点: add,delete 需要挪动位置,不适合插入和删除。
2链表:
  概念:不会先划出一块连续的内存,存储数据的内存中的会划分两块区域 (数据区,指针区[记录下个数据在哪的区]),链表是线性表,但是不是按线性存储数据。

  优点:能利用好碎片空间,add,delete不需挪动位置 ,改变对应位置的记录OK,适合插入和删除操作。
  缺点:查询数据需要从0 号数据开始,所以查找不容易。
3栈:
  概念:先进后出的数据结构,数组和链表都可以生成栈

  优缺点:基础构成它数组或者链表的优缺点。

队列

  概念: 队列是一种先进先出的数据结构,数组和链表也都可以生成队列,数组和链表都可以生成栈

  优缺点:基础构成它数组或者链表的优缺点。

collection


1.list 实现类

(1)基本概念:用于存放多元素,因为维护元素次序,所以允许元素重复。

ArrayList
  • 数据结构:数组方式实现
  • 非线程安全: 多个线程可以重复访问一个ArrayList 对象
  • 数据:可重复,可为null
优缺点:

 1.同数组

 2.或多线程环境下资源不需要写、更新,只需要读取,使用,或资源不需要受保护,使用ArrayList就大大提高了效率。 (可配合线程的读写锁)

   优和调优:
  1.可预设设置  list 的大小 list.ensureCapacity(N); 提高添加新元素的速度
  2.遍历时设置 for(int i = 0,size = list.size(); i < size ; i ++){}防止每次检测大小,效率大大提高
vector
  • 数据结构:数组方式实现
  • 线程安全:某一刻只能有一个线程访问统一ArrayList 对象,其每个方法都为同步方法【sychronized】
  • 数据:同上
优缺点:

  1.实现线程同步很高的花费 -> 访问比ArrayList 慢
  2.多线程环境下,访问收保护的资源,用vector 显得十分简洁
LinkedList
  • 数据结构:链表的实现方式
  • 非线程安全:多个线程可以重复访问一个LinkedList对象,多线程程序需要自己 实现同步(多线程程序实现同步的方式)
  • 数据:同上
  • 用途:当作堆栈、队列和双向队列使用

优缺点:同链表

优化和调优:
  1.迭代器访问LinkedList 最好 ,因为LinkedList 进行随机访问时,只会进行一次列表访问。

2.set 集合实现类

(1)基本概念:元素是独一无二的。

HashSet
  • 数据结构:hash 链表 表的方式存储,内存地址不连续,安装hashCode值得顺序存储的
  • 非线程安全: 读取速度快
  • 数据:不可重复(equals 方法保证数据的唯一性)
TreeSet
  • 数据结构: 红黑树(红黑树算法的规则: 左小右大。)
  • 非线程安全: 没有实现线程同步,读取速度快
  • 数据:不可重复(通过compareTo或者compare方法中的来保证元素的唯一性)

map


HashMap
  • 数据结构:散列表,存储内容key-value 形式的映射。
  • 非线程安全:没有实现线程同步。
  • 数据:可以接受为null的键值(key)和值(value).

详解HashMap

HashTable
  • 数据结构:散列表,存储内容key-value 形式的映射。
  • 线程安全:因为值多线程同时修改HashMap 会ConcurrentModificationException.
  • 数据:不接受 null 为 key和 null 为value 值。