集合框架学习(目录总贴,待更新。。。)

List接口

存放的对象是有序的,而且是可以重复的,关注索引,有一系列的索引方法,所以查询速度快,在修改元素时涉及到元素的位置移动,所以增加和删除元素慢。

Arraylist(数组)

  • 线程异步,线程不安全。
  • 动态数组结构,序号索引元素,随机访问set、get较快。
  • 每次扩充50%。

Vector(数组)

  • 使用了synchronized方法,线程同步,线程安全。
  • 动态数组结构,序号索引元素,随机访问set、get较快。查找一个指定位置的数据性能等同于ArrayList。
  • 每次扩充100%,在存储数据量较大时,性能优于ArrayList。

Vector的源码可以参考Arraylist(数组)在其方法上添加了synchronized关键字保证同步。

Linkedlist(链表)

  • 线程异步,线程不安全。
  • 链表结构,分配的内存不是连续的,只需要修改前后指针,所以新增删除元素速度比较快。

Set接口

Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。

Hashset(HashMap)

  • HashSet的存储是无序的 ,没有前后关系,他并不是线性结构的集合。
  • 内部使用HashMap,将元素存储为键值对(键值对的键为将存储的值,键值对的值为假的Object对象(元素,Object)),所以不能存储equals相同的两个元素。
  • 一般情况下,无序的数据结构采用的算法效率是优于有序结构的。

TreeSet(TreeMap

  • TreeSet的存储是有序的 ,没有重复元素的集合。
  • 内部使用TreeMap,底层为树结构,使用它可以从Set中提取有序序列,同时元素必须实现comparable接口。

Map接口

Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。

HashMap

  • 线程异步、线程不安全。
  • 根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。
  • 因为键对象不能重复,所以HashMap最多只允许一条记录的键为Null,允许多条记录的值为Null。

Hashtable

  • 线程同步、线程安全的。
  • Hashtale在写入时比较慢,不允许记录的键或者值为null,同时效率较低。

TreeMap

  • 线程异步,线程不安全。
  • 能够根据键进行排序,默认按键值的升序排序,遍历TreeMap时得到的数据是排过序的。
  • 不允许键为null。
posted @ 2018-03-14 10:45  魔方Cube  阅读(128)  评论(0编辑  收藏  举报