0


Java集合

1、前言

Java是面向对象的语言,我们在编程的时候需要存储对象的容器,数组可以满足这个需求,但是数组初始化时长度是固定的,但是我们往往需要一个长度可变化的容器,因此,集合出现了。

1.1集合与数组的区别

(1)长度区别:集合长度可变,数组长度不可变

(2)内容区别:集合可存储不同类型元素,数组存储只可单一类型元素

(3)元素区别:集合只能存储引用类型元素,数组可存储引用、基本类型

1.2集合概述

Java集合框架图如下图所示:

可见所有集合实现类的最顶层接口为Iterable和Collection接口,再向下Collection和Map,Collection分为了三种不同的形式,分别是Lise,Queue和Set接口,然后是对应不同的实现类。

2、Collection接口(单列集合)

  • Collection集合概述

             o  是**单列集合**的最顶层接口,这些对象也称为Collection的元素
    
  • Collection集合基本使用

  • Collection集合的常用方法
    接口作用int size();长度boolean add(E e);添加元素boolean isEmpty();是否为空boolean contains(Objoect o);是否包含某元素boolean remove(Objoect o);删除void clear();清楚所有元素Iterator <E>iterator();iterator接口Object[ ]toArray();转换为数组<T>T[ ]toArray(T[ ]arr);

    2.1List接口

  • List集合的概述

               o 有序(也称为序列),List的行为和数组几乎完全相同:内部按照放入元素的先后顺序存放,每个元素都可以通过索引确定自己的位置,索引和数组一样,都是从
    
0

开始

  • List集合的特点

               o ①有索引值  ②可以存储重复元素(元素可重复,通过.equals()比较是否重复) ③元素存取有序
    
  • List集合的特有方法

               o 利用索引(index)定义
    

方法名描述void add(int inde,E e);给指定索引位置添加元素E get(int inde);获取索引值位置的元素E set(int inde,E e);修改指定索引处的元素,返回被修改的元素E romove(int inde);删除指定索引处的元素,返回被删除的元素

2.1.1 ArrayList实现类

  • ArrayList数据结构

             o  底层是数组
    
  • ArrayList特点

             o 查询快,增删慢,主要用于查询遍历数据,为最常用集合之一
    
  • ArrayList底层分析

             o数组结构是有序的元素序列,在内存中开辟一段连续的空间,在空间中存放元素,每个空间都有编号,通过编号可以快速找到相应元素,因此查询快;数组初始化时长度时固定的,想要增删元素,必须创建一个新数组,把源数组的元素复制进来,随后源数组销毁,耗时长,因此增删慢。
    


2.1.2 LinkedList实现类

  • LinkedList数据结构

             o  底层是双向链表
    
  • LinkedList特点

             o 查询慢,增删快
    
  • LinkedList底层分析

             o链表分为单向链表和双向链表,也就是一条链子和两条链子的区别:①多出的那条链子记录了元素顺序,因此单向链表时无序的,双向链表是有序的;②链表没有索引,因此查询慢;③链表的增删只需在原有的基础上连上链子或切断链子,因此增删快。
    
  • LinkedList<E>特有方法
    成员方法描述void addFirst(E e);将指定元素插入此列表的开头void addLast(E e);将指定元素添加此列表的结尾String removeFirst();
    删除并返回第一个元素

String removeLast
() ;

删除并返回最后一个元素
String getFirst();获取第一个元素String getLast();获取最后一个元素

2.1.3 Vector实现类(较少使用)

  • Vector数据结构

             o  底层是数组
    
  • Vector特点

             o  查询快,增删慢
    
  • Vector底层分析

             o  和ArrayList一样,都是数组实现,因此具有相似的特性。
    

它们之间的区别在于:Vector是线程安全,效率低;ArrayList是线程不安全,效率高

2.2Set接口

  • Set集合的特点

               o ①没有索引值  ②不能存储重复元素 ③元素存取无序 
    
  • 如果说List对集合加了有序性的化,那么Set就是对集合加上了唯一性。

2.2.1哈希值

  • 哈希值简介

             o 是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
    
  • 如何获取哈希值

             o Object类中的public int hashCode():返回对象的哈希码值
    
  • 哈希值的特点

             ①同一个对象多次调用hashCode()方法返回的哈希值是相同的
    
             ② 默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同
    

** 2.2.2HashSet实现类**

  • HashSet数据结构

             o  (JDK8)底层是哈希表
    
  • HashSet特点

             o  查询快,元素无序,元素不可重复,没有索引(所以不能使用普通for循环遍历)
    

