第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) {
= 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
}
}
这只是一个基础模型,如果实际开发中将大量数据存入内存,那机器就崩了