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 集合操作工具类

扫描二维码关注公众号,回复: 8789106 查看本文章

第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

    }
}

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

发布了1392 篇原创文章 · 获赞 347 · 访问量 123万+

猜你喜欢

转载自blog.csdn.net/mouday/article/details/103838373