当前位置:   article > 正文

Java集合框架最全详解(超详细)保姆级

java集合框架

一、集合体系

集合一共分为两部分:Collection(单列集合)每个元素(数据)只包含一个值。

Map(双列集合)每个元素包含两个值(键值对)。

二、Collection

Collection

概念:Collection是单列集合的祖宗,它规定的方法(功能)是全部单列集合都会继承的。

1.架构图

2、两大常用的集合体系

List系列集合:添加的元素是有序、可重复、有索引。

Set系列集合:添加的元素是无序、不重复、无索引。

3、常用的方法

方法名

说明

public boolean add(E e)

把给定的对象添加到当前集合中 

public void clear() 

清空集合中所有的元素

public boolean remove(E e)

把给定的对象在当前集合中删除

public boolean contains(Object obj)

判断当前集合中是否包含给定的对象

public boolean isEmpty()

判断当前集合是否为空

public int size()

返回集合中元素的个数。

public Object[] toArray()

把集合中的元素,存储到数组中

4、遍历方式

迭代器

 概念:迭代器是用来遍历集合的专用方式(数组没有迭代器),在Java中迭代器的代表是Iterator。

方法名称

说明

Iterator<E> iterator()

返回集合中的迭代器对象,该迭代器对象默认指向当前集合的第一个元素

boolean hasNext()

询问当前位置是否有元素存在,存在返回true ,不存在返回false

E next()

获取当前位置的元素,并同时将迭代器对象指向下一个元素处。

执行流程图

增强for

概念:只适合用于做查询操作,不适合增删操作。

增强for可以用来遍历集合或者数组。

增强for遍历集合,本质就是迭代器遍历集合的简化写法。

格式:

 Lambda表达式

方法名称

说明

default void forEach(Consumer<? super T> action) 

结合lambda遍历集合

  1. Collection<String> lists = new ArrayList<>();
  2. lists.forEach(new Consumer<String>(){
  3. @Override
  4. public void accept(String s) {
  5. System.out.println(s);}});
  6. 用Lamvda简化后代码:
  7. lists.forEach(s -> { System.out.println(s); });

List集合

概念:List集合因为支持索引,所以多了很多与索引相关的方法,当然,Collection的功能List也都继承了。

方法名称

说明

void add(int index,E element)

在此集合中的指定位置插入指定的元素

E remove(int index)

删除指定索引处的元素,返回被删除的元素

E set(int index,E element)

修改指定索引处的元素,返回被修改的元素

E get(int index)

返回指定索引处的元素

ArrayList

特点:存取有序、可重复、有索引

底层原理:是基于数组实现的 

利用无参构造器创建的集合,会在底层创建一个默认长度为0的数组

添加第一个元素时,底层会创建一个新的长度为10的数组

存满时,会扩容1.5倍

使用场景:大量数据的查询、 少量数据的增删

LinkedLsit

数据结构:双链表 、查询慢、增删快

 

方法名称

说明

public void addFirst​(E e)

在该列表开头插入指定的元素

public void addLast​(E e)

将指定的元素追加到此列表的末尾

public E getFirst​()

返回此列表中的第一个元素

public E getLast​()

返回此列表中的最后一个元素

public E removeFirst​()

从此列表中删除并返回第一个元素

public E removeLast​()

从此列表中删除并返回最后一个元素

Set集合

特点: 无序:添加数据的顺序和获取出的数据顺序不一致;  

HashSet

底层原理:基于哈希表实现。 哈希表是一种增删改查数据,性能都较好的数据结构。

哈希表 JDK8之前,哈希表 = 数组+链表

 

JDK8开始,哈希表 = 数组+链表+红黑树

 

 哈希表存储元素的过程 根据hashCode值计算元素存放的位置 如果这个位置没有元素,直接存储 如果这个位置有元素调用equals比较 equals()为false,存储 equals()为true,不存储(认为是相同的元素) 

自定义元素除重复元素:重写对象的hashCode()和equals()方法。

LinkedHashSet

底层原理:依然是基于哈希表(数组、链表、红黑树)实现的。 但是,它的每个元素都额外的多了一个双链表的机制记录它前后元素的位置。

有序、不重复、无索引

TreeSet

特点:不重复、无索引、可排序(默认升序排序 ,按照元素的大小,由小到大排序) 底层是基于红黑树实现的排序。

自定义排序规则

TreeSet集合存储自定义类型的对象时,必须指定排序规则,支持如下两种方式来指定比较规则。 方式一  

让自定义的类实现Comparable接口,重写里面的compareTo方法来指定比较规则。

方式二

通过调用TreeSet集合有参数构造器,可以设置Comparator对象(比较器对象,用于指定比较规则)。

返回值的规则

如果认为第一个元素 >  第二个元素 返回正整数即可。 如果认为第一个元素 < 第二个元素返回负整数即可。 如果认为第一个元素 = 第二个元素返回0即可,此时Treeset集合只会保留一个元素,认为两者重复。

三、Map

Map是双列集合的祖宗,它的功能是全部双列集合都可以继承过来使用的。

根据键值对进行存储。

方法名称

说明

public V put(K key,V value)

添加元素

public int size()

获取集合的大小

public void clear()

清空集合

public boolean isEmpty()

判断集合是否为空,为空返回true , 反之

public V get(Object key)

根据键获取对应值

public V remove(Object key)

根据键删除整个元素

public  boolean containsKey(Object key)

判断是否包含某个键

public boolean containsValue(Object value)

判断是否包含某个值

public Set<K> keySet()

获取全部键的集合

public Collection<V> values()

获取Map集合的全部值

HashMap

特点:无序、不重复、无索引; 

哈希表 JDK8之前,哈希表 = 数组+链表

JDK8开始,哈希表 = 数组+链表+红黑树 哈希表是一种增删改查数据,性能都较好的数据结构。

LinkedHashMap 

特点:(由键决定特点): 有序、不重复、无索引。

底层原理:底层数据结构依然是基于哈希表实现的,只是每个键值对元素又额外的多了一个双链表的机制记录元素顺序(保证有序)。

TreeMap 

特点:由键决定特点:按照键的大小默认升序排序、不重复、无索引。

由键决定特点:按照键的大小默认升序排序、不重复、无索引。

TreeMap集合同样也支持两种方式来指定排序规则

让类实现Comparable接口,重写比较规则。

TreeMap集合有一个有参数构造器,支持创建Comparator比较器对象,以便用来指定比较规则。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/487558
推荐阅读
相关标签
  

闽ICP备14008679号