网站建设一对一培训,江门网页设计,长安网站建设公司哪家好,高端网站建设系统规划1 集合分类#xff0c;
collection和map两大类,Iterator接口是提供遍历任何Collection的接口#xff0c;不是map 2 集合类的底层实现 hashset基于hashmap实现#xff08;只不过HashSet里面的HashMap所有的value都是同一个Object而已#xff09; treeset由红黑树实现 … 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() 值可以被缓存起 来性能更好这也是为什么StringInteger特别适合作为HashMap的key 他们都是重写过hashcode和equal方法的且这些包装类都是final修饰的 public final class Integer extends Number 为什么要重写hashcode和equals 默认hashcode是对地址的散列值 和equals是对地址的比较 对象比较先比较hashcode相同再去比较equals 所以 如果重写了equals将地址的比较改为内部某个属性值的比较 那么还是先比较的是hashcode即基于地址的散列值所以要同步重写 hashcode也变为基于某个属性值的散列值的比较才行。 4 线程安全 ConcurrentHashMap 是线程安全的实现JDK1.8底层是synchronizedCAS链表/红黑树 JDK1.7底层是ReentrantLockSegmentHashEntry 但线程安全的都不支持key为null Iterator接口方便遍历。删除修改要用它不然会ConcurrentModificationException当然你 也可以倒序遍历等等 使用线程不安全的集合要加同步锁不然也会报ConcurrentModificationException错误 掌握这些应该就够了。