List,Set,Map

1、Collection 和 Map 的区别

容器内每个为之所存储的元素个数不同。
Collection类型者,每个位置只有一个元素。List,Set
Map类型者,持有 key-value pair,像个小型数据库。

 

2、各自旗下的子类关系

Collection
    --List: 将以特定次序存储元素。所以取出来的顺序可能和放入顺序不同。有序
          --ArrayList / LinkedList / Vector
    --Set : 不能含有重复的元素    无序不重复
          --HashSet / TreeSet
Map     键值对
    --HashMap
    --HashTable
    --TreeMap

List特点:元素有放入顺序,元素可重复 

Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的) 

Map特点:元素按键值对存储,无放入顺序 

 

3.具体实例

List:

LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢 

ArrayList:非线程安全的,数组队列,相当于动态数组。它由数组实现,随机访问效率高,随机插入、随机删除效率低

Vector:线程安全的,效率低 ;矢量队列,和ArrayList一样,它也是一个动态数组,由数组实现

Set:

HashSet:为快速查找而设计的Set,存入HashSet的元素必须定义hashCode,底层由HashMap实现

LinkedHashSet :具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序),所以在使用迭代器遍历Set时,结果会被元素插入的次序显示。元素也必须定义hashCode()方法。

TreeSet:SortedSet接口唯一的实现类,保持次序的Set,底层由平衡二叉树实现, 使用它可以从Set中提取有序的序列。元素必须实现Comparable接口,是按对象的比较函数对元素进行排序。

Map:

HashMap:Map基于散列表的实现,插入和查询“键值对”的开销是固定的。可以通过构造器设置容量和负载因子,以调整容器的性能。

  HashMap非线程安全,高效,支持null;HashTable线程安全,低效,不支持null 

LinkedHashMap:使用链表维护内部次序(插入次序)

TreeMap:基于红黑树的实现,特点在于所得到的结果是经过排序的。subMap()/方法返回一个子树

ConcurrentHashMap:一种线程安全的Map,不涉及同步加锁

WeakHashMap:允许释放映射所指向的对象

IdentityHashMap:用==代替equals方法

 

3、其他特征

*  List,Set,Map将持有对象一律视为Object型别。
*  Collection、List、Set、Map都是接口,不能实例化。
   继承自它们的 ArrayList, Vector, HashTable, HashMap是具象class,这些才可被实例化。
*  vector容器确切知道它所持有的对象隶属什么型别。vector不进行边界检查。

 

4. 存取

  1. List 通过下标来存取 和值来存取    add/get
  2. Map 键值对应来存取      put(k,v) / get(k)    keySet()抽取key序列   values()抽取value序列
  3. set 存取元素是无序的    set.add("a") /  set.iterator().hasNext()

线程安全:

synchronized  多线程的同步机制对资源进行加锁,使得在同一个时间,只有一个线程可以进行操作,同步用以解决多个线程同时访问时可能出现的问题

 hashing
       哈希码就是将对象的信息经过一些转变形成一个独一无二的int值,这个值存储在一个array中。
       所有存储结构中,array查找速度是最快的。所以,可以加速查找。
       发生碰撞时,让array指向多个values。即,数组每个位置上又生成一个梿表。

 

Array , Arrays

Java所有“存储及随机访问一连串对象”的做法,array是最有效率的一种。

1、array效率高,但容量固定且无法动态改变。

array还有一个缺点是,无法判断其中实际存有多少元素,length只是告诉我们array的容量。

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

 

 

 

posted @ 2015-03-06 14:07  晋心  阅读(232)  评论(0编辑  收藏  举报