Java Collections 初探

作者: 写代码的海怪 | 来源:发表于2020-06-09 13:36 被阅读0次

以前学了很多 ArrayList, List, Set 啥的,他们的爹都是 Collection,Collection 是一个接口,里面提供了很多方法,如 add, remove 等。

初始化

Collection<Integer> c = new LinkedHashSet();

List<Integer> list = new ArrayList<>(c);

等价于

List<Integer> list = new ArrayList<>();
list.addAll(c);

等价于

List<Integer> list = new ArrayList<>();
for (Integer i : c) {
  list.add(i);
}

List

  • 本质就是一个数组
  • 每当放不下的时候,会增大空间,变成 1.5 倍容量
    oldCapacity + oldCapacity / 2
int newCapacity = oldCapacity + (oldCapacity >> 1);

ArrayList

List<Integer> list = new ArrayList<>(初始容量);

list.add(1);

list.size();

list.retainAll(list2); // 做交集

Set

  • 不能有重复元素,使用 equals 方法去判断
  • 无序的,可以使用 LinkedHashSet 保证顺序

hashCode

  • 同一个对象必须返回相同的 hashCode
  • equals true,hashCode 必须 true
  • equals false,hashCode 有可能 true

Map

  • 注意修改下面的,原 Map 也会被修改
    keys() -> Set
    values() -> Collection
    entry() -> Map<K, V>

  • 也会自增(和 ArrayList 差不多,也是增 1.5 倍),多线程的时候有可能出现环,导致死循环,即线程不安全。

if (++size > threshold) {
  newHashMap 扩容,和 ArrayList 差不多
}
  • 多线程下应该使用 ConcurrentHashMap
  • Java 7 后使用红黑树,因为 hashCode 都相同,则会变成长 List

TreeSet / TreeMap

HashSet 顺序的随机的
TreeSet 使用 Comparable 可以变成有顺的

TreeSet set = new TreeSet(list);

TreeMap 的 Key 就是 TreeSet,也是有顺序的。

相关文章

网友评论

    本文标题:Java Collections 初探

    本文链接:https://www.haomeiwen.com/subject/uyustktx.html