Java集合

目录

1、前言

1.1集合与数组的区别

1.2集合概述

2、Collection接口(单列集合)

2.1List接口

2.1.1 ArrayList实现类

2.1.2 LinkedList实现类

2.1.3 Vector实现类(较少使用)

2.2Set接口

 2.2.1哈希值

 2.2.2HashSet实现类

2.2.3LinkedHashSet实现类

2.2.4TreeSet实现类

3、Map接口(双列集合)

3.1HashMap实现类

3.2LinkedHashMap实现类

3.3HashTable实现类(基本不用)

3.4TreeMap实现类

4、Collections集合工具类

4.1 Collections概述和使用


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不存在返回null
Set 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);
使用
默认的随机源随机排列指定的列表

  • 22
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

F_549329652

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值