首页 > 编程语言 >第二站:Java蓝——集合框架的深邃海洋

第二站:Java蓝——集合框架的深邃海洋

时间:2024-05-31 17:33:01浏览次数:15  
标签:第二站 java Alice 深邃 names 集合 Java Bob public

Java蓝——集合框架的深邃海洋

在Java的多彩旅程中,第二站“Java蓝”引领我们深入探索集合框架的深邃海洋。集合框架是Java提供的一套设计良好的API,用于存储、操作和管理数据集合,如列表、集合、映射等。它以高度抽象的方式,为开发者提供了极大的灵活性和高效的数据处理能力。下面,我们将通过代码示例和详细说明,来深入理解几种核心集合类的使用。

#### ArrayList——动态数组

ArrayList是一个基于动态数组的数据结构,它允许我们在列表的任何位置插入和删除元素,同时提供了高效的随机访问能力。

```java

import java.util.ArrayList;

public class ArrayListExample {
    public static void main(String[] args) {
        ArrayList<String> names = new ArrayList<>();
        names.add("Alice"); // 添加元素
        names.add("Bob");
        names.add(1, "Charlie"); // 在指定位置插入
        System.out.println(names); // 输出:[Alice, Charlie, Bob]

        names.remove("Bob"); // 删除指定元素
        System.out.println(names.size()); // 输出:2
    }
}


```

#### LinkedList——双向链表

LinkedList是一个双向链表的实现,它适合于频繁的插入和删除操作,尤其是队列和栈的实现。```java

import java.util.LinkedList;

public class LinkedListExample {
    public static void main(String[] args) {
        LinkedList<String> names = new LinkedList<>();
        names.addFirst("Alice"); // 在头部添加
        names.addLast("Bob"); // 在尾部添加
        System.out.println(names); // 输出:[Alice, Bob]

        names.removeFirst(); // 删除头部元素
        System.out.println(names); // 输出:[Bob]
    }
}


```

#### HashMap——键值对映射

HashMap提供了一种通过键(Key)直接访问值(Value)的快速方式。它不是线程安全的,但在单线程环境下效率非常高。```java

import java.util.HashMap;

public class HashMapExample {
    public static void main(String[] args) {
        HashMap<String, Integer> ages = new HashMap<>();
        ages.put("Alice", 30); // 插入键值对
        ages.put("Bob", 25);
        
        System.out.println(ages.get("Alice")); // 输出:30
        ages.remove("Bob"); // 删除键值对
        System.out.println(ages.containsKey("Bob")); // 输出:false
    }
}


```

#### HashSet——无序、不重复集合

HashSet是一个不允许重复元素的集合,它内部使用HashMap来存储元素,保证了高效的查找性能。```java

import java.util.HashSet;

public class HashSetExample {
    public static void main(String[] args) {
        HashSet<String> uniqueNames = new HashSet<>();
        uniqueNames.add("Alice");
        uniqueNames.add("Bob");
        uniqueNames.add("Alice"); // 尝试添加重复元素
        
        System.out.println(uniqueNames.size()); // 输出:2,因为"Alice"只被添加一次
    }
}


```

#### 总结

通过上述代码示例,我们不仅直观地体验了ArrayList、LinkedList、HashMap和HashSet这些集合类的使用方法,也理解了它们各自的特点和适用场景。ArrayList适合于快速随机访问,LinkedList适合频繁的插入删除操作,HashMap提供快速的键值对查找,而HashSet确保了元素的唯一性。Java集合框架的多样性和灵活性,使得它成为解决各种数据存储和操作需求的强大工具,正如深邃海洋中蕴藏着无限的宝藏,等待着我们去发现和利用。

在继续我们的Java集合框架之旅中,我们将深入探索一些更高级的操作,如集合间的转换、排序、迭代以及如何利用Stream API进行高效的数据处理。这些技巧将帮助您更好地管理和操作数据,提升代码的效率和可读性。

#### 集合间的转换

Java集合框架提供了多种方法来轻松地在不同集合类型间转换数据。

```java

import java.util.*;

public class CollectionConversion {
    public static void main(String[] args) {
        List<String> namesList = Arrays.asList("Alice", "Bob", "Charlie");
        
        // List转Set,去除重复元素
        Set<String> namesSet = new HashSet<>(namesList);
        System.out.println(namesSet); // 输出可能是[Alice, Bob, Charlie],顺序可能改变

        // Set转Array
        String[] namesArray = namesSet.toArray(new String[0]);
        System.out.println(Arrays.toString(namesArray)); // 输出:[Alice, Bob, Charlie]

        // 使用Stream API将Set转回List
        List<String> convertedList = namesSet.stream().collect(Collectors.toList());
        System.out.println(convertedList); // 输出:[Alice, Bob, Charlie]
    }
}


```

