Java集合详解

目录

一、集合与数组的区别

二、Java集合的体系结构

三、Java集合遍历的三种方式

1、基本的for循环遍历(不是所有的Collection都可以使用基本的for循环进行遍历,要求集合带索引)

2、迭代器进行遍历(所有集合类都可使用)

3、增强for循环(相当于创建第三方变量)

(1)格式:

(2)注意事项:在增强for循环中修改第三方变量e的操作不会影响集合

四、Collection分支详解

(一)Collection常用方法

(二)List常用实现类

  1、ArrayList类:

  2、LinkedList类:

(三)Set常用实现类

1、TreeSet实现类(底层数据结构为红黑树):

2、HashSet集合实现类(底层数据结构为哈希表)

五、Map分支详解

1、Map集合

2、Map集合的常见实现类:

(1)HashMap实现类:

(2)TreeMap实现类:

3、可变参数


一、集合与数组的区别

1、数组长度不可变,但集合长度可变

2、数组可存放基本数据类型,也可存放引用数据类型,但集合只能存放引用数据类型,集合只能存放基本数据类型的包装类

二、Java集合的体系结构

Java集合详解_第1张图片

三、Java集合遍历的三种方式

1、基本的for循环遍历(不是所有的Collection都可以使用基本的for循环进行遍历,要求集合带索引)

2、迭代器进行遍历(所有集合类都可使用)

步骤:

(1)通过调用具体集合对象的iterator()方法获取该集合对象的迭代器

(2)使用迭代器对象的hasNext()方法进行判断当前位置是否有元素可以被取出,然后使用迭代器对象的next()方法取出当前位置的元素,将迭代器对象移动到下一个索引位置,将这两个方法配合使用即可完成遍历操作。

3、增强for循环(相当于创建第三方变量)

(1)格式:

for(E e: 集合对象)
  {
    对e对象的操作,e对象为从集合对象中取出的对象
  }

(2)注意事项:在增强for循环中修改第三方变量e的操作不会影响集合

四、Collection分支详解

(一)Collection常用方法

1、boolean add(E  e):添加元素e

2、boolean remove(E  e)  :删除元素e

3、boolean removeif(Object o):根据条件o删除元素,o常常是lambda表达式

4、void clear():清空集合

5、boolean contains(Object o):判断集合中是否存在指定元素

6、int  size():获取集合元素个数

(二)List常用实现类

  1、ArrayList类:

  (1)底层数据结构为数组,查询快,增删慢,三种遍历方式都可使用,初始空间为10个数组空间,当空间不够使用时,系统会自动扩容1.5倍数组空间。

   (2)定义格式:

ArrayList list = new ArrayList();

  2、LinkedList类:

(1)底层数据结构为双向链表,查询慢,增删快,三种遍历方式都可使用。

(2)定义格式:

LinkedList list = new LinkedList();

(3)常用方法:

    1)public void addFirst(E  e):在链表的首部添加元素e

    2)public void addLast(E  e):在链表的尾部添加元素e

    3)pubic E getLast():获取链表尾部元素

    4)public E getFirst():获取链表首部元素

    5)public E removeFirst():删除并返回链表首部元素

    6)public E removeLast():删除并返回链表尾部元素

(三)Set常用实现类

特点:

(1)可以去重复

(2)存取顺序不一致

(3)不带索引,所以不能使用普通for循环进行遍历 

1、TreeSet实现类(底层数据结构为红黑树):

(1)特点:可以按照规则进行排序,若使用TreeSet实现类需要制定排序规则!

(2)制定排序规则的两种方法:

1)自然排序Comparable的使用:

   第一步:使用空参构造方法创建TreeSet集合

   第二步:自定义的类实现Comparable接口

   第三步:重写compareTo(Object o)方法(o代表集合内部的元素,this代表当前元素)

2)比较器Comparator的使用:

   第一步:让集合对象的构造方法接收Comparator接口的实现对象

   第二步:重写compare(T o1,  T o2)方法,其中o1指的是this对象

3)不管是compareTo方法还是compare方法返回值都是int类型,若返回的是负数则放在左边,若返回的是0则插入,若返回的是正数则放在右边。

2、HashSet集合实现类(底层数据结构为哈希表)

(1)特点:底层哈希表实现,通过哈希值来确定具体元素的存放位置。

(2)哈希值的计算:jdk一般根据对象的地址或者对象的属性值来进行计算,在Java中可以通过Object类的hashCode()方法来获取对象的哈希值,默认是按照对象的地址来进行计算的,若要按照对象的属性来自定义计算哈希值,则需要重写hashCode()方法。

(3)哈希表结构:HashSet1.8版本以前的哈希表示由数组和链表组成,采用开链法来避免哈希冲突,当哈希值的个数达到数组容量的0.75倍时,数组会自动扩容到原来的两倍。HashSet1.8版本后,哈希表采用数组、链表和红黑树的组合方式来进行存储,JDK1.8以后 节点个数少于等于8个 数组 + 链表,节点个数多于8个 数组 + 红黑树。

Java集合详解_第2张图片

Java集合详解_第3张图片

五、Map分支详解

1、Map集合

 (1)概念:

双列集合,一次可以存储两个元素,即一对数据,每一对数据叫做键值对,每一对键值对都是一一对应的,键不能重复,但值可以重复。

(2)创建格式:

Map<键类型,值类型>  map = new HashMap/TreeMap<>();

(3)常用方法:

     1)V put(K key, V value):添加一对键值对,若键已存在则覆盖原先的value并返回原先的值。

     2)V remove(K, key):根据键值删除键值对元素

     3)  void clear():移除所有的键值对元素

     4)  boolean containsKey(Object key):判断键key是否已存在

     5)boolean containsValue(Object value):判断值value是否已存在

     6)boolean isEmpty():判断集合是否为空

     7)  int size():集合的长度,即集合中键值对的个数 

     8)V  get(Object key):根据键获取对应的值

     9)Set keySet():获取所有键的集合

     10)Set> entrySet():获取所有键值对组成Set集合并返回

     11)K  getKey():获取键值对的键

     12)  V  getValue():获取键值对的值

(4)遍历方式:

    1)第一种:首先通过调用keySet()方法获取当前Map的键的set集合,然后对该set集合进行遍历key值,对于每一个key值调用get(key)方法将键对应的值取出。

    2)  第二种:首先通过调用entrySet()方法获取所有键值对的set集合,然后对set集合进行遍历,通过调用Entry键值对的getKey()和getValue()方法取出相应的键和值。

2、Map集合的常见实现类:

(1)HashMap实现类:

         底层数据结构也是哈希表结构(jdk1.8之前由数组和链表实现,jdk1.8以后由数组和红黑树来组成)。

        依赖hashCode()方法和equals()来保证键的唯一。

        如果简要存储的是自定义的对象,需要重写hashCode()和equals()方法。

(2)TreeMap实现类:

        底层数据结构为红黑树,每一个Entry对象为一个结点,排序比较时只关心键,不关心值。

        依赖自然排序或者比较器排序,对键进行排序

        如果键存储的是自定义对象,需要实现Comparable接口或者创建TreeMap对象时给出比较器排序规则。

3、可变参数

(1)概念:方法中形参的个数是可变的。

(2)格式:修饰符  返回值类型  方法名(数据类型...变量名){ }  注意:这里的变量实际是一个数组

         例如:public static int sum(int...a) { }              a其实就是一个数组

   (注意:可变参数必须写在形参的后面

    

你可能感兴趣的:(java集合,java-ee)