Java集合分类
- Java集合主要分类两类:
- Collection集合
- Map集合
- Collection集合分类:
- Set集合:代表无序,不可重复的集合
- List集合:代表有序,可重复的集合
- Queue集合:代表一种队列集合实现
- Map集合分类:
- HashMap集合
- TreeMap集合
- HashTable结合
- 集合与数组的区别:
- 长度区别:
- 数组固定长度
- 集合长度可变
- 内容区别:
- 数组可以存储基本类型数据,也可以是引用类型数据
- 集合只能是引用数据类型
- 元素区别:
- 数组只能存储一种数据类型
- 集合可以存储不同数据类型(集合一般存储的也是同一数据类型)
- 长度区别:
List集合:
- 特点:
- 有序性:List 保证按插入顺序排序
- 唯一性:List 可以重复
- 获取元素:List 可以通过索引直接操作元素
- List 集合的分类:
- ArrayList 集合
- LinkedList 集合
- Vector 集合(不建议使用)
ArrayList集合:
- 特点:
- ArrayList 是集合的一个实现类
- ArrayList 内部封装了一个 Object 类型的对象,初始长度是10,长度可变
- ArrayList 集合查询快,增删慢
- 线程不安全
- 方法:
- add(Object element):向列表的尾部添加指定的元素
- add(int i,Object element):在列表的指定位置插入值
- size():返回列表中的元素个数
- get(int index):返回列表中指定位置的值,index 下标从 0 开始
- set(int i,Object elelment):替换 i 的位置的值为 element
- clear():从列表移除所有元素
- isEmpty():判断列表是否为空
- 为空返回 true
- 不为空返回 false
- contains(Object o):查询列表是否包含指定元素
- 包含返回 true
- 不包含返回 false
- remove(Object o):从列表中移除第一次出现的指定元素
- 移除成功返回 true
- 移除失败返回 false
- iterator():返回按当前顺序在列表的元素上进行迭代的迭代器
- hasNext():判断当前指针下是否还有元素
- next:如果指针下面还有元素,则获取值并返回
- 增强 for 循环:遍历链表
LikedList集合
- 特点:
- LikedList 是集合的一个实现类
- 内部封装了一个双向链表
- 增删快,查询慢
- 线程不安全
- 方法:
- 添加:
- add(Objedct element):将元素添加至列表尾部
- add(int index,Objedct element):指定位置插入元素
- addFirst(E element):将元素添加至列表头部
- addLast(E element):将元素添加至列表尾部
- 获取数据:
- get(int index):根据下标获取数据
- getFirst():返回链表第一个数据
- getLast():返回链表最后一个数据
- 查询:
- contains(Object element):元素如果存在,返回ture
- 修改:
- set(int index,Object element):将新元素替换列表中的现有元素(从下标 0 开始)
- 删除:
- remove():删除链表第一个元素
- remove(int index):删除指定下标的值
- removeFirst():删除链表第一个元素,并返回该值
- removeLast():删除链表最后一个元素,并返回该值
- 清空:
- clear():清空列表所有元素
- 链表长度:
- size():返回链表的长度
- 添加:
Vector集合(不建议使用):
- 特点:
- 底层数据结构是:数组
- 有索引、查询快、增删慢
- 单线程、线程安全
Map集合
HashMap集合:
- 示意图:
- 特点:
- 底层由 链表 + 数组 构成,JDK8 以后加了 红黑树
- 存储的是 key + value 类型的数据
- key 值不允许重复
- key 值重复会把数据覆盖
- value值可以重复
- 数据存储无序:
- 无序:插入顺序和取出顺序不一样
- key 和 value 都允许为空,但是只能有一个空的 key
- 方法:
- put(K key,V value):将 键(Key) / 值(Value) 映射存放到 Map 集合中
- get(Object key):返回指定键的值
- 没有该键返回 null
- size():返回 Map 集合中数据的数量
- clear():清空 Map 集合
- isEmpty():判断 Map 集合是否为空
- 为空返回 true
- 不为空返回 false
- remove(Object key):删除 Map 集合中指定的键的数据,并返回其所对应的 value 值
- containsKey(Object key):判断 HashMap 中是否含有 key 键
- containsValue(Object value):判断 HashMap 中是否含有 value 值
- putAll(HashMap h1):添加一个同类型 h1 下的所有数据
- replace(Object key,Object value):替换指定键的 value 值
-
HashMap<Integer,String> h1 = new HashMap<>(); HashMap<Integer,String> h2 = new HashMap<>(); h1.put(3,"111"); h1.put(1,"222"); h2.put(0,"333"); //将h2中的所有数据添加之h1 h1.putAll(h2); System.out.println(h1); //{0=333, 1=222, 3=111}
TreeMap集合:
- 特点:
- TreeMap集合是一个有序的 key-value 集合,是通过红黑树实现的(是一种平衡的二叉树)
- key值是有序的
- 默认会对键进行排序,键必须实现自然排序或制定排序中的一种
- 自然排序:按照字典表进行排序
- 定制排序:自己定义排序规则
- 线程不安全
- 基本使用:
- 使用无参构造器创建对象:
- 对于 Integer 来说,其自然排序就是数字的升序
- 对 String 来说,其自然排序就是按照字母表排序
- Comparable接口:
- 使用 TreeMap 时,放入的 Key 必须实现 Comparable 接口
- String、Integer 这些类已经实现了 Comparable 接口,因此可以直接作为 Key值使用
- value 的对象没有任何要求
- 使用无参构造器创建对象:
HashTable集合:
- 特点:
- HashTable 是 Map 的实现类
- 不允许有任何 null 值 和 null 键
- HashTable 中的元素没有顺序(和添加舒徐无关)
- HashTable 线程安全
- 底层实现是 哈希表