天天看點

Java學習路線-38:集合工具類Stack棧、Queue隊列、Properties、Collections、Stream、MapReduce第33 章 : 集合工具類第34 章 : Stream資料流

第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

    }
}      

這隻是一個基礎模型,如果實際開發中将大量資料存入記憶體,那機器就崩了