Java 集合(四)——集合总结

一、前言

Java 集合系列文章如下:

  1. Java 集合(一)——Collection集合接口、Iterator 迭代器和泛型;
  2. Java 集合(二)——List、Set集合和Collections工具类;
  3. Java 集合(三)——Map 集合;

这篇文章主要对 Java 中的集合做一个简单的总结。

二、集合(Collection)

2.1、集合的由来

我们需要容器来存储对象,而数组长度是固定的,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,语速 Java 就提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少 。

2.2、集合和数组的区别

  1. 内容上,数组能存储基本数据类型和引用类型,而集合只能存储引用类型;
  2. 长度上,数组长度固定,集合长度可变。
  3. 存储类型上,数组只能存储同一种类型的数据,而集合可以存储不同类型的数据。

2.3、Collection 集合的继承关系

继承关系

2.4、Collection 的常用功能

  1. 添加功能:
    boolean add(Object obj):添加一个元素;
    boolean addAll(Collection c):添加一个集合的元素;
  2. 删除功能:
    void clear():移除所有元素;
    boolean remove(Object o):移除一个元素;
    boolean removeAll(Collection c):移除一个集合的元素;
  3. 判断功能:
    boolean contains(Object o):判断集合中是否包含指定的元素;
    boolean containsAll(Collection c):判断集合中是否包含指定的集合元素;
    boolean isEmpty():判断集合是否为空;
  4. 长度功能:
    int size():获取元素的个数;
  5. 迭代功能:
    Iterator<E> iterator():获取迭代器遍历集合;
  6. 把集合转换为数组:
    Object[] toArray()

三、List 集合

3.1、特点

List 是 Collection 的子接口,特点是有序(存储顺序和取出顺序一致),可重复,有索引,可用普通 for 循环遍历。

3.2、特有功能

因为 List 有索引,所以 List 的特有功能都和索引有关,增删改查如下:

  1. void add(int index,Object element):在指定位置添加元素;
  2. Object remove(int index):根据索引删除元素,返回被删除的元素;
  3. Object set(int index,Object element):根据索引修改元素,返回被修饰的元素;
  4. Object get(int index):获取指定位置的元素;

3.3、遍历 List 集合的方法

  1. 普通 for 循环;
  2. 增强 for 循环;
  3. iterator 迭代器遍历;

3.4、List 子类的特点

  1. ArrayList:底层数据结构是数组,查询快,增删慢。线程不安全,效率高。
  2. LinkedList:底层数据结构是链表,查询慢,增删快。线程不安全,效率高。
  3. Vector:底层数据结构是数组,查询快,增删慢。线程安全,效率低。(已弃用)

使用原则:增删多,查询少,用 LinkedList,反之,增删少,查询多,用 ArrayList,需要线程安全也不用 Vector,用 Collections.synchronizedList。啥也不知道,用 ArrayList。

四、Set 集合

4.1、特点

Set 也是 Collection 的子接口,特点是无序(存储顺序和取出顺序有可能一致),元素不可重复(通过 hashCode() 和 equals() 方法实现元素不可重复)。

4.2、HashSet 集合

底层数据结构是哈希表(数组 + 链表(JDK 1.8之前)或者数组 + 链表 + 红黑树(JDK 1.8之后)),通过 hashCode() 方法和 equals() 方法实现元素唯一,先通过 hashCode() 方法计算出元素的哈希值,不同的话,直接存储元素,相同的话,继续执行 equals() 方法,返回true 的话不存储,返回 false 就存储。

五、Collections 集合工具类

Collections 集合工具类常用方法如下:

  1. public static <T> void sort(List<T> list):排序
  2. public static <T> int binarySearch(List<?> list,T key):二分查找
  3. public static void reverse(List<?> list):集合反转
  4. public static void shuffle(List<?> list):随机排序

六、Map 双列集合

6.1、Map 和 Collection 的区别

  1. Map 集合存储元素是成对出现的,Map 集合的键是唯一的,值是可重复的。
  2. Collection 集合存储元素是单独出现的。

6.2、Map 集合的常用功能

  1. 添加功能:
    V put(K key,V value):添加元素,如果键是第一次存储,就直接存储元素,返回 null,否则,就用值把以前的值替换掉,返回以前的值;
  2. 删除功能:
    void clear():移除所有元素;
    V remove(Object key):根据键删除键值对元素,并把值返回;
  3. 判断功能:
    boolean containsKey(Object key):判断集合是否包含指定的键;
    boolean containsValue(Object value):判断集合是否包含指定的值;
    boolean isEmpty():判断集合是否为空;
  4. 长度功能:
    int size():获取元素的个数;

6.3、Map 集合的遍历

  1. 键找值方式:通过 keySet() 方法获取所有的键,在获取所有的值;
  2. 键值对对象方式:通过 entrySet() 方法获取所以的键值对对象,在通过 entry.getKey() 方法和 entry.getValue() 方法获取键和值。

6.4、HashMap

无序,线程不安全,允许 null 键和 null 值。

6.5、LinkedHashMap

有序,线程不安全,允许 null 键和 null 值。

6.6、HashTable

线程安全,效率低。不允许 null 键和 null 值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值