首页 > 其他分享 >02-Collection、泛型

02-Collection、泛型

时间:2023-04-17 21:36:56浏览次数:25  
标签:02 元素 list 接口 集合 Collection 泛型 方法

02-Collection、泛型

1. Collection接口

在Java中,Collection是一个用于存储和操作一组对象的接口,它是Java集合框架中最基本的接口之一。Collection接口提供了许多常用的方法,用于对集合中的对象进行添加、删除、查找、遍历等操作,是Java中处理集合数据的常用工具。

概述

Collection接口是Java集合框架中定义的一个顶层接口,它继承了Iterable接口,表示它的实现类可以被迭代遍历。Collection接口定义了一些常用的方法,包括添加、删除、查找、遍历等操作,用于对集合中的对象进行处理。Collection接口的实现类包括了许多常用的集合类,例如ArrayListLinkedListHashSetTreeSet等。

常用方法

Collection接口提供了丰富的方法,以下是一些常用的方法:

  • add(E e):向集合中添加一个元素。
  • remove(Object o):从集合中删除指定的元素。
  • contains(Object o):判断集合中是否包含指定的元素。
  • size():返回集合中元素的个数。
  • isEmpty():判断集合是否为空。
  • clear():清空集合中的所有元素。
  • iterator():返回一个用于遍历集合的迭代器。
  • toArray():将集合转换为数组。

举例代码说明

以下是使用Collection接口进行集合操作的示例代码:

// 创建一个ArrayList集合
List<String> list = new ArrayList<>();

// 添加元素
list.add("apple");
list.add("banana");
list.add("cherry");

// 判断集合是否包含指定元素
boolean containsBanana = list.contains("banana");

// 删除指定元素
list.remove("cherry");

// 遍历集合并打印元素
for (String fruit : list) {
    System.out.println(fruit);
}

// 将集合转换为数组
String[] fruits = list.toArray(new String[0]);

上述代码中,首先创建了一个ArrayList集合,并使用add方法添加了三个元素。接着使用contains方法判断集合中是否包含指定元素,使用remove方法删除指定元素,使用for-each循环遍历集合并打印元素,最后使用toArray方法将集合转换为数组。

以上是关于Collection接口的概述、常用方法和举例代码说明。在实际编程中,Collection接口及其实现类常用于存储和处理一组对象的场景,如集合数据的添加、删除、查找、遍历等操作。

2. Iterator 迭代器

在 Java 中,Iterator(迭代器)是用于遍历集合(Collection)中元素的一种常用方式。它是一个接口,定义了一些用于访问集合中元素的方法,通过调用这些方法,可以按顺序访问集合中的每一个元素。

概述

Iterator 接口是 Java 集合框架中的一个接口,它定义了用于遍历集合中元素的方法,包括 hasNext()next()remove() 等。通过使用 Iterator 接口,可以在不知道集合的具体实现类型的情况下,遍历集合中的元素,实现了解耦合的效果。

常用方法

Iterator 接口提供了一些常用的方法,以下是一些常用的方法:

  • hasNext():判断集合中是否还有下一个元素,返回布尔值。
  • next():返回集合中的下一个元素,并将迭代器位置向后移动。
  • remove():从集合中删除通过 next() 方法返回的元素。

举例代码说明

以下是使用 Iterator 进行集合遍历的示例代码:

// 创建一个ArrayList集合
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");

// 获取Iterator迭代器
Iterator<String> iterator = list.iterator();

// 使用Iterator遍历集合
while (iterator.hasNext()) {
    String fruit = iterator.next();
    System.out.println(fruit);
}

// 使用Iterator删除集合中的元素
iterator = list.iterator();
while (iterator.hasNext()) {
    String fruit = iterator.next();
    if (fruit.equals("banana")) {
        iterator.remove();
    }
}

上述代码中,首先创建了一个 ArrayList 集合,并使用 add 方法添加了三个元素。然后通过调用 iterator 方法获取集合的迭代器。接着使用 while 循环和 hasNext()next() 方法遍历集合中的元素,并使用 remove() 方法删除集合中的指定元素。注意,在使用 Iteratorremove() 方法删除元素时,应该使用迭代器的 remove() 方法而不是集合的 remove() 方法,以避免可能的并发修改异常。

以上是关于 Iterator 迭代器的概述、常用方法和举例代码说明。在实际编程中,Iterator 接口常用于遍历集合中的元素,特别适用于需要在遍历过程中删除元素的情况。

3. 泛型

在 Java 中,泛型是一种强大的特性,允许在编译时期指定集合中元素的类型,从而增加了类型安全性和代码的可复用性。泛型可以用于类、接口、方法等地方,使得代码更加灵活和可读。

概述

泛型是一种编译时期的类型检查机制,允许在定义类、接口、方法时使用类型参数来代替具体的类型。这样,我们可以在使用这些类、接口、方法时指定实际的类型,从而避免了类型转换和运行时错误。

泛型的优点有:

  • 提供了编译时期的类型检查,减少了类型错误的可能性。
  • 提高了代码的可读性和可维护性,使得代码更加灵活和通用。
  • 避免了类型转换的开销,提高了性能。

常用方法

