首页 > 编程语言 >深入理解Java Collections框架

深入理解Java Collections框架

时间:2024-06-03 09:33:18浏览次数:24  
标签:Java 框架 System add Collections fruits println out

Java Collections框架是Java标准库的重要组成部分,它提供了一套用于存储和操作数据的通用算法和数据结构。无论是处理简单的列表还是复杂的映射,Java Collections框架都能帮助开发者高效地管理数据。本篇博客将详细介绍Java Collections框架的基础知识、核心接口和类、常用集合以及示例代码,帮助新人快速掌握这一强大工具。

一、什么是Java Collections框架

Java Collections框架是一个API集合,提供了多种数据结构(如List、Set和Map)和算法(如排序和搜索),用于存储和操作对象。它主要由以下几部分组成:

  • 接口(Interfaces):表示不同类型的集合,如List、Set和Map。
  • 实现(Implementations):这些是接口的具体实现类,如ArrayList、HashSet和HashMap。
  • 算法(Algorithms):这些是可以应用于集合的通用算法,如排序、搜索和混排。
二、核心接口

Java Collections框架中的核心接口包括以下几个:

  1. Collection:是所有集合类的根接口,包括基本操作如添加、删除和迭代。
  2. List:是一个有序的集合,允许重复元素。常见实现有ArrayList和LinkedList。
  3. Set:是一个不允许重复元素的集合。常见实现有HashSet和TreeSet。
  4. Map:是一个键值对集合,允许键唯一,值可以重复。常见实现有HashMap和TreeMap。
三、常用集合类及其示例
1. ArrayList

ArrayList是一个可动态调整大小的数组实现的List。它提供了随机访问元素的能力,适合频繁查找而不是频繁插入和删除的情况。

import java.util.ArrayList;

public class ArrayListDemo {
    public static void main(String[] args) {
        // 创建一个ArrayList并添加一些元素
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");

        // 迭代并打印所有元素
        for (String fruit : fruits) {
            System.out.println(fruit);
        }

        // 获取一个元素
        System.out.println("First fruit: " + fruits.get(0));

        // 移除一个元素
        fruits.remove("Banana");
        System.out.println("After removal: " + fruits);
    }
}
2. LinkedList

LinkedList是一个双向链表实现的List。它适合频繁插入和删除操作,但随机访问的性能不如ArrayList。

import java.util.LinkedList;

public class LinkedListDemo {
    public static void main(String[] args) {
        // 创建一个LinkedList并添加一些元素
        LinkedList<String> fruits = new LinkedList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");

        // 迭代并打印所有元素
        for (String fruit : fruits) {
            System.out.println(fruit);
        }

        // 获取第一个和最后一个元素
        System.out.println("First fruit: " + fruits.getFirst());
        System.out.println("Last fruit: " + fruits.getLast());

        // 移除第一个和最后一个元素
        fruits.removeFirst();
        fruits.removeLast();
        System.out.println("After removal: " + fruits);
    }
}
3. HashSet

HashSet是一个基于哈希表实现的Set,不允许重复元素。它适合查找速度快的场景,但不保证集合的迭代顺序。

import java.util.HashSet;

public class HashSetDemo {
    public static void main(String[] args) {
        // 创建一个HashSet并添加一些元素
        HashSet<String> fruits = new HashSet<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");
        fruits.add("Apple"); // 重复元素不会被添加

        // 迭代并打印所有元素
        for (String fruit : fruits) {
            System.out.println(fruit);
        }

        // 检查集合是否包含某个元素
        System.out.println("Contains Banana: " + fruits.contains("Banana"));

        // 移除一个元素
        fruits.remove("Banana");
        System.out.println("After removal: " + fruits);
    }
}
4. TreeSet

TreeSet是一个基于红黑树实现的Set,不允许重复元素,并且存储元素是有序的。

import java.util.TreeSet;

public class TreeSetDemo {
    public static void main(String[] args) {
        // 创建一个TreeSet并添加一些元素
        TreeSet<String> fruits = new TreeSet<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");
        fruits.add("Apple"); // 重复元素不会被添加

        // 迭代并打印所有元素(有序)
        for (String fruit : fruits) {
            System.out.println(fruit);
        }

        // 获取第一个和最后一个元素
        System.out.println("First fruit: " + fruits.first());
        System.out.println("Last fruit: " + fruits.last());

        // 移除一个元素
        fruits.remove("Banana");
        System.out.println("After removal: " + fruits);
    }
}
5. HashMap

HashMap是一个基于哈希表实现的Map,用于存储键值对。它提供了快速插入、查找和删除操作。

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

public class HashMapDemo {
    public static void main(String[] args) {
        // 创建一个HashMap并添加一些键值对
        HashMap<String, Integer> fruitPrices = new HashMap<>();
        fruitPrices.put("Apple", 3);
        fruitPrices.put("Banana", 1);
        fruitPrices.put("Orange", 2);

        // 迭代并打印所有键值对
        for (Map.Entry<String, Integer> entry : fruitPrices.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }

        // 获取一个值
        System.out.println("Price of Apple: " + fruitPrices.get("Apple"));

        // 移除一个键值对
        fruitPrices.remove("Banana");
        System.out.println("After removal: " + fruitPrices);
    }
}
6. TreeMap

TreeMap是一个基于红黑树实现的Map,键值对存储是有序的。

import java.util.TreeMap;
import java.util.Map;

