首页 > 编程语言 >Java之集合介绍

Java之集合介绍

时间:2024-10-20 10:50:16浏览次数:8  
标签:Java List System 介绍 println add 接口 集合 out

一、Java集合概述

Java集合框架(Java Collections Framework)是Java提供的一套用于存储和操作数据的接口、实现类和算法的统一架构。它大大简化了数据处理的复杂性,提高了代码的可重用性和效率。集合框架主要由几个核心接口组成,每个接口定义了一组操作和行为,具体实现类则提供了这些接口的具体功能。

二、集合框架的核心接口

1. Collection接口

Collection是所有单列集合的根接口,定义了基本的集合操作,如添加、删除、清空、检查是否包含元素等。

2. List接口

List继承自Collection,表示一个有序的元素集合,允许元素重复。List接口的主要实现类包括:

  • ArrayList:基于动态数组,随机访问性能高,适合频繁读取的场景。
  • LinkedList:基于双向链表,插入和删除操作效率高,适合频繁修改的场景。
  • Vector:类似于ArrayList,但它是同步的,线程安全性高,但性能较低。

3. Set接口

Set继承自Collection,表示一个不包含重复元素的集合。Set接口的主要实现类包括:

  • HashSet:基于哈希表,存储无序,允许null元素,查找速度快。
  • TreeSet:基于红黑树,存储有序,自动排序,不允许null。
  • LinkedHashSet:结合了HashSet和链表的特性,保持元素的插入顺序。

4. Queue接口

Queue继承自Collection,用于存储等待处理的元素,通常遵循先进先出(FIFO)的原则。Queue接口的主要实现类包括:

  • PriorityQueue:基于优先级堆,实现元素的优先级排序。
  • ArrayDeque:基于数组的双端队列,支持高效的插入和删除操作。

5. Map接口

Map并不继承自Collection,但它是集合框架的重要组成部分,表示键值对的集合。Map接口的主要实现类包括:

  • HashMap:基于哈希表,存储无序,允许一个null键和多个null值。
  • TreeMap:基于红黑树,存储有序,按键的自然顺序或自定义顺序排序。
  • LinkedHashMap:结合了HashMap和链表的特性,保持键值对的插入顺序。
  • Hashtable:类似于HashMap,但它是同步的,不允许null键或值。

三、集合框架的特点

1. 统一的接口

所有集合类都遵循统一的接口,提供一致的操作方式,方便使用和切换不同的实现。

2. 丰富的实现类

提供了多种数据结构的实现,如列表、集合、队列和映射,满足不同的需求。

3. 高效的性能

不同的实现类在性能上各有优势,开发者可以根据具体需求选择最合适的实现。

4. 线程安全性

部分集合类(如Vector、Hashtable)是线程安全的,同时提供了通过Collections工具类实现同步的方法。

5. 可扩展性

集合框架设计灵活,支持自定义集合实现,满足特定的业务需求。

四、常用集合类的使用示例

1. List接口的示例

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

public class ListExample {
    public static void main(String[] args) {
        // ArrayList 示例
        List<String> arrayList = new ArrayList<>();
        arrayList.add("Apple");
        arrayList.add("Banana");
        arrayList.add("Cherry");
        System.out.println("ArrayList: " + arrayList);

        // LinkedList 示例
        List<String> linkedList = new LinkedList<>();
        linkedList.add("Dog");
        linkedList.add("Elephant");
        linkedList.add("Frog");
        System.out.println("LinkedList: " + linkedList);
    }
}

输出:

ArrayList: [Apple, Banana, Cherry]
LinkedList: [Dog, Elephant, Frog]

2. Set接口的示例

import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;

public class SetExample {
    public static void main(String[] args) {
        // HashSet 示例
        Set<String> hashSet = new HashSet<>();
        hashSet.add("Banana");
        hashSet.add("Apple");
        hashSet.add("Apple"); // 重复元素会被忽略
        System.out.println("HashSet: " + hashSet);

        // LinkedHashSet 示例
        Set<String> linkedHashSet = new LinkedHashSet<>();
        linkedHashSet.add("Banana");
        linkedHashSet.add("Apple");
        linkedHashSet.add("Cherry");
        System.out.println("LinkedHashSet: " + linkedHashSet);

        // TreeSet 示例
        Set<String> treeSet = new TreeSet<>();
        treeSet.add("Dog");
        treeSet.add("Cat");
        treeSet.add("Elephant");
        System.out.println("TreeSet: " + treeSet);
    }
}

输出:

HashSet: [Banana, Apple]
LinkedHashSet: [Banana, Apple, Cherry]
TreeSet: [Cat, Dog, Elephant]

3. Queue接口的示例

import java.util.ArrayDeque;
import java.util.PriorityQueue;
import java.util.Queue;

public class QueueExample {
    public static void main(String[] args) {
        // PriorityQueue 示例
        Queue<Integer> priorityQueue = new PriorityQueue<>();
        priorityQueue.add(10);
        priorityQueue.add(1);
        priorityQueue.add(5);

        while (!priorityQueue.isEmpty()) {
            System.out.println(priorityQueue.poll());
        }
    }
}

输出:

1
5
10

4. Map接口的示例

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

