当前位置: 首页 > article >正文

《掌握 Java:从基础到高级概念的综合指南》(3/15)

目录

1. 引言

2. 集合框架概述

2.1 集合框架的类层次结构

3. List 接口

3.1 ArrayList

3.2 LinkedList

3.3 ArrayList vs LinkedList 对比

4. Set 接口

4.1 HashSet

4.2 TreeSet

4.3 HashSet vs TreeSet 对比

5. Map 接口

5.1 HashMap

5.2 TreeMap

5.3 HashMap vs TreeMap 对比

6. 集合工具类 Collections 的使用

6.1 排序

7. 结论


Java 集合框架基础

1. 引言

集合框架是 Java 中非常重要的一部分,它提供了一整套用于存储和处理数据的接口和类,使开发者能够更高效地管理数据。Java 集合框架包括了多种集合类,如 List、Set、Map,它们具有不同的特性和使用场景。本篇文章将全面介绍 Java 集合框架的基本概念、集合的实现类及其特性、常见的集合操作以及集合工具类的使用。

2. 集合框架概述

Java 集合框架主要由以下几个接口构成:

  • Collection 接口:定义了存储一组对象的方法,是 List、Set 等接口的父接口。

  • Map 接口:用于存储键值对。

  • Iterable 接口:使集合可以被迭代,所有的集合类都实现了这个接口。

2.1 集合框架的类层次结构

Java 集合框架提供了一组丰富的类和接口,其类层次结构如下:

java.lang.Object
  |
  +-- java.util.Collection
       |
       +-- java.util.List
       |     +-- ArrayList, LinkedList, Vector
       |
       +-- java.util.Set
             +-- HashSet, TreeSet, LinkedHashSet

  +-- java.util.Map
       +-- HashMap, TreeMap, LinkedHashMap
  • List:允许重复元素,保持插入顺序。

  • Set:不允许重复元素。

  • Map:键值对形式的存储,不允许键重复。

3. List 接口

List 接口是一种有序集合,允许元素重复,提供了通过索引访问元素的方法。

3.1 ArrayList

ArrayList 是最常用的 List 实现类,基于动态数组实现。

代码示例:ArrayList 的使用

import java.util.ArrayList;

public class ArrayListExample {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");
        fruits.add("Apple");  // 允许重复元素

        System.out.println("Fruits: " + fruits);

        // 使用索引访问元素
        System.out.println("First fruit: " + fruits.get(0));

        // 遍历集合
        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}
3.2 LinkedList

LinkedList 基于链表实现,适合频繁插入和删除操作的场景。

代码示例:LinkedList 的使用

import java.util.LinkedList;

public class LinkedListExample {
    public static void main(String[] args) {
        LinkedList<String> animals = new LinkedList<>();
        animals.add("Dog");
        animals.add("Cat");
        animals.addFirst("Elephant");  // 在头部添加元素
        animals.addLast("Tiger");       // 在尾部添加元素

        System.out.println("Animals: " + animals);

        // 删除元素
        animals.remove("Cat");
        System.out.println("After removal: " + animals);

        // 获取第一个和最后一个元素
        System.out.println("First Animal: " + animals.getFirst());
        System.out.println("Last Animal: " + animals.getLast());
    }
}
3.3 ArrayList vs LinkedList 对比
特性ArrayListLinkedList
底层实现动态数组双向链表
访问速度访问元素快 (O(1))访问元素慢 (O(n))
插入/删除速度末尾操作快,随机位置慢 (O(n))插入、删除快 (头尾 O(1))
内存消耗相对较少较多 (需存储指针)

4. Set 接口

Set 接口是一种不允许重复元素的集合,常用于需要唯一性的数据存储。

4.1 HashSet

HashSet 是基于哈希表实现的,元素的存储顺序并不保证。

代码示例:HashSet 的使用

import java.util.HashSet;

public class HashSetExample {
    public static void main(String[] args) {
        HashSet<String> cities = new HashSet<>();
        cities.add("New York");
        cities.add("Los Angeles");
        cities.add("Chicago");
        cities.add("New York");  // 重复元素不会被添加

        System.out.println("Cities: " + cities);

        // 判断元素是否存在
        if (cities.contains("Chicago")) {
            System.out.println("Chicago is in the set.");
        }
    }
}
4.2 TreeSet

TreeSet 是基于红黑树实现的,元素会按照自然顺序或自定义比较器排序。

代码示例:TreeSet 的使用

import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {
        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(5);
        numbers.add(1);
        numbers.add(10);
        numbers.add(3);

        System.out.println("Numbers in ascending order: " + numbers);

        // 获取最小和最大的元素
        System.out.println("Smallest number: " + numbers.first());
        System.out.println("Largest number: " + numbers.last());
    }
}
4.3 HashSet vs TreeSet 对比
特性HashSetTreeSet
底层实现哈希表红黑树
元素顺序无序排序 (自然顺序)
性能添加、删除、查找快 (O(1))添加、删除、查找慢 (O(log n))

