(集合,Collection,List--ArrayList&LinkedList,泛型,Set--HashSet,Collections工具类)2020.10.27-29

本文详细介绍了Java集合框架中的重要概念,包括Collection接口的List和Set子接口,如ArrayList和LinkedList的实现原理及操作效率,泛型的应用,以及Set接口的HashSet和LinkedHashSet。此外,还涵盖了Map接口的HashMap和LinkedHashMap,以及Collections工具类的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

集合框架

集合理解为是:容器。

集合和数组的区别:
数组:
 1.存储基本类型或引用类型都可以
 2.创建数组时,只能存储同一种类型的数据
 3.容器大小是固定的,不能改变
 4.数组中的元素通过下标来操作
集合:
 1.只能存储引用类型
 2.创建集合时,可以存储不同类型的数据
 3.容器大小是可变的
 4.有的容器有下标,有的没有下标
 
集合框架:
 java.util包
 
单列集合:
 Collection
  --List :有序可重复,有序指的是存入的顺序和取出的顺序是一致的
   --ArrayList
   --LinkedList
  --Set :无序不可重复,无序指的是存入的额顺序和取出的顺序不一定一致。
   --HashSet
   --LinkedHashSet
双列集合:
 Map:映射,存储一对一对的数据。
  --HashMap
   --LinkedHashMap

Collecttion:
—List:有序可重复
–LinkedList:使用链表实现的,增删快,查询慢
–ArrayList:使用可变数组实现,查询快,增删慢
—Set:无序不可重复
–HashSet:使用哈希表实现,自定义对象需重写hashCode和equals方法
–LinkedHashSet:链表+哈希表,有序不可重复
方法: add() / remove() / size()
Map:
–HashMap key要唯一,使用哈希表算法
–LinkedHashMap key唯一并有序,使用哈希表+链表
方法: put() / get(key) /size() /remove()

Collection

是一个接口。
在这里插入图片描述
在这里插入图片描述
遍历集合元素
 1.将集合转为数组
  Object[] toArray()
在这里插入图片描述
 2.使用迭代器
  Iterator iterator()
在这里插入图片描述
  注意:如果没有迭代的元素,还调用了next方法,则会出现异常
     NoSuchElementException  没有这个元素异常
  使用迭代器时注意:
在这里插入图片描述
  对coll对象想要迭代取出元素,又想要添加元素。
  解决方式:
     要么都是用迭代器里的功能来操作
     要么都是用集合里的功能来操作

List集合

是Collection接口的子接口,称为叫做序列(列表)
特点: 有序,可以有重复元素。因为有整数索引,可以控制顺序,可以有重复元素。
因此,此接口在继承父接口的方法的同时,新增了一些与索引有关的方法。
方法:
  在指定的索引处可以添加、修改、删除、获取元素。
在这里插入图片描述
遍历:
  1.转数组 2.迭代器和列表迭代器 3.for-each语句或普通for语句
在这里插入图片描述
在这里插入图片描述
  使用列表迭代器逆向遍历,需先调整指针位置,可以通过下边的方法进行调整。
在这里插入图片描述

List的实现类
ArrayList

实现原理:可变大小数组,因此可以精确查找元素。
 特点:查找或修改快,增删慢(元素位置的移动)。元素都在一块连续的空间。
 可以存储null元素,前身是Vector。
  与Vector的区别是:ArrayList线程不安全,Vector线程安全,都慢。
  这个对象现在是List接口的一个实现类。
构造方法:
 new ArrayList() : 默认初始容量为10
 new ArrayList(capacity):指定初始容量
在这里插入图片描述

LinkedList

实现原理:链接列表实现。
     节点: 元素+引用。
特点:元素不需要在一块连续的空间内,查找慢,增删快。线程不安全对象。
   允许存储null元素。在头尾添加了get、remove、insert方法。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201028185701897.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,sh adow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h4YzJ1,size_16,color_FFFFFF,t_70#pic_center)

泛型

属于是一个机制,jdk5.0版本新增的特性。
理解:广泛的类型。当定义某个类时,不能确定操作的数据类型时,可以使用泛型
当一旦确定了泛型的类型,那么此时只能操作这一种类型。
某种类型支持泛型技术,但是我们应用该技术,那么默认操作的是Object类型。
格式: <引用类型>
应用:eg:ArrayList list = new ArrayList();
   jdk7.0, 类型推断,ArrayList list = new ArrayList<>();
好处:
 1.安全机制,将运行时会出现的异常提前至编译时期
 2.不需要强转
