集合(接着上一次的)

发布于:2022-11-29 ⋅ 阅读:(285) ⋅ 点赞:(0)

👌 棒棒有言:追逐梦想的过程就像是一个人在走一条黑暗、幽深而又漫长的隧道,多少次跌倒又爬起,经历了多少个暗无天日的黑夜与白天。一路上沉淀着难以计数的汗水与泪水,不断地自我暗示:只要自己坚持,只要勇敢地一向往前走,就必须能找到出口,必须会看到光明。

👌 本章简介:Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工具包位置是java.util.*Java集合主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections)。

👍  请点击集合的前一部分
👍  作者:get棒棒给个关注

👍  重要:请给个关注哦!

目录

Iterator接口

1、 Iterator接口概述

2、 使用Iterator遍历集合

Map接口

1、 Map接口概述

2、使用HashMap类动态存储数据 

 Collections类

1、 对集合元素排序与查找

2、 替换集合元素

泛型

认识泛型

1、 泛型的定义

2、 泛型在集合中的应用

 深入泛型

1、 定义泛型类、泛型接口和泛型方法

1)泛型类

2)泛型接口

3)泛型方法

2、 多个参数的泛型类

3、 从泛型类派生子类


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>{}

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到