5. Map 接口

Map 接口用于存储键值对,每个键唯一,键可以映射到一个值。

5.1 HashMap

HashMap 是最常用的 Map 实现,允许存储 null 键和 null 值,存储顺序不保证。

代码示例:HashMap 的使用

import java.util.HashMap;

public class HashMapExample {
    public static void main(String[] args) {
        HashMap<String, Integer> ageMap = new HashMap<>();
        ageMap.put("Alice", 25);
        ageMap.put("Bob", 30);
        ageMap.put("Charlie", 35);

        System.out.println("Age of Alice: " + ageMap.get("Alice"));

        // 遍历键值对
        for (String name : ageMap.keySet()) {
            System.out.println(name + " is " + ageMap.get(name) + " years old.");
        }
    }
}
5.2 TreeMap

TreeMap 是基于红黑树实现的,键值对按照键的自然顺序或自定义顺序进行排序。

代码示例:TreeMap 的使用

import java.util.TreeMap;

public class TreeMapExample {
    public static void main(String[] args) {
        TreeMap<String, Integer> scoreMap = new TreeMap<>();
        scoreMap.put("Math", 90);
        scoreMap.put("English", 85);
        scoreMap.put("Science", 92);

        System.out.println("Scores: " + scoreMap);

        // 获取第一个和最后一个键值对
        System.out.println("First entry: " + scoreMap.firstEntry());
        System.out.println("Last entry: " + scoreMap.lastEntry());
    }
}
5.3 HashMap vs TreeMap 对比
特性HashMapTreeMap
底层实现哈希表红黑树
键的顺序无序排序 (自然顺序)
性能添加、删除、查找快 (O(1))添加、删除、查找慢 (O(log n))

6. 集合工具类 Collections 的使用

Collections 是一个工具类,提供了一些操作集合的方法,如排序、查找、同步化等。

6.1 排序

代码示例:使用 Collections 对 List 进行排序

import java.util.ArrayList;
import java.util.Collections;

public class CollectionsSortExample {
    public static void main(String[] args) {
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(3);
        numbers.add(1);
        numbers.add(4);
        numbers.add(2);

        System.out.println("Before sorting: " + numbers);
        Collections.sort(numbers);  // 对集合进行升序排序
        System.out.println("After sorting: " + numbers);

        Collections.reverse(numbers);  // 对集合进行降序排序
        System.out.println("After reversing: " + numbers);
    }
}

7. 结论

Java 集合框架为开发者提供了丰富的数据结构和工具类,使得数据管理更加高效和灵活。本文介绍了集合框架的基本接口和常用实现类,包括 List、Set、Map 及其常见操作。通过理解不同集合的特性和适用场景,可以更好地选择合适的数据结构来解决实际问题。在后续的文章中,我们将深入探讨异常处理、输入输出流等 Java 的其他重要特性。

希望本篇文章能够帮助你更好地理解 Java 集合框架的基础知识。如果有任何疑问或想深入了解某些概念,欢迎在评论区留言!


http://www.kler.cn/a/372313.html

相关文章:

  • 一、在cubemx下RTC配置调试实例测试
  • 初体验鸿蒙 HarmonyOS NEXT开发
  • 大模型面试题63题(1-11)
  • warmup
  • 【宠粉赠书】大模型项目实战:多领域智能应用开发
  • 【PythonWeb开发】Flask-RESTful视图类基础知识
  • 多GPU训练大语言模型,DDP, ZeRO 和 FSDP
  • 【再谈设计模式】单例模式~唯一性的守护者
  • Dockerfile制作Oracle19c镜像
  • xpath爬虫
  • 多线程显示 CSV 2 PNG 倒计时循环播放
  • 低功耗模组学习指南:从入门到精通通过MQTT连接实现远程控制
  • 如何在不同设备上轻松下载Facebook应用:全面指南
  • AI助力医疗数据自动化:诊断报告识别与管理
  • TCP全连接队列与 tcpdump 抓包
  • vue点击菜单,出现2个相同tab,啥原因
  • 代码备份管理 —— Git实用操作
  • Spring Boot框架下的酒店住宿登记系统
  • Centos如何卸载docker
  • WPF中视觉树和逻辑树的区别和联系
  • HTML入门教程2:HTML发展历史
  • 分布式数据库技术金融应用规范技术架构
  • java 中 List<T> 类型数据在 postgreSql 数据库中存储
  • 有效沟通与系统思考
  • 数据结构和算法-动态规划(3)-经典问题
  • Springboot整合RocketMQ分布式事务