Java中常见数据结构:list与map -底层如何实现

1:集合 Collection(单列集合) List(有序,可重复) ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector 底层数据结构是数组,查询快,增删慢 线程安全,效率低 LinkedList 底层数据结构是链表,查询慢,增删快 线程不安全,效率高 Set(无序,惟一) HashSet 底层数据结构是哈希表。 哈希表依赖两个方法:hashCode()和equals() 执行顺序: 首先判断hashCode()值是否相同 是:继续执行equals(),看其返回值 是true:说明元素重复,不添加 是false:就直接添加到集合 否:就直接添加到集合 最终: 自动生成hashCode()和equals()便可 LinkedHashSet 底层数据结构由链表和哈希表组成。 由链表保证元素有序。 由哈希表保证元素惟一。 TreeSet 底层数据结构是红黑树。(是一种自平衡的二叉树) 如何保证元素惟一性呢? 根据比较的返回值是不是0来决定 如何保证元素的排序呢? 两种方式 天然排序(元素具有比较性) 让元素所属的类实现Comparable接口 比较器排序(集合具有比较性) 让集合接收一个Comparator的实现类对象 Map(双列集合) A:Map集合的数据结构仅仅针对键有效,与值无关。 B:存储的是键值对形式的元素,键惟一,值可重复。 HashMap 底层数据结构是哈希表。线程不安全,效率高 哈希表依赖两个方法:hashCode()和equals() 执行顺序: 首先判断hashCode()值是否相同 是:继续执行equals(),看其返回值 是true:说明元素重复,不添加 是false:就直接添加到集合 否:就直接添加到集合 最终: 自动生成hashCode()和equals()便可 LinkedHashMap 底层数据结构由链表和哈希表组成。 由链表保证元素有序。 由哈希表保证元素惟一。 Hashtable 底层数据结构是哈希表。线程安全,效率低 哈希表依赖两个方法:hashCode()和equals() 执行顺序: 首先判断hashCode()值是否相同 是:继续执行equals(),看其返回值 是true:说明元素重复,不添加 是false:就直接添加到集合 否:就直接添加到集合 最终: 自动生成hashCode()和equals()便可 TreeMap 底层数据结构是红黑树。(是一种自平衡的二叉树) 如何保证元素惟一性呢? 根据比较的返回值是不是0来决定 如何保证元素的排序呢? 两种方式 天然排序(元素具有比较性) 让元素所属的类实现Comparable接口 比较器排序(集合具有比较性) 让集合接收一个Comparator的实现类对象 2.关于集合选取原则 是不是键值对象形式: 是:Map 键是否须要排序: 是:TreeMap 否:HashMap 不知道,就使用HashMap。 否:Collection 元素是否惟一: 是:Set 元素是否须要排序: 是:TreeSet 否:HashSet 不知道,就使用HashSet 否:List 要安全吗: 是:Vector 否:ArrayList或者LinkedList 增删多:LinkedList 查询多:ArrayList 不知道,就使用ArrayList 不知道,就使用ArrayList 3:集合的常见方法及遍历方式 Collection: add() remove() contains() iterator() size() 遍历: 加强for 迭代器 |--List get() 遍历: 普通for |--Set Map: put() remove() containskey(),containsValue() keySet() get() value() entrySet() size() 遍历: 根据键找值 根据键值对对象分别找键和值

1:集合(本身补齐)html

Collection(单列集合)数组

List(有序,可重复)安全

ArrayList底层数据结构是数组,查询快,增删慢线程不安全,效率高Vector底层数据结构是数组,查询快,增删慢线程安全,效率低LinkedList底层数据结构是链表,查询慢,增删快线程不安全,效率高Set(无序,惟一)数据结构

HashSet底层数据结构是哈希表。哈希表依赖两个方法:hashCode()和equals()执行顺序:首先判断hashCode()值是否相同是:继续执行equals(),看其返回值是true:说明元素重复,不添加是false:就直接添加到集合否:就直接添加到集合最终:自动生成hashCode()和equals()便可LinkedHashSet底层数据结构由链表和哈希表组成。由链表保证元素有序。由哈希表保证元素惟一。多线程

TreeSet底层数据结构是红黑树。(是一种自平衡的二叉树)如何保证元素惟一性呢?spa

       根据比较的返回值是不是0来决定如何保证元素的排序呢?两种方式天然排序(元素具有比较性)让元素所属的类实现Comparable接口比较器排序(集合具有比较性)让集合接收一个Comparator的实现类对象Map(双列集合)A:Map集合的数据结构仅仅针对键有效,与值无关。B:存储的是键值对形式的元素,键惟一,值可重复。线程

HashMap底层数据结构是哈希表。线程不安全,效率高哈希表依赖两个方法:code

  hashCode()和equals()执行顺序:首先判断hashCode()值是否相同是:继续执行equals(),看其返回值是true:说明元素重复,不添加是false:就直接添加到集合否:就直接添加到集合最终:自动生成hashCode()和equals()便可LinkedHashMap底层数据结构由链表和哈希表组成。由链表保证元素有序。由哈希表保证元素惟一。htm

Hashtable底层数据结构是哈希表。线程安全,效率低哈希表依赖两个方法:对象

  hashCode()和equals()执行顺序:首先判断hashCode()值是否相同是:继续执行equals(),看其返回值是true:说明元素重复,不添加是false:就直接添加到集合否:就直接添加到集合最终:自动生成hashCode()和equals()便可TreeMap底层数据结构是红黑树。(是一种自平衡的二叉树)如何保证元素惟一性呢?根据比较的返回值是不是0来决定如何保证元素的排序呢?两种方式天然排序(元素具有比较性)让元素所属的类实现Comparable接口比较器排序(集合具有比较性)让集合接收一个Comparator的实现类对象

2:到底使用那种集合(本身补齐)看需求。

     是不是键值对象形式:是:Map键是否须要排序:是:TreeMap否:HashMap不知道,就使用HashMap。否:Collection元素是否惟一:是:Set元素是否须要排序:是:TreeSet否:HashSet不知道,就使用HashSet否:    List要安全吗:是:Vector(其实咱们也不用它,后面咱们讲解了多线程之后,我在给你回顾用谁)   否:ArrayList或者LinkedList增删多:LinkedList查询多:ArrayList不知道,就使用ArrayList不知道,就使用ArrayList3:集合的常见方法及遍历方式Collection:add()remove()contains()iterator()size()遍历:加强for迭代器|--Listget()遍历:普通for|--SetMap:put()remove()containskey(),containsValue()keySet()get()value()entrySet()size()遍历:根据键找值根据键值对对象分别找键和值做业:我讲解过的任意一个集合,我要求你存储什么,你就可以存储什么。而且,还要可以遍历出来。

4:ArrayList,LinkedList,HashSet,HashMap(掌握)存储字符串和自定义对象数据并遍历5:集合的嵌套遍历(理解)

注:

1.其中的Arralist  代码中大量的用了System.arraycopy () 方法 进行数组进行复制

System.arraycopy(elementData, index+1, elementData, index,
numMoved);

有个介绍能够看这里:http://www.cnblogs.com/nucdy/p/5867206.html

相关文章
相关标签/搜索