JSTL Java标准模板库

STL

今天在看STL,它主要分成序列式容器和关联式容器。

  • 序列式容器:主要有 vector, list, deque, stack, queue, heap
  • 关联式容器:每个元素都有一个key-value对,容器内部按照键值的大小,以某个规则将这个元素放到适当的位置。
    • RB-tree:Set, Map, MultiSet, MultiMap : 可自动排序
    • HashTable: HashSet, HashMap, MultiHashSet, MultiHashMap

他们的特点就是:

  1. Map与Set:Map是有实值(Value)和键值(Key)的,而Set只有实值。
  2. Hash…:单纯的Set和Map是由RBTree实现的,因此所有的元素都会根据键值进行排序;而Hash…系列则由于底层是HashTable实现的,因此是乱序的。
  3. Multi-:不带Multi前缀的是不允许键值重复的,可以说自带去重功能;而带这个前缀的则允许键值重复。

JSTL

上面都是说的C++,我们再来看一下Java对应的JSTL。

JSTL是对C++ STL的一个衍生,这些功能封装在Java.util包内,主要包括

  • Collection
    • List
      • LinkedList
      • ArrayList
      • Vector
        • Stack
    • Set
  • Map
    • HashTable
    • HashMap
    • WeakHashMap

总结

名称 有序? 相同的元素? 同步OR异步 Null? 扩展方法
ArrayList(List) Y Y Un Y 动态增加
LinkedList(List) Y Y Un Y
Vector Y Y Syn Y 每个分配周期增大1倍
Set Y N Syn Y(最多1个)
TreeSet 按照Key升序
HashTable(Map) N N Syn N
HashMap(Map) N N Un Y
TreeMap 按照key升序排列

一些比较

  1. 同步异步
    同步的会线程安全,但会花费机器时间,因此执行效率会低。
    如果程序在单线程环境中,考虑非同步的类,效率高。
    如果多个线程可能同时操作一个类,用同步的类,线程安全。
  2. ArrayList和LinkedList
    如果涉及到堆栈、队列等操作,最好用List。
    如果需要在一列数据的中间快速插入、删除元素,用LinkedList。
    如果需要快速随机访问元素或者在一列数据的后面添加数据,用ArrayList。
  3. HashTable与HashMap
    HashTable通过put和get操作数据时,时间开销是常数。区别在于HashMap是同步的。

你可能感兴趣的:(java)