泛型在 Java 中有一些常用的用法,包括:

  • 泛型类:使用类型参数定义的类,可以在创建对象时指定类型,例如 ArrayList
  • 泛型接口:使用类型参数定义的接口,可以在实现接口时指定类型,例如 List
  • 泛型方法:使用类型参数定义的方法,可以在调用时指定类型,例如 public void printList(List list)
  • 通配符:使用 ? 表示的通配符,可以匹配任意类型,例如 List
  • 上界通配符:使用 extends 关键字限制类型的上界,例如 List
  • 下界通配符:使用 super 关键字限制类型的下界,例如 List

举例代码说明

以下是使用泛型的示例代码:

// 定义一个泛型类
class MyArrayList<T> {
    private T[] array;

    public MyArrayList(T[] array) {
        this.array = array;
    }

    public T get(int index) {
        return array[index];
    }

    public void set(int index, T value) {
        array[index] = value;
    }
}

// 使用泛型类
Integer[] intArray = new Integer[3];
MyArrayList<Integer> myList = new MyArrayList<>(intArray);
myList.set(0, 1);
int value = myList.get(0);

// 定义一个泛型方法
public static <T> void printList(List<T> list) {
    for (T item : list) {
        System.out.println(item);
    }
}

// 使用泛型方法
List<String> stringList = new ArrayList<>();
stringList.add("apple");
stringList.add("banana");
stringList.add("cherry");
printList(stringList);

上述代码中,首先定义了一个泛型类 MyArrayList,可以接收任意类型的数组,并提供了对数组元素的访问和修改方法。然后定义了一个泛型方法 printList,可以打印任意类型的集合元素。

标签:02,元素,list,接口,集合,Collection,泛型,方法
From: https://www.cnblogs.com/RookieMaster/p/17327559.html

相关文章

  • 2023.4.17软工日报
    今天上午写代码,下午上建民的课。我们进行了小组讨论。晚上完善了建民说的科技政策。按发布时间排序,还有名称省略。 鼠标放上去,可以查看全名字。 点击可以查看整个政策信息。 ......
  • Codeforces Round 625 (Div. 1, based on Technocup 2020 Final Round) A. Journey Pl
    https://codeforces.com/contest/1320/problem/AA.JourneyPlanning题目大意:给定一组数,问我们ai-aj==i-j的时候就可以把ai的值加起来,问我们可以凑到的最大总值是多少?input6107191015output26input1400000output400000input7892611122914out......
  • 03-List、Set、数据结构、Collections
    03-List、Set、Collections、Map1.List集合在Java中,List是一种常用的集合类型,用于存储一组有序的元素,并允许包含重复元素。List接口继承自Collection接口,并且提供了许多有用的方法来操作集合中的元素。概述List是一种有序的集合,它允许元素按照插入的顺序进行存储,并且......
  • 20230417小记
    感觉每天开一个还是太麻烦了()应该会合并一下。20230417闲话感觉有点找到状态了,虽然在某些时候会被打回原形。早上同桌换衣服了在操场上走了半圈没认出来。明天争取跑两圈()。什么时候能跑三圈啊(思索)想和同学打球了。感觉羽毛球太有意思了。就是说很喜欢一起的友好的感觉。菜也......
  • 2023.4.17编程一小时打卡
    一、问题描述:设计一款电子钟类,用于显示时、分、秒。实验要求:含有形参有默认值的默认构造函数;重载前缀++和后缀—用于调整时间,每次调整均对秒进行调整,若秒满60,则分加1,若分满60则时加1,时满24,则清零重新开始;重载插入运算符>>用于输入(设定)时间;重载插入运算符<<用于输出......
  • 2023成都.NET线下技术沙龙圆满结束
    2023年4月15日周六,由MASA技术团队和成都.NET俱乐部共同主办的2023年成都.NET线下技术沙龙活动在成都市世纪城新会展中心知域空间举行,共计报名人数90多人,实际到场60多人,13:30~18:00四个半小时的现场交流氛围极好,到场的童鞋也满载而归,我们看到了成都.NET社区小伙伴的激情,也让我们更......
  • MySQL高可用之MHA-02
    续目录配置vip一、keepalived方式二、通过脚本实现VIP切换总结@目录配置vip一、keepalived方式二、通过脚本实现VIP切换总结配置vipvip配置可以采用两种方式,一种通过keepalived的方式管理虚拟ip的浮动;另外一种通过脚本方式启动虚拟ip的方式(即不需要keepalived或者heartbeat类似......
  • CodeStar2023年春第5周周赛普及进阶组
    T1:分段求平均数本题难度中等,划分型DP问题。用dp[i]表示前\(i\)个数最少划分成几段,对\(j=1,2,\cdots,i-1\)判断从\(a_j\)到\(a_i\)划分成一段时,平均数是否为整数,如果是整数,就更新\(dp[i]=\max(dp[i],dp[j-1]+1)\)初始值:\(dp[i]=i\)代码实现#include<b......
  • 2023.4.17
    #include<iostream>#include<string>#defineMAX1000usingnamespacestd;voidshowMenu(){ cout<<"***************************"<<endl; cout<<"*****1、添加联系人*****"<<endl; cout<<"***......
  • 编程一小时2023.4.17
    1.#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;classVehicle{protected:stringNO;public:Vehicle(stringstr){NO=str;}virtualvoiddisplay()=0;virtual~Vehicle(){};};classCar:publicVehicle{int......