android 集合总结

1 集合分类,

collection和map两大类,Iterator接口是提供遍历任何Collection的接口,不是map


2 集合类的底层实现 

  hashset基于hashmap实现(只不过HashSet里面的HashMap所有的value都是同一个Object而已)
  treeset由红黑树实现
  hashmap由数组+链表+红黑树实现
  其他集合类基本都是由数组,或链表实现
 

3 arraylist 每次都是10的1.5倍扩容,会造成内存的浪费,可以考虑优化

  hashmap 是2的幂次方扩容
  对于hashmap或hashset最好定义key类是不可变的,这样key对应的hashCode() 值可以被缓存起    来,性能更好,这也是为什么String,Integer特别适合作为HashMap的key
  他们都是重写过hashcode和equal方法的,且这些包装类都是final修饰的:
  public final class Integer extends Number
  
  为什么要重写hashcode和equals 
  默认:hashcode是对地址的散列值 和equals是对地址的比较
  对象比较先比较hashcode,相同再去比较equals,
  所以 如果重写了equals将地址的比较改为内部某个属性值的比较
  那么还是先比较的是hashcode,即基于地址的散列值,所以要同步重写
  hashcode也变为基于某个属性值的散列值的比较才行。
  
 4 线程安全

  ConcurrentHashMap 是线程安全的,实现JDK1.8底层是synchronized+CAS+链表/红黑树,       JDK1.7底层是ReentrantLock+Segment+HashEntry
  但线程安全的都不支持key为null
  Iterator接口方便遍历。删除,修改,要用它,不然会ConcurrentModificationException,当然你    也可以倒序遍历等等

  使用线程不安全的集合要加同步锁,不然也会报ConcurrentModificationException错误
  掌握这些,应该就够了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值