Javaoop---集合框架(C7)

本文介绍了Java集合框架中的Collection接口及其子接口List和Set,展示了如何使用ArrayList、HashSet等实现类进行元素的添加、删除、查找等操作。同时,提到了Iterator接口在遍历集合中的应用,以及Map接口在键值对存储方面的功能。最后,文章讨论了泛型在提高代码安全性和可读性方面的作用。
摘要由CSDN通过智能技术生成

目录

Collection接口

Collection子接口:List与Set接口

Collection子接口:Iterator接口

        Map接口

泛型

Collection接口

特点:存储一组不唯一、无序的对象。

  1. Collection接口是一个顶层接口,继承它的子接口有List、Set等;
  2. Collection接口提供了基本的集合操作,如添加、删除、查找元素等,并且支持迭代器遍历集合中的元素;
  3. Collection接口还提供了一些常用的批量操作方法,如addAll()、removeAll()、retainAll()等。
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class CollectionDemo {

    public static void main(String[] args) {
        // 创建一个ArrayList集合实例
        Collection<String> collection = new ArrayList<>();

        // 添加元素
        collection.add("A");
        collection.add("B");
        collection.add("C");

        System.out.println("判断集合是否为空:" + collection.isEmpty());  // 输出:false
        System.out.println("获取集合中元素的个数:" + collection.size());  // 输出:3

        // 遍历集合
        Iterator<String> iterator = collection.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
            // 输出:
            // A
            // B
            // C
        }

        // 删除元素
        collection.remove("B");

        System.out.println("删除一个元素后,获取集合中元素的个数:" + collection.size()); // 输出:2

        // 判断是否包含指定元素
        System.out.println("是否包含元素 A:" + collection.contains("A"));   // 输出:true
        System.out.println("是否包含元素 B:" + collection.contains("B"));   // 输出:false

        // 将集合转化为数组形式返回
        Object[] array = collection.toArray();

        // 清空集合中所有元素
        collection.clear();

        System.out.println("清空集合后,获取集合中元素的个数:" + collection.size());  // 输出:0
    }
}

Collection子接口:List与Set接口

Collection接口的两个主要子接口是List和Set,它们都继承了Collection接口,但是它们在实现方式和使用方法上有所不同。

  1. List接口

List接口代表一个有序的元素列表,并且集合中的元素可以重复。List提供了按照索引访问集合中元素的方法,并且允许在列表中插入、添加、修改、删除元素等操作。

常用的List实现类包括:ArrayList、LinkedList、Vector等

api方法使用:

import java.util.ArrayList;
import java.util.List;

public class ListDemo {

    public static void main(String[] args) {
        // 创建ArrayList实例
        List<String> list = new ArrayList<>();

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

        // 获取指定位置元素
        System.out.println(list.get(0));  // 输出:apple

        // 在指定位置添加元素
        list.add(1, "pear");

        // 获取元素的索引值
        System.out.println(list.indexOf("pear"));  // 输出:1

        // 修改指定位置上的元素
        list.set(2, "watermelon");

        // 遍历所有元素
        for (String fruit : list) {
            System.out.println(fruit);
            // 输出:
            // apple
            // pear
            // watermelon
            // banana
            // orange
        }

        // 删除指定位置上的元素
        list.remove(0);

        // 清空集合中的所有元素
        list.clear();
    }
}

        2.Set接口

Set接口代表一组不可重复的元素,并且集合中的元素没有特定的顺序。Set保证相同的元素只会出现一次,如果尝试向Set中添加一个已经存在的元素,那么add()操作将返回false(并不会报错)。

常用的Set实现类包括:HashSet、TreeSet等。

总之,List和Set接口的不同点在于,List可以存储重复元素并且保持插入的顺序,而Set不允许有重复元素,且不保证元素的顺序。

api方法使用:

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class SetDemo {

    public static void main(String[] args) {
        // 创建HashSet实例
        Set<String> set = new HashSet<>();

        // 添加元素
        set.add("apple");
        set.add("banana");
        set.add("orange");

        // 获取元素个数
        System.out.println(set.size());   // 输出:3

        // 判断是否包含某个元素
        System.out.println(set.contains("banana"));   // 输出:true

        // 遍历所有元素
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
            // 输出:
            // orange
            // banana
            // apple
        }

        // 删除指定元素
        set.remove("orange");

        // 清空集合中的所有元素
        set.clear();
    }
}

