Java学习路线-38:集合工具类Stack栈、Queue队列、Properties、Collections、Stream、MapReduce

简介: Java学习路线-38:集合工具类Stack栈、Queue队列、Properties、Collections、Stream、MapReduce

第33 章 : 集合工具类

146 Stack栈操作

Stack栈先进后出, 继承自Vector


继承关系

AbstractCollection(Collection)
    - AbstractList(List)
        -ArrayList(List, RandomAccess, Cloneable, java.io.Serializable)
        -Vector(List, RandomAccess, Cloneable, java.io.Serializable)
            -Stack

push 入栈

pop 出栈

import java.util.Stack;
class Demo {
    public static void main(String[] args) {
        Stack<String> stack = new Stack<>();
        stack.push("Tom");
        stack.push("Jack");
        System.out.println(stack.pop());
        // Jack
    }
}

147 Queue队列

Queue队列先进先出

@Iterable
    @Collection
        @Queue      // 队列
            @Deque  // 双端队列
AbstractCollection(Collection)
    - AbstractList(List)
        -ArrayList(List, RandomAccess, Cloneable, Serializable)
        -Vector(List, RandomAccess, Cloneable, Serializable)
        -AbstractSequentialList
            -LinkedList(List, Deque, Cloneable, Serializable)
    -AbstractQueue(Queue)
        -PriorityQueue(Serializable)
import java.util.LinkedList;
import java.util.Queue;
class Demo {
    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>();
        queue.offer("Tom");
        queue.offer("Jack");
        System.out.println(queue.poll());
        // Tom
    }
}

PriorityQueue优先级队列

涉及排序Comparable接口

import java.util.PriorityQueue;
import java.util.Queue;
class Demo {
    public static void main(String[] args) {
        Queue<String> queue = new PriorityQueue<>();
        queue.offer("Tom");
        queue.offer("Jack");
        System.out.println(queue.poll());
        // Jack
    }
}

148 Properties属性操作

资源文件 *.properties


继承关系

Hashtable<Object,Object>
    -Properties

Properties常用方法

setProperty // 设置属性
getProperty // 获取属性
store       // 保存
load        // 读取

只能操作String类型

范例:资源内容输入与输出,用于读取配置资源

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
class Demo {
    public static void main(String[] args) throws IOException {
        Properties properties = new Properties();
        properties.setProperty("name", "小强");
        properties.setProperty("age", "23");
        // 输出,中文会被转换为unicode码
        properties.store(new FileOutputStream(new File("demo/demo.properties")), "注释");
        // 读取文件
        properties.load(new FileInputStream(new File("demo/demo.properties")));
        System.out.println(properties.getProperty("name"));
        // 小强
    }
}

149 Collections工具类

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class Demo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        // 多元素添加
        Collections.addAll(list, "Tom", "Jack", "Steve");
        System.out.println(list);
        // [Tom, Jack, Steve]
        // 列表反转
        Collections.reverse(list);
        System.out.println(list);
        // [Steve, Jack, Tom]
        // 排序
        Collections.sort(list);
        // 二分查找
        System.out.println(Collections.binarySearch(list, "Tom"));
        // 2
    }
}

面试题:Collection 和 Collections区别

Collection 集合接口

Collections 集合操作工具类

第34 章 : Stream数据流

150 Stream基本操作

Stream 主要是对集合数据进行数据分析操作

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;
class Demo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        Collections.addAll(list, "Tom", "Jack", "Steve");
        Stream<String> stream = list.stream();
        System.out.println(stream.filter(item->item.toUpperCase().contains("J")).count());
        // 1
    }
}

示例:数据采集

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
class Demo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        Collections.addAll(list, "Tom", "Jack", "Steve");
        Stream<String> stream = list.stream();
        // 符合条件的数据转为列表输出
        List<String> newList = stream.filter(item->
            item.toUpperCase().contains("J")).collect(Collectors.toList());
        System.out.println(newList);
        // [Jack]
    }
}

151 MapReduce基础模型

MapReduce模型分为两部分

Map

Reduce

import java.util.ArrayList;
import java.util.Collections;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.stream.Stream;
class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
}
class Demo {
    public static void main(String[] args) {
        List<Person> list = new ArrayList<>();
        Collections.addAll(list,
                new Person("小赵", 21),
                new Person("小钱", 22),
                new Person("小孙", 23),
                new Person("小李", 24),
                new Person("小周", 25),
                new Person("小吴", 26)
        );
        Stream<Person> stream = list.stream();
        IntSummaryStatistics stat = stream.filter(
                item -> item.getName().contains("小")
        ).mapToInt(
                item -> item.getAge() + 1
        ).summaryStatistics();
        System.out.println(stat.getSum());      // 147
        System.out.println(stat.getCount());    // 6
        System.out.println(stat.getAverage());  // 24.5
    }
}

这只是一个基础模型,如果实际开发中将大量数据存入内存,那机器就崩了



相关文章
|
缓存 监控 Python
在Python中,如何检测和处理内存泄漏?
【2月更文挑战第7天】【2月更文挑战第18篇】在Python中,如何检测和处理内存泄漏?
792 3
|
机器学习/深度学习 人工智能 自然语言处理
人工智能大模型可以产生自我意识吗?
在科技领域,人工智能(AI)已经成为一种日益强大的力量。特别是,随着计算能力的提高和大数据的发展,大型AI模型已经在许多任务上超越了人类的表现,包括图像识别、自然语言处理和围棋等复杂游戏。然而,这些模型是否具有自我意识,这是一个长久以来一直困扰科学家和哲学家的问题。本文将探讨这个问题,分析大型AI模型是否可能产生自我意识。
572 0
|
关系型数据库 MySQL Windows
mysql彻底卸载干净的5个步骤,超多图超详细保姆级教程最新教程新手小白轻松上手
mysql彻底卸载干净的5个步骤,超多图超详细保姆级教程最新教程新手小白轻松上手
26953 2
|
机器学习/深度学习 算法 数据挖掘
基于改进K-means的网络数据聚类算法matlab仿真
**摘要:** K-means聚类算法分析,利用MATLAB2022a进行实现。算法基于最小化误差平方和,优点在于简单快速,适合大数据集,但易受初始值影响。文中探讨了该依赖性并通过实验展示了随机初始值对结果的敏感性。针对传统算法的局限,提出改进版解决孤点影响和K值选择问题。代码中遍历不同K值,计算距离代价,寻找最优聚类数。最终应用改进后的K-means进行聚类分析。
313 10
|
前端开发 JavaScript 开发者
【Web 前端】css3的新特性有哪些?
【4月更文挑战第22天】【Web 前端】css3的新特性有哪些?
|
SQL 关系型数据库 MySQL
MySQL · 特性分析 · LOGICAL_CLOCK 并行复制原理及实现分析
在MySQL5.7 引入基于Logical clock的并行复制方案前,MySQL使用基于Schema的并行复制,使不同db下的DML操作可以在备库并发回放。在优化后,可以做到不同表table下并发。但是如果业务在Master端高并发写入一个库(或者优化后的表),那么slave端就会出现较大的延迟。
2346 0
|
3天前
|
数据采集 人工智能 安全
|
13天前
|
云安全 监控 安全
|
4天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1089 152