【Java笔记】高级教程之常见的数据结构的Java实现

对于数据结构的学习不单单需要知道各种数据结构的优缺点和应用场景,对于数据结构的源码和算法也是蕴含着很多可以学习的东西。
这里写图片描述

1、Map(映射类)

Map是按照Key-Value进行存储的数据结构,主要实现有HashMap,LinkedHashMap,TreeMap,

在不需要保证元素的顺序情况下,HashMap是非常高效的,主要是通过hashCode()和equal()方法进行哈希化存储的,所以要求存储的对象要实现hashCode()和equal()方法才能提高性能。HashMap具体的内部机制可以看
高爽|Coder的HashMap深度解析

而LinkedHashMap可以保证存储元素的顺序;可以按照元素的存储顺序或者元素的访问顺序进行排序存储,它的底层是由HashMap加上循环双向链表实现的。其中LinkedHashMap的具体机制可以看 LinkedHashMap及其源码分析

TreeMap在遍历排序好的键值是非常高效率的,默认是按照元素的实现Comprable接口方法进行排序的,也可以传入Comparator比较器接口进行比较排序
以下是TreeMap的put(K key, V value)源码分析

import java.util.*;

public class CollectionsDemo {

   public static void main(String[] args) {
      Map m1 = new HashMap(); 
      m1.put("Zara", "8");
      m1.put("Mahnaz", "31");
      m1.put("Ayan", "12");
      m1.put("Daisy", "14");
      System.out.println();
      System.out.println(" Map Elements");
      System.out.print("\t" + m1);
   }
}

2、List(列表)

List列表允许存储相同元素,插入元素和按照下标获取元素方便,具体实现有ArrayList,LinkedList和Vector,

ArrayList底层基于数组实现的,按顺序存储元素以及快速按照元素下标进行获取元素,不可同步的;

而Vector底层也是数组,可进行同步操作,在多线程环境下可以使用。使用Vector类最主要的好处就是在创建对象的时候不必给对象指定大小,它的大小会根据需要动态的变化。;

LinkedList链表的具体机制如下图:可以在具体下标位置删除和添加元素,在许多需要根据具体下标添加和删除元素的应用场景下比ArrayList有更好的性能。

综上:Array List在不需要同步操作及不需要频繁删除任意下标的元素时推荐使用,Vector是在同步场景下使用,LinkedList是在需要频繁删除和添加任意下标的元素时使用

3、Set(规则集)

散列集,不能保证存储元素的顺序,保证存储元素的不可重复性。具体实现由HashSet,LinkedHashSet,TreeSet,

HashSet是哈希散列集,底层由HashMap支持的,主要使用hashCode()和equal()方法确保Key值不可重复性来保证元素的唯一性

LinkedHashSet底层由LinkedHashMap,则可以保证按照元素插入规则集的顺序进行提取。

TreeSet底层是由TreeMap支持的,可以按照Comparable接口对存储对象排序或者Comparator比较器接口进行存储对象的比较排序

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章