Java Collections

简介:

Java集合类如图所示

gather


1. Iterator

迭代器接口,是一种设计模式,用来遍历序列对象。

1.1 ListIterotr

可双向遍历。


2. Collection

  • 最基本的集合接口,继承于Iterator,自身不被直接继承,两个子接口List和Set



2.1 List

  • 有序Collection
  • 提供基于索引的随机访问,内容可重复。
  • 实现了ListIterator接口,可向前遍历


2.1.1 ArrayList

  • 可变数组,允许随机访问
  • 允许含null,只能存对象
  • 非同步,线程不安全
  • 有容量Capacity,每次扩充原来的一半。创建ArrayList时最好指定Capacity,提高插入效率。存在空间浪费。

    private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }


2.1.2 LinkedList

  • 可变链表,允许随机访问
  • 允许含null
  • 可双向遍历,头尾操作快,可以用作Stack、Queue、双向Queue
  • 非同步,线程不安全
  • 比ArrayList更占空间,每个节点存储两个引用,分别指向前后元素


2.1.3 Vector

  • 与ArrayList类似。
  • Vector很多方法由synchronized修饰,是同步的,线程安全。

    • 如果遍历Vector过程中,另一个线程改变了Vector,则会报错。
  • 扩充容量为原来的一倍,并且可以自己设置扩充因子

    private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
                                         capacityIncrement : oldCapacity);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        elementData = Arrays.copyOf(elementData, newCapacity);
    }


2.1.4 Stack

  • 继承于Vector,Vector的堆栈实现,包括empty、peek、pop、push、search等方法。


2.2 Set

  • 成员不可重复
  • 可以有序


2.2.1 HashSet

  • 基于HashMap,key存值,value存系统默认的Object对象,可快速查找
  • 不保证有序,非同步
  • 成员为Object子类对象
  • 可以放一个null


2.2.2 TreeSet

  • 基于TreeMap,默认有序
  • 自定义对象要实现Comparable接口才能放入TreeSet


2.2.3 LinkedHashSet

  • 在HashSet基础上,维护一个链表来记录插入顺序。这使得它访问顺序比HashSet好,但插入顺序相比稍差。


3. Map

键值对,键不能重复,快速查找


3.1 HashMap

  • 可含有一个key为null的键值对
  • 非同步,若让HashMap同步,使用Collections.synchorniezMap(),
  • 去除了contains方法
  • 扩容为2的幂


3.2 TreeMap

  • 基于红黑树,有序
  • 遍历value时尽量使用entrySet遍历,这样防止二次查找(keySet找value极慢)
  • 可以返回一个子树


3.3 LinkedHashMap

  • HashMap子类,于LinkedHashSet类似,额外添加双向链表来保证顺序
相关文章
|
8月前
|
SQL Java
解读JAVA处理排名问题-关于学生成绩排名及Collections中的sort方法与Comparable的使用
写一个项目真是存在很多的bug,修复的时间往往比开发所需要的时间更长,今天又出了一个bug,在这里记录一下,主要是针对系统中学生的成绩排名。
87 0
|
2月前
|
安全 算法 Java
Java Collections工具类:常用方法与技巧
Java Collections工具类:常用方法与技巧
|
3月前
|
存储 Java
从零开始学习 Java:简单易懂的入门指南之可变参数及Collections类(二十五)
从零开始学习 Java:简单易懂的入门指南之可变参数及Collections类(二十五)
|
4月前
|
存储 Java
【Java基础】Collections集合概述和使用、ArrayList集合存储学生并排序及斗地主案例
【Java基础】Collections集合概述和使用、ArrayList集合存储学生并排序及斗地主案例
38 0
|
4月前
|
Java
Java之Collections的综合小练习
3. 综合练习 练习1:随机点名器 需求:班级里有N个学生,实现随机点名器
28 0
|
4月前
|
存储 Java
Java之可变参数和Collections的详细解析
1. 可变参数 在JDK1.5之后,如果我们定义一个方法需要接受多个参数,并且多个参数类型一致,我们可以对其简化. 格式: 修饰符 返回值类型 方法名(参数类型... 形参名){ } 底层:
28 0
|
4月前
|
Java
【零基础学Java】—Collections集合工具类(四十二)
【零基础学Java】—Collections集合工具类(四十二)
|
5月前
|
算法 Java 容器
深入探究Java集合工具类Collections的神奇功能
深入探究Java集合工具类Collections的神奇功能
|
7月前
|
存储 Java
Java集合Collections工具类
Java集合Collections工具类
44 0
|
8月前
|
Java
Java 中Collections工具类的使用
Java 中Collections工具类的使用
36 0