Java中的collection

首先要了解collection的继承结构
继承结构

HashMap
  1. 线程不安全,但是可以使用ConcurrentHashMap(原理详解:
    http://blog.csdn.net/Sherry_Rui/article/details/51462549?locationNum=4&fps=1
    源码详解:http://blog.csdn.net/darrensun2014/article/details/51759751?locationNum=1&fps=1
  2. 底层是数据+链表
  3. 对于放入的K,V,先通过函数取得K的hash值,然后去找到对应下标的数组,如果数组的位置上有值得情况,加入头部插入值。
  4. get的时候,先key去hashcode,然后equals() 5、允许key或者value为null
  5. key不可以重复,value可以重复
HashSet

底层是HashMap,对key的操作转化为对map的操作。

HashTable

相对与HashMap来说,线程安全,不过当下已经out了。

list下的两个常用的集合

迭代collection

Iterator it = collection.iterator(); // 获得一个迭代子
while(it.hasNext()) {
     Object obj = it.next(); // 得到下一个元素
}

除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。

ArrayList:底层是动态数组,快速查找元素,可以有重复的元素。它允许所有元素,包括null。
size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。
每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。

LinkedList:底层是链表。可以有重复的元素, LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。

注意ArrayList和LinkedList都没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:
List list = Collections.synchronizedList(new LinkedList(…));

尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。

list详解:http://blog.csdn.net/wuchuanpingstone/article/details/6678653

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值