第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
}
}
這隻是一個基礎模型,如果實際開發中将大量資料存入記憶體,那機器就崩了