#### 排序操作

Collections类提供了对集合进行排序的静态方法。

```java

import java.util.*;

public class SortingCollections {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>(Arrays.asList("Alice", "Charlie", "Bob"));
        
        // 使用Collections.sort进行自然排序
        Collections.sort(names);
        System.out.println(names); // 输出:[Alice, Bob, Charlie]

        // 使用Comparator进行自定义排序
        Collections.sort(names, (a, b) -> b.compareTo(a)); // 降序
        System.out.println(names); // 输出:[Charlie, Bob, Alice]
    }
}


```

#### 迭代集合

Java 8引入了forEach方法和Lambda表达式,使得遍历集合更为简洁。

```java

public class IteratingCollections {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
        
        // 使用forEach和Lambda遍历
        names.forEach(name -> System.out.println(name));
        // 输出:
        // Alice
        // Bob
        // Charlie
    }
}


```

#### Stream API的使用

Stream API提供了一种高效、声明式的数据处理方式,可用于集合的过滤、映射、排序等操作。```java

import java.util.*;
import java.util.stream.*;

public class UsingStreams {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Eve");
        
        // 使用Stream过滤长度大于4的名字并转换为大写
        List<String> longNamesUppercase = names.stream()
                                         .filter(name -> name.length() > 4)
                                         .map(String::toUpperCase)
                                         .collect(Collectors.toList());
        System.out.println(longNamesUppercase); // 输出:[CHARLIE, DAVID, EVE]
    }
}


```

通过这些深入的探索,我们看到了Java集合框架的灵活性和强大之处。从简单的转换、排序到利用Stream API进行复杂的链式操作,集合框架为我们提供了处理数据的强大工具集。熟练掌握这些技能,将极大提升您的编程效率和代码质量。

在我们的Java集合框架之旅中,我们已经见识了基本集合类型及其转换、排序和迭代操作。接下来,我们将进一步探索集合框架的高级特性,包括限制与跳过元素、归约操作、并行处理以及自定义集合类,这些将进一步丰富我们的数据处理手段。

#### 限制与跳过元素

`limit`和`skip`方法是Stream API中非常实用的两个操作,分别用于限制结果数量和跳过前N个元素。

```java

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class LimitSkipExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        // 仅取前三个元素
        List<Integer> firstThree = numbers.stream().limit(3).collect(Collectors.toList());
        System.out.println(firstThree); // 输出:[1, 2, 3]

        // 跳过前三个元素
        List<Integer> afterSkip = numbers.stream().skip(3).collect(Collectors.toList());
        System.out.println(afterSkip); // 输出:[4, 5, 6, 7, 8, 9, 10]
    }
}


```

#### 归约操作

归约(reduce)操作用于将流中的元素组合起来,生成一个单一的结果。这是并行处理数据时非常有用的功能。```java

import java.util.Arrays;
import java.util.stream.IntStream;

public class ReductionExample {
    public static void main(String[] args) {
        int sum = IntStream.of(1, 2, 3, 4, 5)
                       .reduce(0, (a, b) -> a + b);
        System.out.println("Sum: " + sum); // 输出:Sum: 15

        // 计算乘积
        int product = IntStream.of(1, 2, 3, 4)
                          .reduce(1, (a, b) -> a * b);
        System.out.println("Product: " + product); // 输出:Product: 24
    }
}


```

#### 并行处理

Java 8的Stream API支持并行处理,通过`parallelStream`可以很容易地将操作变为并行执行,以提高效率。```java

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class ParallelProcessingExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        // 并行处理,计算总和
        long sum = numbers.parallelStream().mapToInt(Integer::intValue).sum();
        System.out.println("Parallel Sum: " + sum); // 输出:Parallel Sum: 55
    }
}


```

#### 自定义集合类

有时候,标准的集合类可能不完全满足特定需求,这时可以自定义集合类。下面是一个简单的例子,展示如何自定义一个不可变集合。```java

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

public class ImmutableCollection {
    public static void main(String[] args) {
        List<String> mutableList = new ArrayList<>(Arrays.asList("Alice", "Bob", "Charlie"));
        List<String> immutableList = Collections.unmodifiableList(mutableList);

        // 尝试修改不可变集合,将抛出异常
        try {
            immutableList.add("David");
        } catch (UnsupportedOperationException e) {
            System.out.println("Cannot modify immutable list.");
        }
    }
}


```

