Java集合框架:List、Set、Map的理解

Java集合框架:List、Set、Map的理解

在这里插入图片描述

1、集合与数组的区别

数组:长度固定,存储内容可以是基本数据类型,只能存储同一种类型

集合:长度可变,存储能容必须数引用类型(对象),存储类型可以不同。

2、常用集合的分类

Collection:存储单值的最大操作根接口

  1. List接口:可重复,元素按插入顺序保存
    • ArrayList:List接口的实现类,数据结构由数组实现,对增删慢,查找快
    • LinkedList:List接口的实现类,数据结构由链表实现,对增删快,查找慢
    • Vector:List接口的实现类,数据结构由数组实现,对增删慢,查找快
  2. Set接口:唯一,元素插入与取出顺序不一致
    • HashSet:Set接口的实现类,散列存储元素,无序存储
    • TreeSet:Set接口的实现类,二叉树存储元素,允许对元素排序

Map:存储多值(Key-Value键值对)的操作接口

  • HashMap:异步,线程不安全,效率高
  • HashTable:同步,线程安全,效率低
  • ConcurrentHashMap:采用了分段锁机制,保证线程安全,效率较高
  • TreeMap:对key使用红黑树排序

3、Collection

Collection:存储单值的最大操作根接口,JDK中不提供collection的直接实现,只提供继承于collection的子接口,常用的两个有:List(允许重复)、Set(不允许重复)

Collectoin接口的方法

方法描述
boolean add(E e)在集合尾添加一个元素
boolean addAll(Collection<? extends E> c)在集合添加一组元素c
void clear()清空集合中的元素
boolean contains(Object o)判断集合中是否包含此元素
boolean contains(Collection<?> c)判断集合中是否包含一组元素c
boolean isEmpty()判断集合是否为空
Iterator iterator()实例化Iterator接口,返回集合元素的迭代器
boolean remove(Object o)从集合中删除一个元素
boolean removeAll(Collection<?> c)从集合中删除一组元素c
boolean retainAll(Collection<?> c)判断是否没有指定集合
int size()求集合中元素的个数
Object[] toArray()返回一个包含集合所有元素的数组
T[] toArray(T[] a)返回一个包含集合所有元素的指定泛型的数组
boolean equals(Object o)比较collection与指定对象是否相等
int hashCode()返回此collection的哈希码值

3.1、List

List:继承自Collection接口的子接口,元素存取顺序一致,元素可以重复,List有三个常用实现类:ArrayList、Vector、LinkedList。

List的对Collection的扩充方法

方法描述
void add(int index, E element)在指定位置插入指定元素
void add(int index, Collection<? extends E> e)在指定位置插入一组元素
E get(int index)根据索引返回元素
int indexOf(Object o)根据对象查找位置,找不到返回-1
int lastIndexOf(Object o)从后向前查找位置,找不到返回-1
ListIterator listIterator()返回ListIterator接口实例
ListIterator listIterator(int index)返回从指定位置的ListIterator的接口实例
E remove(int index)删除指定位置的元素
E set(int index, E element)修改指定位置的元素
List subList(int formIndex, int toIndex)返回指定位置的子集合
3.1.1、List接口的常用实现类
  1. ArrayList:数据结构由数组实现,对增删慢,查找快,线程不安全,效率高。最常用

  2. LinkedList:数据结构由链表实现,对增删快,查找慢,线程不安全,效率高

    扩充方法

    方法描述
    void addFirst(E e)在首部添加一个元素
    void addLast(E e)在尾部添加一个元素
    E getFirst()从首部获取一个元素
    E getLast()从尾部获取一个元素
    E removeFirst()删除并返回第一个元素
    E removeLast()删除并返回最后一个元素
  3. Vector:数据结构由数组实现,对增删慢,查找快,线程安全,效率低

Vector与ArrayList的区别

