zoukankan      html  css  js  c++  java
  • java数据结构简单点


    java常用的数据结构
    一 集合框架主要就是Collection和Map:

    1、Collection包含了List和Set两大分支。

    (1)List是一个有序的集合,每一个元素都有它的索引。第一个元素的索引值是0。List的实现类有ArrayList,LinkedList, Vector, Stack。
    (1)ArrayList

    ArrayList是一个动态数组,它允许任何符合规则的元素插入包括null。每一个ArrayList都有一个size=10,在每次向容器中增加元素的同时都会进行容量检查,一旦发现容量不足,会自动扩充容量,新的大小是原有容量的1.5倍。
    假如有20个数据需要添加,那么会分别在第一次的时候,将ArrayList的容量变为10 (如下图一);之后扩容会按照1.5倍增长。也就是当添加第11个数据的时候,Arraylist继续扩容变为10*1.5=15(如下图二);当添加第16个数据时,继续扩容变为15 * 1.5 =22个
    ArrayList擅长于随机访问。同时ArrayList是非同步的。
    (2)LinkedList

    ArrayList是一个动态数组,而LinkedList是一个双向链表。所以它除了有ArrayList的基本操作方法外还额外提供了get,remove,insert方法在LinkedList的首部或尾部。

    LinkedList不能随机访问,它所有的操作都是要按照双重链表的需要执行。在列表中索引的操作将从开头或结尾遍历列表(从靠近指定索引的一端)。这样做的好处就是可以通过较低的代价在List中进行插入和删除操作。

    与ArrayList一样,LinkedList也是非同步的。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List: List list = Collections.synchronizedList(new LinkedList(...));
    如果需要快速访问数据,很少或不插入和删除元素,就应该用数组;相反, 如果需要经常插入和删除元素就需要用链表数据结构了。

    (3)Vector

    与ArrayList相似,Vector也是动态数组,但是Vector是同步的,所以说Vector是线程安全的动态数组,由于线程的同步肯定要影响性能,所以说ArrayList的性能比Vector好。
    Vector扩容的时候会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间,开发的时候如果是对性能,内存空间要求高那就用arrayList,如果是对安全要求高就用Vector

    (4)Stack

    Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop 方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。


    (2)Set是一个不允许有重复元素的集合。Set的实现类有HastSet和TreeSet。

    * HashSet:哈希表是通过使用称为散列法的机制来存储信息的,元素并没有以某种特定顺序来存放;
    * LinkedHashSet:以元素插入的顺序来维护集合的链接表,允许以插入的顺序在集合中迭代;
    * TreeSet:提供一个使用树结构存储Set接口的实现,对象以升序顺序存储,访问和遍历的时间很快。
    2、Map是一个映射接口,即key-value键值对。Map中的每一个元素包含“一个key”和“key对应的value”。key不能相同,value可以相同


    HashTable与HashMap

    相同点:

    (1)都实现了Map<K,V>, Cloneable, Serializable 接口。
    (2)都是存储"键值对(key-value)"的散列表,而且都是采用拉链法实现的。

    不同点:

    (1)同步性:HashTable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的 。
    (2)对null值的处理:HashMap的key、value都可为null,HashTable的key、value都不可为null 。
    (3)基类不同:HashMap继承于AbstractMap,而Hashtable继承于Dictionary。
    (4)支持的遍历种类不同:HashMap只支持Iterator(迭代器)遍历。而Hashtable支持Iterator(迭代器)和Enumeration(枚举器)两种方式遍历。

  • 相关阅读:
    2019年8月下旬
    2019年8月上旬
    2019年7月 vue专题
    2019年7月上
    mysql安装 demo [linux centos7] [5.7.26]
    记一个日志冲突——管中窥豹[java混乱的日志体系]
    Mybatis-Generator demo
    dubbo doc入门文档
    springBoot+mysql+mybatis demo [基本配置] [遇到的问题]
    nginx安装demo
  • 原文地址:https://www.cnblogs.com/feifeicui/p/8398259.html
Copyright © 2011-2022 走看看