在这里插入图片描述

自定义泛型
泛型类

格式:
 class 类名<E1,E2,…>{}
 泛型类上定义的泛型,在整个类中可以直接使用。
 当创建对象时,确定泛型类型。
在这里插入图片描述

泛型方法

格式:
  修饰符 <E1,E2,E3,…> 返回值类型 方法名(E1 e1, E2 e2){}
  调用方法时,确定泛型类型。
  注意:1.泛型类型的声明,并不意味着都需要同时使用。
      2.该方法是实例方法,因此泛型类上的泛型可以直接使用
     3.方法可以是静态的,那么该方法使用类名调用,不需要对象,因此不可以使用泛型类上的泛型。
在这里插入图片描述

泛型接口

格式:
  interface 接口名<E1,E2,…>{}
  确定泛型类型:1.实现接口时直接确定 2.创建实现类时再确定
在这里插入图片描述
定义泛型常量的名字:E、R、T、Q、U、W

泛型通配符

是应用在方法的参数列表上。
有三种写法:
 <?> : 通配符或占位符,相当于Object类型。
 泛型限定:
 <? extends E>: E类型或E的子类型 —上限
 <? super E>: E类型或E的父类型 — 下限
在这里插入图片描述

Set集合

是Collection的一个子接口。
特点:不能存储重复元素,也不能保证存入和取出顺序一致。
   最多能存储一个null
.
接口中并没有新增方法,全部来自于父接口Collection。
遍历:
  1.转数组 :Object[] toArray()
  2.迭代器 :Iterator
  3.jdk5.0新增的语句:
    增强for循环或for-each语句
     for(元素类型 变量名 : 被遍历的对象(数组或集合)){
       语句;…
     }
    只能用来做与遍历有关的操作,不能修改集合或数组中的元素值
    如果想要修改只能使用普通的for循环。
  4. T[] toArray(T[])
    a.创建的数组长度等于集合的长度,将集合元素直接存储到数组中
    b.创建的数组长度大于集合的长度,将集合元素直接存储到数组中,其余位置存默认值
    c.创建的数组长度小于集合的长度,该数组不使用,创建一个新的数组来存储集合的元素,并将这个新数组返回
在这里插入图片描述

HashSet

底层实现原理是:哈希表算法。
  当存储元素时,元素首先会先计算自身的哈希值,看这个值是否在容器中有出现,如果没有那么直接存入;如果有出现,会进行第二次的比较,比较是否是同一对象,如果是不存入,如果不是则存入。
  元素计算哈希值依赖于Object类中的hashCode方法
  元素进行比较是否是同一对象依赖于Object类中equals方法
  当存储自定义对象时,想要保证元素的唯一(属性信息值唯一),需重写hashCode和equals方法
  hashCode方法的重写:通常使用类中的属性编写一个表达式
  equals方法的重写:进行属性值的比较
在这里插入图片描述

LinkedHashSet

底层实现原理是:链接列表+哈希表实现的。
因此该容器的特点是:有序不可重复
使用方式按照HashSet使用即可,因为LinkedHashSet是HashSet容器的子类。

Map

地图的意思,在Java中称为叫做映射。
Map容器是用来存储具有映射关系的一对一对的数据,一对一对的数据又称为叫做键值对。
键–key ,值–value,注意key要保证唯一,value可重复。
实现类对象:
HashMap
—LinkedHashMap
Map中方法演示:

在这里插入图片描述
Map集合元素遍历:

在这里插入图片描述
实现类:

HashMap

key使用哈希表算法,允许存储null作为key和value,线程不安全对象。

LinkedHashMap

key使用哈希表+链表算法,保证顺序。有序不可重复
当存储自定义对象时,需重写hashCode和equals方法
在这里插入图片描述
在这里插入图片描述

Hashtable

key使用哈希表算法,不允许存储null,线程安全对象。

在这里插入图片描述

Collections

集合工具类。都是静态方法,大部分方法都是用来操作Collection。
可变参数
 数据类型… 变量名
 实际底层原理:就是一个数组,根据实际参数的个数创建对应大小的数据,并将数据存入。
 实际参数的个数:大于等于0
注意:1.在一个参数列表中,只能出现一个可变参数
   2.在参数列表中,可变参数必须放在最后边
   在这里插入图片描述
方法:

在这里插入图片描述
以上方法是用来返回一个线程安全的集合容器对象。

在这里插入图片描述
以上方法是用来返回一个不可修改的容器对象。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值