区别点ArrayListVector
出现时间JDK1.2之后JDK1.0
性能效率较高,异步处理,线程不安全效率较低,同步处理,线程安全
输入Iterator、ListIteratorIterator、ListIterator以及Enumeration
3.1.2、List输出
  1. Iterator:遍历集合中的所有元素,用于迭代访问集合中的元素的接口

    方法描述
    boolean hasNext()是否有下一个元素
    E next()取出内容
    void remove()删除当前内容

    在进行迭代输出的时候如果要想删除当前元素,则只能使用 Iterator接口中的 remove()方法,而不能使用集合中的 remove()方法。

  2. ListIterator:是Iterator的子接口,专门用于输出List中的内容。

  3. foreach输出:可以输出数组或集合的内容

  4. for循环

3.2、Set

Set:继承自Collection接口的子接口,元素插入与取出顺序不一致,与List接口最大的不同在于Set接口的内容不允许重复,Set接口中有两个常用实现类:HashSet、TreeSet

Set具有与Collection完全一样的接口,不具备扩充方法

3.2.1、Set接口的常用实现类
  1. HashSet:散列存储元素,无序存储,线程不安全,效率高。
    • 对于元素的唯一性,需要重写hashCode()和equals()方法来保证
  2. TreeSet:二叉树存储元素,允许对元素排序
    • 使用TreeSet存储自定义对象,需定义的类中实现Comparable接口
    • 同样需要重写hashCode()和equals()方法
3.2.2、Set输出
  1. Iterator:迭代输出
  2. foreach输出

3.3 List与Set总结

  1. List与Set都是继承自Collection的子接口
  2. List允许重复元素。Set不允许重复元素,插入重复元素时,存入的是最新的元素
  3. List存入与取出顺序一致,Set存取顺序不一致
  4. List相比Set查找效率高,增删效率低,Set查找效率低,增删效率高
  5. Set使用Iterator与foreach迭代,List出了可以使用以上两个方式外,还可以使用ListIterator与for循环迭代

4、Map

此接口与Collectoin接口没有任何关系,是第二大集合操作接口

Map:存储多值(Key-Value键值对)的操作接口,每个Key映射一个Value,其中Key不允许重复,而Value允许重复

map的常用方法

方法描述
void clear()清空Map中的内容
boolean containsKey(Object key)判断Map中是否存在指定key
boolean containsValue(Object value)判断Map中是否存在指定value
Set<Map.Entry<K,V>> entrySet()将Map接口变为Set集合
V get(Object key)根据key找到对应的value
boolean isEmpty()判断Map是否为空
Set keySet()将全部key变为Set集合
Collection values()将全部value变为Collection集合
V put(K key, V value)向集合中增加内容
void putAll(Map<? extends K, ? extends V> m)增加一组集合
V remove (Object key)根据可以删除内容

4.1、Map接口的常用实现类

  1. HashMap:异步,线程不安全,效率高

    • HashMap可以指定初始容量和负载因子
    • 允许存入空值,但key最多只能有一个值为空
  2. HashTable:同步,线程安全,效率低

    • 不允许存入空值
    • HashMap与HashTable的区别:
    区别点HashMapHashTable
    出现时间JDK1.2之后JDK1.0
    性能异步处理,性能高同步处理,性能低
    空值允许存入空值,但key最多只能有一个值为空不允许存入空值
  3. ConcurrentHashMap:采用了分段锁机制,保证线程安全,效率较高

  4. TreeMap:对key使用红黑树排序

    • 使用TreeMap存储自定义对象,需定义的类中实现Comparable接口

4.2、Map输出

  1. 使用Map 接口中的 entrySet()方法将Map 接口的全部内容变为 Set 集合
  2. 使用 Set 接口中定义的 iterator()方法为 Iterator 接口进行实例化
  3. 之后使用 Iterator 接口进行迭代输出,每一次的迭代都可以取得一个Map.Entry 的实例
  4. 通过Map.Entry 进行 key 和 value 的分离
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值