public class MapExample {
    public static void main(String[] args) {
        // HashMap 示例
        Map<String, Integer> hashMap = new HashMap<>();
        hashMap.put("Apple", 3);
        hashMap.put("Banana", 1);
        hashMap.put("Cherry", 2);
        System.out.println("HashMap: " + hashMap);

        // TreeMap 示例
        Map<String, Integer> treeMap = new TreeMap<>();
        treeMap.put("Dog", 3);
        treeMap.put("Elephant", 1);
        treeMap.put("Frog", 2);
        System.out.println("TreeMap: " + treeMap);
    }
}

输出:

HashMap: {Apple=3, Banana=1, Cherry=2}
TreeMap: {Dog=3, Elephant=1, Frog=2}

五、集合框架的遍历

在Java中,集合框架提供了多种方式来遍历集合。以下是几种常见的遍历方式,适用于不同类型的集合(如List、Set、Map等)。

1. 使用for-each循环(增强for循环)

适用于:List、Set、以及其他实现了Iterable接口的集合。

List<String> list = Arrays.asList("A", "B", "C");

for (String item : list) {
    System.out.println(item);
}

2. 使用迭代器(Iterator)

适用于:List、Set、以及其他实现了Iterable接口的集合。

List<String> list = Arrays.asList("A", "B", "C");
Iterator<String> iterator = list.iterator();

while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

3. 使用ListIterator

适用于:List及其实现类,提供了双向遍历的功能。

List<String> list = Arrays.asList("A", "B", "C");
ListIterator<String> listIterator = list.listIterator();

while (listIterator.hasNext()) {
    System.out.println(listIterator.next());
}

// 逆向遍历
while (listIterator.hasPrevious()) {
    System.out.println(listIterator.previous());
}

4. 使用Java 8的Stream API

适用于:所有集合类型。

List<String> list = Arrays.asList("A", "B", "C");

list.stream().forEach(item -> {
    System.out.println(item);
});

5. 使用索引(适用于List)

适用于:List及其实现类。

List<String> list = Arrays.asList("A", "B", "C");

for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}

6. 遍历Map

6.1 使用keySet遍历键

Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);

for (String key : map.keySet()) {
    System.out.println("Key: " + key + ", Value: " + map.get(key));
}

6.2 使用entrySet遍历键值对

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}

6.3 使用values遍历值

for (Integer value : map.values()) {
    System.out.println("Value: " + value);
}

7. 使用Java 8的Map.forEach方法

map.forEach((key, value) -> {
    System.out.println("Key: " + key + ", Value: " + value);
});

不同的遍历方式适用于不同的场景,可以根据具体需求选择合适的遍历方法。

标签:Java,List,System,介绍,println,add,接口,集合,out
From: https://blog.csdn.net/qq_40921573/article/details/143030308

相关文章

  • [Java基础] 集合框架
    往期回顾[Java基础]基本数据类型[Java基础]运算符[Java基础]流程控制[Java基础]面向对象编程[Java基础]集合框架[Java基础]输入输出流[Java基础]异常处理机制[Java基础]Lambda表达式目录List接口数据结构最佳实践实战代码Set接口数据结构最佳实践......
  • Java中的锁 -- 开篇
    Java中的锁1.顶级接口LockJavaSE5之后并发包中新增了Lock接口,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁。虽然它缺少了隐式获取释放锁的便捷性,但是却拥有了锁获取与释放的可操作性、可中断的获取锁以及超时获取锁等多种synchronized关......
  • springboot基于java的OA管理系统(源码+文档+调试+vue+前后端分离)
    收藏关注不迷路!!......
  • javascript输出金字塔
    <script>//首先创造一个空的变量letstr=''letlevel=prompt("输入金字塔的层数")//获取输入的纯数字,其余情况都转化为NaNlevel=parseInt(level)&&Number(level)//判断用户的输入是否合法if(isNaN(level)){alert("金字塔的数......
  • 详解Java之lambda
    目录lambda引入语法函数式接口lambda表达式的使用语法精简:代码示例:变量捕获局部变量捕获成员变量捕获lambda在集合中的使用lambda的优缺点lambda引入Lambda表达式是JavaSE8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。lambda表达......
  • 测开必备-java基础-for循环语句的用法
    什么是for循环?for循环的基本结构什么是for循环?for循环是一种编程中的控制结构,它允许你重复执行一段代码固定的次数。当你需要执行一系列重复的任务时,for循环就非常有用。for循环的基本结构在Java中,for循环的基本结构如下:for (初始化表达式; 循环条件; 步进表达式) {  ......
  • java计算机毕业设计基于的旅游景区指南系统的设计与实现(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着社会经济的不断发展,旅游业蓬勃兴起,人们的旅游需求日益增长 12。如今旅游景区数量众多且分布广泛,游客在面对海量的旅游目的地时,往往难以抉择......
  • Java毕设项目案例实战II基于Spring Boot的药店管理系统的设计与实现(开发文档+数据库+
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言随着医疗行业的快速发展和人们对健康需求......
  • Java之反射机制详解
    一、基本概念Java反射(Reflection)是一种允许程序在运行时动态地检查和操作类、接口、字段、方法等内部信息的机制。通过反射,程序可以在不知道对象类型的情况下创建对象、调用方法和访问字段,甚至访问私有成员。反射机制为Java程序提供了极大的灵活性和扩展性,是Java语言中一个......
  • 第二部分 Java基本语法
    第二部分Java基本语法一个main方法头文件包含如下:2.1标识符Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。关于Java标识符,有以下几点需要注意:所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始首字符之后可以是字母(A-Z或......