public class TreeMapDemo {
    public static void main(String[] args) {
        // 创建一个TreeMap并添加一些键值对
        TreeMap<String, Integer> fruitPrices = new TreeMap<>();
        fruitPrices.put("Apple", 3);
        fruitPrices.put("Banana", 1);
        fruitPrices.put("Orange", 2);

        // 迭代并打印所有键值对(有序)
        for (Map.Entry<String, Integer> entry : fruitPrices.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }

        // 获取第一个和最后一个键值对
        System.out.println("First entry: " + fruitPrices.firstEntry());
        System.out.println("Last entry: " + fruitPrices.lastEntry());

        // 移除一个键值对
        fruitPrices.remove("Banana");
        System.out.println("After removal: " + fruitPrices);
    }
}
四、常用操作和算法

Java Collections框架还提供了一些通用的操作和算法,如排序、搜索和混排。下面是一些常见的操作示例:

1. 排序
import java.util.ArrayList;
import java.util.Collections;

public class SortDemo {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Banana");
        fruits.add("Apple");
        fruits.add("Orange");

        // 排序
        Collections.sort(fruits);
        System.out.println("Sorted list: " + fruits);

        // 逆序排序
        Collections.sort(fruits, Collections.reverseOrder());
        System.out.println("Reverse sorted list: " + fruits);
    }
}
2. 搜索
import java.util.ArrayList;
import java.util.Collections;

public class SearchDemo {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Banana");
        fruits.add("Apple");
        fruits.add("Orange");

        // 排序后才能使用二分搜索
        Collections.sort(fruits);
        int index = Collections.binarySearch(fruits, "Apple");
        System.out.println("Index of Apple: " + index);
    }
}
3. 混排
import java.util.ArrayList;
import java.util.Collections;

public class ShuffleDemo {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Banana");
        fruits.add("Apple");
        fruits.add("Orange");

        // 混排
        Collections.shuffle(fruits);
        System.out.println("Shuffled list: " + fruits);
    }
}
五、总结

Java Collections框架是一个功能强大且灵活的工具,可以帮助开发者高效地管理和操作数据。通过理解核心接口和常用集合类,以及掌握常见操作和算法,新手可以快速上手并有效利用这一框架进行开发。希望本篇博客对你理解Java Collections框架有所帮助!

标签:Java,框架,System,add,Collections,fruits,println,out
From: https://blog.csdn.net/weixin_53840353/article/details/139402629

相关文章

  • 使用 Java Optional 类
    在Java编程中,我们经常会遇到返回值可能为空的场景。为了避免在使用返回值时出现空指针异常(NullPointerException),Java8引入了Optional类。Optional类可以将一个值包装为可选项,明确表示值可能为空。本篇博客将详细介绍Optional类的使用方法,并通过代码示例帮助新人快速理解。......
  • Java运算符 二进制计算 素数问题 九九乘法表 月份问题 分解质因数 完全数问题 天数计
    1.代码观察inta=6--;System.out.println(a);在Java中,后置递减运算符--只能在整型(int)和长整型(long)变量上使用,而且必须将--放在变量值的后面。因此,6--是非法的,Java编译器会报错。正确代码如下inta=6;a--;System.out.println(a);输出结果为52.代码分析Syst......
  • Java Lambda表达式
    Lambda表达式Lambda表达式,也可以称为闭包,是Java8发布的最重要新特性Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)使用Lambda表达式可以使代码变的更加简洁紧凑语法:(parameter)->expression(parameter)->{statement;}parameter:参数列表,......
  • Java中的依赖注入:提高代码的可维护性和可测试性
            依赖注入(DI)是一种软件设计模式,旨在实现控制反转(IoC),通过这种方式,对象的依赖项(通常是服务)不由对象本身创建,而是由外部容器动态提供。在Java中,依赖注入是实现松耦合和增强代码可维护性的有效手段。本文将探讨Java中的依赖注入概念、其优势以及如何利用现有的框架......
  • java反射机制
    java反射机制基础内容反射调用就是指通过反射机制进行的方法调用。反射机制是Java编程语言的一个重要特性,它允许程序在运行时检查、操作和实例化类,方法,字段等,并在运行时获取类的信息以及动态调用类的方法。反射机制使得Java程序可以在运行时动态地加载、探测和使用类,而不需要在......
  • 基于Java的敬老院管理系统设计与实现
    摘要新世纪以来,互联网与计算机技术的快速发展,我国也迈进网络化、集成化的信息大数据时代。对于大众而言,单机应用早已成为过去,传统模式早已满足不了当下办公生活等多种领域的需求,在一台电脑上不联网的软件少之又少,取而代之的是相互连通的软件系统,构成信息大数据社会。快......
  • 为师妹写的《Java并发编程之线程池十八问》被表扬啦!
    写在开头  之前给一个大四正在找工作的学妹发了自己总结的关于Java并发中线程池的面试题集,总共18题,将之取名为《Java并发编程之线程池十八问》,今天聊天时受了学妹的夸赞,心里很开心,毕竟自己整理的东西对别人起到了一点帮助,记录一下!Java并发编程之线程池十八问  经......
  • 【网络基础知识】-- 服务框架图s
    ......
  • X8沙箱虚拟机 安卓14游戏专用 支持xp框架
    软件名称】:X8沙箱Pro内测版【软件大小】:1.6G【软件版本】:1.3.2内测版【软件介绍】:X8沙箱是一款极简、Free的安卓虚拟机,可以进行画中画方式运行,专为用户定制,手机移动设备上的虚拟系统,即使在后台也可以继续运行不掉线。app安全稳定无广告,多样化的安卓模拟器平台应用......
  • 堆排序-java
    这次主要讲了堆排序和堆的基本构造,下一期会详细讲述堆的各种基本操作。文章目录前言一、堆排序1.题目描述2.堆二、算法思路1.堆的存储2.结点下移down3.结点上移up4.堆的基本操作5.堆的初始化三、代码如下1.代码如下:2.读入数据:3.代码运行结果总结前言......