2.2.3LinkedHashSet实现类

  • LinkedHashSet数据结构

             o  底层是链表+哈希表
    
  • LinkedHashSet特点

             o   查询快,元素有序,元素不可重复,没有索引
    
  • LinkedHashSet底层分析

             o   作为HashSet的子类,比它多了一条链表,这条链表用来记录元素顺序,所以LinkedHashSet中的元素有序
    

2.2.4TreeSet实现类

  • TreeSet数据结构

             o  底层是红黑树
    
  • TreeSet特点

             o   查询快,元素有序,元素不可重复,没有索引
    
  • TreeSet底层分析

             o   作为HashSet的子类,比它多了一条链表,这条链表用来记录元素顺序,所以LinkedHashSet中的元素有序
    
  • TreeSet注意事项

             o TreeSet新增元素的时候,元素的类型必须是Comparable类型,如果新增的元素不是Comparable类型,则需要:创建一个Comparable类型的对象传入到TreeSet的构造方法中
    

3、Map接口(双列集合)

  • Map概述

             o  Map接口本身就是一个顶层接口,由一堆Map自身接口方法和一个Entry接口组成,Entry接口定义了主要是关于Key-Value自身的一些操作,Map接口定义的是一些属性和关于属性查找修改的一些接口方法
    
             o  interface Map<k,v>  k:键的类型;V:值的类型 
    
  • Map特点

** ** ①键值对映射关系

          ②一个键对应一个值

          ③键不能重复,值可以重复

          ④元素存取无序
  • Map基本使用

  • Map通用方法
    方法名说明
    V put(K key,V value);
    如果K存在,则新的V替换旧的V,返回被替代的V。如果K不存在则返回null
    V remove(Object key);

根据键删除键值对元素

void clear();

移除所有的键值对元素

boolean containsKey(Object key);

判断集合是否包含指定的键

boolean containsValue(Object value);

判断集合是否包含指定的值

boolean isEmpty();

判断集合是否为空

int size();
获取集合中元素的个数

  • Map集合的获取功能
    方法名说明V get(Object key);根据key获取V,如果key不存在返回nullSet keySet();获取所有键值Collection values();获取所有值Set<Map.Entry<K,V>>entrySet获取所有键值对象

  • Map集合的遍历

         o 遍历思路
    
               我们刚才存储的元素都是成对出现的,所以我们把Map看成是一个夫妻对的集合 
    
                     ①把所有的丈夫给集中起来
    
                     ②遍历丈夫的集合,获取到每一个丈夫
    
                     ③根据丈夫去找对应的妻子
    
       o 步骤分析
    
                     ①获取所有键的集合,用keySet()方法实现
    
                     ②遍历键的集合,获取到每一个键,用增强for实现
    
                     ③根据键去找值。用get(Object key)方法实现
    
  • 代码实现

3.1HashMap实现类

  • HashMap数据结构JDK.8

             o  底层是哈希表(数组+单向链表+红黑树)
    
  • HashMap特点

             o   查询快,元素无序,key不允许重复但可以为null,value可以重复
    
  • HashMap底层分析

             o   和HashSet底层相类似
    

3.2LinkedHashMap实现类

  • LinkedHashMap数据结构JDK.8

             o  底层是链表+哈希表
    
  • LinkedHashMap特点

             o   查询快,元素有序,key不允许重复并且不能为null,value可以重复
    

3.3HashTable实现类(基本不用)

  • HashTable数据结构JDK.8

             o  底层是哈希表
    
  • HashTable特点

             o   查询快,元素无序,key不允许重复并且不能为null,value可以重复
    

3.4TreeMap实现类

  • TreeMap数据结构JDK.8

             o  底层是红黑树
    
  • TreeMap特点

             o    查询快,元素有序,key不允许重复并且不能为null,value可以重复
    

4、Collections集合工具类

4.1 Collections概述和使用

  • Collections类的作用

           o 是针对集合操作的工具类
    
  • Collections类常用方法
    方法名说明
    static <T extends Comparable<T>> void sort (List<T>list);

将指定的列表按升序排序

static void reverse(List<?> list);

反转指定列表中元素的顺序

static void shuffle(List<?> list);
使用

默认的随机源随机排列指定的列表

标签: java

本文转载自: https://blog.csdn.net/m0_70314224/article/details/124974254
版权归原作者 F_549329652 所有, 如有侵权,请联系我们删除。

“Java集合”的评论:

还没有评论