👌 棒棒有言:追逐梦想的过程就像是一个人在走一条黑暗、幽深而又漫长的隧道,多少次跌倒又爬起,经历了多少个暗无天日的黑夜与白天。一路上沉淀着难以计数的汗水与泪水,不断地自我暗示:只要自己坚持,只要勇敢地一向往前走,就必须能找到出口,必须会看到光明。
👌 本章简介:Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工具包位置是java.util.*Java集合主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections)。
👍 重要:请给个关注哦!
目录
Iterator接口
1、 Iterator接口概述
(1)Iterator接口表示对集合进行迭代的迭代器。Iterator接口为集合而生,专门实现集合的遍历。
(2)凡是由于Collection接口派生而来的接口或者类,都实现了iterator()方法,iterator()方法返回
一个Iterator对象。
(3)Iterator接口主要有如下两个方法:
-->hasNext():判断是否存在在一个可访问的元素,如果仍有元素可以迭代,则返回true。
-->next():返回要访问的下一个元素。
2、 使用Iterator遍历集合
Iterator it = list.iterator(); //获取集合迭代器Iterator
while(it.hashNext()){ //通过迭代器依次输出集合中所有元素的信息
Object obj = it.next();
}
Map接口
1、 Map接口概述
(1)Map接口存储一组成对的键(key)——值(value)对象,提供key到value的映射,通过key
来检索。
(2)Map接口中的key不要求有序,不允许重复。value同样不要求有序,但允许重复。
(3)Map接口的常用方法如下:
2、使用HashMap类动态存储数据
(1)Map接口中存储的数据都是键——值对,最常用的Map的实现类是HashMap,其优点是查询
元素效率高
(2)遍历HashMap集合时可以遍历键集和值集,有for循环遍历、增强for循环遍历和迭代器
(Iterator接口)遍历三种方式。
Collections类
(1)Collections类是Java提供的一个集合操作工具类。它包含了大量的静态方法,用于实现对集
合元素的排序、查找和替换等操作。
(2)Collections和Collection是不同的,前者是集合的操作类,后者是集合接口。
1、 对集合元素排序与查找
(1)排序是针对集合的一个常见需求。要排序就要知道两个元素哪个大哪个小。在Java中,如果
要实现一个类的对象之间比较大小,那么这个类就要实现Comparable接口。
(2)Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排
序,类的compareTo()方法被称为它的自然比较方法。
(3)compareTo()方法用于比较此对象与指定对象的顺序,如果该对象小于、等于或大于指定对
象,则分别返回负整数、零或正整数。
(4)compareTo()方法的定义语法格式如下
int compareTo(Object obj);
-->参数obj:obj是要比较的对象
-->返回值:负整数、零或正整数,根据此对象是小于、等于还是大于指定对象返回不同的值
(5)实现Collections接口的对象列表(和数组)可以通过Collections.sort()方法(和Arrays.sort()
方法)进行自动排序。
(6)元素之间可以比较大小之后,就可以使用Collections类的sort()方法对元素进行排序操作了。
Map接口本身是无序的,不能对Map接口做排序操作;List接口是有序的,可以对List接口进行排
序。
(7)使用binarySearch()方法可以查找集合中的元素,但是在使用binarySearch()方法之前需要使
用sort()方法对集合进行排序,否则不能保证查找结果的正确性。
2、 替换集合元素
可以使用Collections类的静态方法fill()方法把集合中的所有元素都替换为相同的元素。
泛型
认识泛型
(1)泛型是JDK1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一
个参数,使代码可以应用于多种类型。
(2)Java语言引入泛型的好处是安全简单,且所有强制转换都是自动和隐式进行的,提高了代码
的重用率。
1、 泛型的定义
(1)将对象的类型作为参数,指定到其他类或者方法上,从而保证类型转换的安全性和稳定性。
这就是泛型。泛型的本质就是参数化类型。
(2)泛型的定义语法格式如下:
类1或者接口<类型实参> 对象 = new 类2<类型实参>();
注意:
-->“类2”可以是“类1”本身,可以是“类1”的子类,还可以是接口的实现类。
-->“类2”的类型实参必须和“类1”中的类型实参相同。
(3)例如:ArrayList<String> list = new ArrayList<String>();
上述代码表示创建一个ArrayList集合,当规定该集合中存储的元素类型必须为String类型。
2、 泛型在集合中的应用
(1)JDK1.5中已经改写了集合框架中的所有接口和类,增加了对泛型的支持,也就是泛型集合。
(2)使用泛型集合在创建集合对象时指定集合中元素的类型,从集合中取出元素时无需进行强制
类型转换,并且如果把非指定类型对象放入到集合中,会出现编译错误。
(3)List和ArrayList的泛型形式是List<E>和ArrayList<E>,ArrayList<E>与ArrayList类的常用方法
基本一样。
(4)Map与HashMap也有它们的泛型形式,即Map<K,V>和HashMap<K,V>,因为它们的每一个
元素都包含两个部分,及key和value,所以,在应用泛型时,要同时指定key的类型和value的类
型,K表示key的类型,V表示value的类型。HashMap<K,V>操作数据的方法与HashMap基本一
样。
(5)泛型使集合的使用更方便,也提升了安全:
-->存储数据时进行严格类型检查,确保只有合适类型的对象才能存储在集合中。
-->从集合中检索对象时,减少了强制类型转换。
深入泛型
(1)在集合中使用泛型只是泛型多种应用的一种,在接口、类、方法等方面也有着泛型的广泛应
用。
(2)泛型的本质就是参数化类型,参数化类型的重要性在于允许创建一些类、接口和方法,其操
作的数据类型被定义为参数,可以在真正使用时指定具体的类型。
参数化类型:参数化类型包含一个类或者接口,以及实际的类型参数列表。
类型变量:是一种非限定性标识符,用来指定接口或者方法的类型。
1、 定义泛型类、泛型接口和泛型方法
(1)对于一些常常处理不同类型数据转换的接口或者类,可以使用泛型定义,如Java中的List接
口。
(2)定义泛型接口或类的过程,与定义一个接口或者类相似。
1)泛型类
概念:泛型类简单地说就是具有一个或者多个类型参数的类。
概念:泛型类简单地说就是具有一个或者多个类型参数的类。
语法:
访问修饰符 class className<TypeList>TypeList表示类型参数列表,每个类型变量之间以逗号分隔。
举例:
public class GenericClass<T>{······}创建泛型类实例:
new className<TypeList>(argList);TypeList表示定义的类型参数列表,每个类型变量之间以逗号分隔。
argList表示实际传递的类型参数列表,每个类型变量之间同样以逗号分隔。
举例:
new GenericClass<String>("this is String Object");
2)泛型接口
概念:泛型接口就是拥有一个或者多个类型参数的接口。泛型接口的定义方式与定义泛型类类似。
语法:
访问修饰符 interface interfaceName<TypeList>TypeList表示由逗号分隔的一个或多个类型参数列表。
举例:
public interface TestInterface<T>{public T print(T t);
}
泛型类实现泛型接口:
访问修饰符 class className<TypeList> implements interfaceName<TypeList>
3)泛型方法
概述:
一些方法常常需要对某一类型数据进行处理,若处理的数据乐行不确定,则可以通过泛型方法的方
式来定义,达到简化代码、提高代码重用性的目的。
泛型方法实际上就是带有类型参数的方法。
定义泛型方法与方法所在的类、或者接口是否是泛型类或者泛型接口没有直接的关系,也就是说无
论是泛型类还是非泛型类,如果需要就可以定义泛型方法。
语法:
访问修饰符 <类型参数> 返回值 方法名(类型参数列表)注意:
类型变量放置在访问修饰符与返回值之间。举例:
public <String> void showName(String s){}
2、 多个参数的泛型类
(1)泛型类的类型参数可以有一个或者多个。
(2)比如HashMap<K,V>就有两个类型参数,一个指定key的类型,一个指定value的类型。
3、 从泛型类派生子类
(1)面向对象的特征同样适用于泛型类,所以泛型类也可以继承。
(2)继承了反省类的子类,必须也是泛型类。
(3)继承泛型类的语法格式:class 子类<T> extends 父类<T>{}