0%

HashTable继承Dictionary类,实现Map接口。其中Dictionary类是任何可将键映射到相应值的类(如 Hashtable)的抽象父类。每个键和每个值都是一个对象。在任何一个 Dictionary 对象中,每个键至多与一个值相关联。Map是”key-value键值对”接口。

阅读全文 »

HashMap基于哈希表的Map接口实现,是以key-value存储形式存在。

系统会根据hash算法来计算key-value的存储位置,可以通过key快速存取value。

HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,然后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。

HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。 HashMap在每个链表节点中储存键值对对象。

当两个不同的键对象的hashcode相同时会发生什么? 它们会储存在同一个bucket位置的链表中。键对象的equals()方法用来找到键值对。

阅读全文 »

  1. CopyOnWriteArrayList,写数组的拷贝,支持高效率并发且是线程安全的,读操作无锁的ArrayList。所有可变操作都是通过对底层数组进行一次新的复制来实现。
  2. CopyOnWriteArrayList适合使用在读操作远远大于写操作的场景里,比如缓存。它不存在扩容的概念,每次写操作都要复制一个副本,在副本的基础上修改后改变Array引用。CopyOnWriteArrayList中写操作需要大面积复制数组,所以性能肯定很差
  3. 在迭代器上进行的元素更改操作(remove、set和add)不受支持。这些方法将抛出UnsupportedOperationException。
阅读全文 »

Vector简介

  1. Vector和ArrayList类似,基于Object数组方式实现
  2. Vector是同步访问的,操作是线程安全的
阅读全文 »

LinkedList简介

  1. LinkedList基于双向链表实现
  2. LinkedList相对于Arraylist来说,get和set等随机访问会比较慢,LinkedList需要移动指针;add和remove会比较快。
  3. LinkedList类还为在列表开头和结尾的get,remove,insert元素提供统一的命名方法,这些操作允许将链表用做堆栈、队列或者双端队列。此类实现 Deque 接口,为 add、poll 提供先进先出队列操作,以及其他堆栈和双端队列操作。
  4. 非线程安全,不同步。
阅读全文 »

ArrayList简介

ArrayList实现了List接口,内部以数组存储数据,允许重复的值。由于内部是数组实现,所以ArrayList具有数组所有的特性,通过索引支持随机访问,查询速度快,但是插入和删除的效率比较低。

ArrayList默认初始容量为10,每次添加新元素时都会检查是否需要扩容操作。扩容操作需要重新拷贝数组,比较耗时,所以如果预先能知道数组的大小,在初始化时候可以指定一个初始容量。

ArrayList不是线程安全的,使用时应注意。

阅读全文 »

数据库索引的定义

数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。提高数据库表数据访问速度的数据库对象.

阅读全文 »

分库分表简介

此部分简介都是参考别人已经有的文章,目前还没在实际中使用分库分表,对此部分知识的理解还不够透彻.以后会添加自己的经验.

Fork me on GitHub