Java集合框架之单列集合Collection

本文介绍了Java集合框架的基本概念,包括Collection、List、Set等接口及其实现类如ArrayList、LinkedList、HashSet等的特点与用法。同时涵盖了泛型的概念与使用方法,以及Collections工具类的相关操作。

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

一:集合概念
集合为java中一种容器,可用来存放各种不定长的不同类型的数据。
的所有集合类都位于 java.util 包,其中提供了一个表示和操作对象集合的统一构架,包含大量集合接口,以及这些接口的实现类和操作它们的算法。

一个集合是一个对象,但它表示一组对象,Java 集合中实际存放的是对象的引用值,不能存放基本数据类型值。

PS:集合与数组区别:
1.长度:数组长度固定,集合长度不固定,可变长。
2.存放数据:数组中只能存放一种数据类型,并且为基本数据类型。
集合中可存放多种数据类型,不能存放基本数据类型。
如果集合中想要存放基本数据类型,需要将其转换为对应的包装类。
如下所示:
在这里插入图片描述

二:Java集合框架
集合框架是一个类库的集合,包含实现集合的接口。
在这里插入图片描述
1.单列集根接口Collection:
在这里插入图片描述
PS:
Collection接口常用方法:

* boolean add(E e):增加元素到集合
* boolean remove(E e):从集合中删除元素
* void clear():从集合清空所有元素
* boolean contains :判读元素在不在集合中
* boolean isEmtpy:当前集合是否为空
* int size() arr.length
* Object[] toArray() :把集合中的元素,存储到数组中
** Iterartor iterator() 

测试代码如下:
在这里插入图片描述
2.List接口
List接口特点:
(1)list为有序集合,存取数据顺序一致。
(2)存储的元素可以重复。
(3)有索引,可以使用for循环遍历。

1)ArrayList类
ArrayList实现了Collection和List接口。
ArrayList 是一个数组队列,相当于动态数组,可以扩容。
测试代码如下:
在这里插入图片描述
list集合遍历三种方式
在这里插入图片描述
PS:
Iterater接口:
(1)在程序开发中,经常要遍历集合所有元素,提供接口 java.util.Iterator
(2)Iterator只能用于查询 ,不能使用接口,增加,删除元素
(3)迭代 :在集合中获取所有元素,在取元素之前,先判断集合有没有元素, 如果有,就把元素取出来,继续来判断,如果还有就再取出来, 一直到把集合中所有元素全部取出,这种取出方式就叫迭代。
(4)Iterator迭代器原理
Iterator迭代器在遍历集合对象时,内部采用指针方式来跟踪集合中元素
指针的初始位置第一个元素之前(before)。

2)LinkedList类
1.底层是一个链表结构,查询慢,增删快。
2.linkedList中包含了增删首和尾的较多方法。
3.若使用LinkedList,不建议使用多态。

包含方法:

   - public void addFirst(E e):将指定元素插入此列表的开头。
    - public void addLast(E e):将指定元素添加到此列表的结尾。
    - public void push(E e):将元素推入此列表所表示的堆栈。

    - public E getFirst():返回此列表的第一个元素。
    - public E getLast():返回此列表的最后一个元素。

    - public E removeFirst():移除并返回此列表的第一个元素。
    - public E removeLast():移除并返回此列表的最后一个元素。
    - public E pop():从此列表所表示的堆栈处弹出一个元素。

    - public boolean isEmpty():如果列表不包含元素,则返回true。

测试代码如下:
在这里插入图片描述
3.Set接口
Set接口的特点:
1.不允许存储重复的元素
2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历
测试代码如下:在这里插入图片描述
1)HashSet类
java.util.HashSet集合 implements Set接口
HashSet特点:
1.不允许存储重复的元素
2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历
3.是一个无序的集合,存储元素和取出元素的顺序有可能不一致
4.底层是一个哈希表结构(查询的速度非常的快)
5.HashSet 是根据对象的哈希值来确定元素在集合中的存储位置,因 此具有良好的存取和查找性能。保证元素唯一性
的方式依赖于: hashCode 与 equals 方法

实例:
HashSet存储自定义类型元素
需求:存储自定义对象,并保证元素的唯一性
分析:存储的元素(String,Integer,…Student,Person…),必须重写hashCode方法和equals方法
Person类:同名同年龄的人,视为同一个人,只能存储一次
在这里插入图片描述
在这里插入图片描述
测试类:
在这里插入图片描述
1)LinkedHashSet类
(1)在Set基础上,与HashSet作比较,LinkedHashSet存取数据顺序一致。
(2)特点:底层是一条哈希表。
哈希表:(数组+链表+红黑树)+链表
在这里插入图片描述
测试代码如下:
在这里插入图片描述

二:泛型 (E T)
1.泛型概念:泛型是一种未知的数据类型。在定义集合时如果不知道使用什么类型,就使用泛型。
泛型实际相当于变量:Integer, String ,Date
2.泛型的使用:创建集合时,使用泛型,明确数据类型。
如:
ArrayList list=new ArrayList<>();//创建一个AarryList类集合,里面存String类型数据。
3. 使用泛型好处
(1)好处: 编译期报错-》把运行期异常提升了到了编译期。避免了类型转换麻烦,存储是类型,取出是什么类型
(2)弊端: 限制存储类型。泛型是什么类型,只能存储什么样类型。
4.自定义泛型:
(1)自定义泛型方法类:
定义方法中泛型,使用者负责指字泛型确定类型
(2)自定义泛型接口:
接口可以定义泛型,但接口实现必须确定泛型类型

三:可变参数
1.基本概念:适用于参数个数不确定,类型确定的情况。JDK1.5之后出现新特性。
2.语法格式:
修饰符 返回类型 方法名(数据类型 …变量名){}
3.可变参数原理:
…变量名->就是参数数组 ,根据传递参数的个数,会创建不同长数组,类存储这些参数,传参个数,可以1,2,3,4…
可变参数的注意事项:
1.一个方法参数列表,只能有一个可变参数
2. 如果方法的参数有多个,那么可变参数必须写在参数列表末尾。
3. 可变参数的终极写法

public static void method(Object ...objs) {
	for(Object o:objs) {
		System.out.println(o);
	}
}

测试代码如下:在这里插入图片描述
四:Collections工具类
1.概念:
java.util.Collections是集合工具类,用来对集合进行操作
2.相关方法:

 1) public static <T> boolean addAll(Collection<T> c, T... elements) :往集合中添加一些元素。
  2)public static void shuffle(List<?> list) 打乱顺序 :打乱集合顺序。
  3)public static <T> void sort(List<T> list) :将集合中元素按照默认规则排序。
 4)public static <T> void sort(List<T> list,Comparator<? super T> ) :将集合中元素按照指定规则排序。

测试代码如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值