通过这次深入探索,我们不仅学习了如何在Java集合框架中使用限制与跳过元素、归约操作、并行处理以提高效率,还了解了如何根据需要自定义集合类来满足特定需求。这些技巧和知识将进一步提升您在处理复杂数据集合时的能力和灵活性。

标签:第二站,java,Alice,深邃,names,集合,Java,Bob,public
From: https://blog.csdn.net/hummhumm/article/details/139355698

相关文章

  • JAVA基础_基本运算
    算数运算符操作符说明举例+加法:相加运算符两侧的值inta=10,b=20;(a+b等于30)-减法:左操作数减去右操作数inta=10,b=20;(a-b等于-10)*乘法:相乘操作符两侧的值inta=10,b=20;(a*b等于200)/除法:左操作数除以右操作数inta=10,b=20;(b/a等于2)%取余:左操作数除以右操作数的余数inta=10,......
  • java数据list写入文件
    /***生成数据文件**@paramdata数据*@paramfileName文件名*@return数据文件对象*@throwsIOException*/privateFilegenerateDataFile(List<List<String>>data,StringfileName)throwsIOException{......
  • 《Java练习题》Java编程题合集(全)
    《Java练习题》Java编程题合集(全) 前言:不仅仅要实现,更要提升性能,精益求精,用尽量少的时间复杂度和空间复杂度解决问题。初学者:《Java练习题》习题集一  https://www.cnblogs.com/jssj/p/11147566.html《Java练习题》习题集二  https://www.cnblogs.com/jssj/p/1122235......
  • JAVA 数据写入excel并发送邮件
    写这个的时候PLM系统还没有开发好,开发这个系统的外包团队每次开会都会被骂,感觉他们快顶不住了,估计完成不了了,烂尾之后应该会有很多需求扔给我。新领导上任之后说这边能不能发邮件,先熟悉一下怎么发邮件吧,这个功能大概率给我来做了流程:​先导包=>邮箱开启配置=>java写好配......
  • ### Cause: java.sql.SQLSyntaxErrorException: Expression #4 of SELECT list is not
    最近把线上数据库备份到本地数据库进行一些代码修改时候,发现代码连接本地数据库报错,线上数据库是正常的,后来查阅了一下是SELECT列表不在GROUPBY语句内且存在不函数依赖GROUPBY语句的非聚合字段,算是比较严谨的sql模式,如果需要解决的话需要修改一下my.ini配置页面,我先去自己安装......
  • Java定时任务Cron表达式
    Java学习中使用到了xxjob定时任务等,在配置的时候使用了Cron表达式来设置执行时间和频率1.表达式含义Cron表达式从左到右为6-7个字段,每个字段代表一个含义  */5****?表示每5秒执行一次 Cron一共7位,最后一位年份可以留空,一般可以写6位,第6位星期的取值范围为1-7,从星期日......
  • Spring 项目整合 Junit 一直报 java.lang.NullPointerException空指针异常
    1.异常信息java.lang.NullPointerException:Cannotinvoke"com.yue.service.StudentService.changeInfo()"because"this.studentService"isnull2.测试代码packagecom.yue.test;importcom.yue.config.DataSourceConfig;importcom.yue.service.Stud......
  • (D卷,100分)- 约瑟夫问题(Java & JS & Python & C)
    获取题库不需要订阅专栏,可直接私信我进入CSDN领军人物top1博主的华为OD交流圈观看完整题库、最新面试实况、考试报告等内容以及大佬一对一答疑。题目描述输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。从数列首位置开始计数,计数到m......
  • Java学习-Sentinel 1.8.4 规则持久化到Nacos
    文章目录一、前言二、快速体验1、部署sentinel2、SpringCloud中规则持久化到nacos3、sentinel控制台操作测试三、sentinel-dashboard源码修改1、`pom.xml`中添加依赖2、`application.properties`中添加nacos配置3、nacos配置新增NacosConfig新增NacosConfigUtil4、举......
  • JAVA基础_面向对象
    类和对象        面向对象(ObjectOriented)是Java的编程范式,是一种对现实世界理解和抽象的方法。其中包括类、对象(实例)、属性、方法、等概念。类:类是一个模板,是一个抽象,它描述一类对象的行为和状态。对象:是类的一个实例,是具体的,有状态和行为。 属性:对象的状态称为......