Collection子接口:Iterator接口

  1. Iterator 接口提供了迭代器模式的实现:使用者无需知道集合底层的数据结构、算法等实现细节,只需要通过 Iterator 接口提供的操作方法便可遍历整个集合。

  2. Iterator 接口可以实现单向遍历集合。只能按照前进方向依次遍历集合中的元素,且不支持随机访问(如 List 中的 index 访问)。

  3. Iterator 接口提供了大量便捷的 API 方法,包括 hasNext()、next()、remove() 等,使得使用者可以轻松获取、删除集合中的元素。

以下是一些常用的 Iterator 接口的 API 使用方法:

  1. hasNext(): 判断是否还有下一个元素。

  2. next(): 返回集合中下一个元素,并将指针移动到下一个位置。如果没有下一个元素,会抛出 NoSuchElementException 异常。

  3. remove(): 移除集合中最后一个返回的元素,该方法必须在调用 next() 之后进行,否则会抛出 IllegalStateException 异常。

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
    Integer element = iterator.next();
    System.out.println(element);
}

输出结果:

1 2 3 

Map接口

Map 接口是 Java 集合框架中的一个成员,它提供了一种键值对映射的方式来存储和管理数据。Map 接口中的每个元素都包括一个键和一个值,其中键用于唯一标识所存储的对象,而值则表示与该键相关联的信息。

Map 接口的特点包括:

  1. Map 接口允许使用不同类型的对象作为键和值,并且支持 null 对象作为键和值。

  2. Map 接口提供了快速查找的功能,可以根据键快速定位到对应的值,而不需要遍历整个集合。

  3. Map 接口提供了大量的 API 方法,包括 put()、get()、remove() 等,使得使用者可以方便地插入、获取或删除 Map 中的元素。

下面是一些常用的 Map 接口的 API 使用方法:

  1. put(): 向 Map 中插入一个键值对。如果该键已经存在,则会覆盖其原来的值。

  2. get(): 根据指定的键获取 Map 中对应的值。

  3. remove(): 根据指定的键从 Map 中移除对应的键值对。

  4. containsKey(): 判断 Map 中是否存在指定的键。

  5. containsValue(): 判断 Map 中是否存在指定的值。

import java.util.HashMap;
import java.util.Map;

public class HashMapDemo {
    public static void main(String[] args) {
        // 创建HashMap实例
        Map<String, Integer> map = new HashMap<>();

        // 插入元素
        map.put("apple", 1);
        map.put("banana", 2);
        map.put("orange", 3);

        // 获取指定键的值
        System.out.println(map.get("apple"));   // 输出:1

        // 遍历所有元素
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(key + ":" + value);
            // 输出:
            // apple:1
            // banana:2
            // orange:3
        }

        // 移除指定键的元素
        map.remove("banana");

        // 清空集合中的所有元素
        map.clear();
    }
}

泛型

泛型是 Java 语言中的一个功能,它允许在定义类、接口和方法的时候使用类型参数,以支持类、接口和方法的通用性,在编译期间对类型进行检查和限制,提高程序的可读性、可维护性和安全性。

Java 引入了泛型概念之后,可以更加准确和灵活地声明变量和方法,使得代码更加简洁、易读和可扩展。当需要在类或方法中使用某种类型,但又不确定具体使用哪一种类型(例如:集合框架中的 List、Set、Map 等),就可以使用泛型来定义类或方法,这样可以避免类型转换等一系列问题。

泛型主要有以下几个方面:

  1. 类型参数化:在定义类、接口和方法时声明类型参数,例如:class MyClass<T> {}

  2. 类型约束:通过泛型定义继承或接口实现关系,并指定范型类型限制,例如:class MyClass<T extends Number> {}表示T必须是数字类型。

  3. 类型推断:在实例化泛型类时可以省略类型参数。例如:MyClass<String> obj = new MyClass<>();,在尖括号中不需要再明确指定 String。

public class GenericMethodDemo {
/**
*演示了如何使用泛型定义一个通用方法 printArray,该方法可以接受任意类型的数组作为参数,并打印出数组中的所有元素。由于使用了泛型,这个方法可以在不改变具体数据类型的情况下被多次调用,提高了代码的复用性和扩展性。
*/
    public static <T> void printArray(T[] inputArray) {
        for (T element : inputArray) {
            System.out.printf("%s ", element);
        }
        System.out.println();
    }

    public static void main(String args[]) {
        Integer[] intArray = {1, 2, 3, 4, 5};
        Double[] doubleArray = {1.0, 2.0, 3.0, 4.0, 5.0};
        Character[] charArray = {'H', 'E', 'L', 'L', 'O'};

        System.out.println("intArray:");
        printArray(intArray);

        System.out.println("\ndoubleArray:");
        printArray(doubleArray);

        System.out.println("\ncharArray:");
        printArray(charArray);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值