【Core Java】java.util的集合框架

Java的集合框架大致可以分为四个体系 :List/Set/Queue/Map。其中List/Set/Queue来自Collection根接口,Map来自Map根接口。

 

注意:Iterator迭代Collection集合 ,迭代过程中,避免对collection更改,除非通过Iterator删除(remove),否则会抛出并发修改异常。

 

Set 存放不重复的元素,并且存放是无序的(即不会保留元素add的顺序)。

set如何判断两个元素是否相同:equals()

HashSet :采用hash算法 (元素的值-->hash值-->位置-->更快地存取)存取元素。

HashSet如何判断两个元素是否相同:equals() + hashCode()

注意:如果需要将一个对象放入HashSet,则要重写该对象对应类的equals()和hashCode()。

如何重写hashCode()?

http://nemogu.iteye.com/admin/blogs/1199521

注意:当向HashSet中添加可变对象时要额外注意,如果修改集合中的对象,有可能导致该对象与集合中其他对象相等,从而导致hashset无法准确访问该对象。

 

Set--SortedSet--TreeSet

TreeSet :红黑树。集合元素根据其实际值处于排序状态。自然排序(元素类实现Comparable接口)和定制排序(TreeSet构造时传入一个Comparator)。

 

LinkedList :双向队列+栈(pop/push)+list(按索引随机访问元素),底层用链表存储元素,随机访问性能低于ArrayList和Vector,但是迭代,插入和删除性能要高于其他。

 

Map

HashMap :非线程安全,null可以作为key或者value。

判断key相等:equals返回true,hashCode相等。

LinkedHashMap :以双向链表维护元素插入的顺序。

 

Map--SortedMap--TreeMap

TreeMap :红黑树对key排序。

 

WeakHashMap 与HashMap:WeakHashMap的key对象保存了实际对象的弱引用。意味着key所引用的对象没有被其他强引用变量所引用,这些key所引用的对象会被gc回收。

 

工具类Collections

Collections.synchronizedMap(Map)

<Long, String> Map<Long, String> java.util.Collections.synchronizedMap(Map<Long, String> m)

 

Returns a synchronized (thread-safe) map backed by the specified map. In order to guarantee serial access, it is critical that all access to the backing map is accomplished through the returned map.


It is imperative that the user manually synchronize on the returned map when iterating over any of its collection views:

  Map m = Collections.synchronizedMap(new HashMap());
      ...
  Set s = m.keySet();  // Needn't be in synchronized block
      ...
  synchronized(m) {  // Synchronizing on m, not s!
      Iterator i = s.iterator(); // Must be in synchronized block
      while (i.hasNext())
          foo(i.next());
  }

ConcurrentHashMap

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值