JAVA Programming - Tips 2 - DataStructure

Collection(List,Set) vs Map -- Ross.bu
1. Collections是针对集合类的一个帮助类。提供了一系列静态方法实现对各种集合的搜索、排序、线程完全化等操作。
相当于对Array进行类似操作的类——Arrays。
Collections.max(Collection coll); 取coll中最大的元素。
Collections.sort(List list); 对list中元素排序

2、Arrays类,专门用来操作array。arrays中拥有一组static函数,
equals():比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。
fill():将值填入array中。
sort():用来对array进行排序。
binarySearch():在排好序的array中寻找元素。
System.arraycopy():array的复制。

3. Map,Collection
Collection (object)
       --List:1.取出来的顺序可能和放入顺序不同。2. allow 重复
             --ArrayList / LinkedList / Vector
       --Set : 不能含有重复的元素
             --HashSet /LinkedHashSet / TreeSet
Map (key-value)
       --HashMap
       --HashTable
       --TreeMap
HashSet内部由HashMap来维护数据/TreeSet内部由TreeMap来维护数据
WeakHashMap是一种节省存储空间的容器,它允许垃圾回收器自动清理那些没有普通引用的“键”和“值”。实际上,WeakHashMap自动使用WeakReference包装了每一个“键”对象。
Note: People always compare Set & List & Map ignoring Collection Interface

List: 1. allow 重复              2.取出来的顺序可能和放入顺序不同(散列)
Set : 1. not allow  重复         2.Set中大量使用Map的实现类
Map : 1. not allow  重复 (key)   2. key --- value 对
Hash:    无论Set List Map 带有Hash字样的结构存取快速 HashSet LinkedHashSet HashMap LinkedHashMap
Tree:    无论Set List Map 带有Tree字样的结构都有排序 TreeSet TreeMap (实际上在TreeSet中是使用了TreeMap的)
Linked:  无论Set List Map 带有Linked字样的结构都有存入顺序  LinkedHashSet LinkedList LinkedHashMap
Sorted:  我们看不到任何Sorted结构其实是因为这些不过是理论上的层次模型,未必真的实用
         TreeSet implements SortedSet && SortedSet extend Set 这里可以看出其实Tree结构的所谓排序功能,
         其实comparator()定义是在SortedSet 中制定的 同理我们可以推论出来:
         TreeMap implements SortedMap && SortedMap extend Map

两个过时的结构 HashTable(Map)  Vector(List)
取代他们的结构 HashMap         ArrayList
在新程序中,不应再使用过时的Vector、Hashtable和Stack容器

* rehashing 导致 Hash的结构类型在做更新(add,update,delete)会慢下来
* linked 并不是 Sorted 的含义 LinkedHashSet只不过是有个链表在维护存入顺序(先进后出)
* 当元素个数固定,用Array,因为Array效率是最高的.
* Map中元素,可以将key序列、value序列单独抽取出来。
使用keySet()抽取key序列,将map中的所有keys生成一个Set。 (not allowd duplicate)
使用values()抽取value序列,将map中的所有values生成一个Collection。(allowed duplicate)


实战的思考过程
* 考虑是否可以重复  yes --> ArrayList   如果不可以(要求唯一性) --> HashSet  或者 HashMap
* 考虑是否是key - value结构 yes ----> HashMap 然后考虑是否排序 yes  --> TreeMap

你可能感兴趣的:(java,数据结构)