knowledge/viewpagestorage.html.md

88 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 1\. List
- 元素**有序**
- 元素**可重复**
## 1.1 ArrayList
- 动态数组实现
- 查询快
- 增删慢(末尾处也快)
## 1.2 LinkedList
- 链表实现
- 查询慢
- 增删快
## 1.3 ArrayList和LinkedList比较
实现
查询
增删
线程安全?
ArrayList
动态数组
慢(末尾处也快)
不安全
LinkedList
链表
不安全
**ArrayList**
它的默认初始化容量是10每次扩容时候增加原先容量的一半也就是变为原来的1.5倍。
**LinkedList**
底层实现是双向链表。
在增加和删除元素时效率较高。
## 1.4 List过滤指定元素
### 1.4.1 准备待测试的List
javaRDark<!\[CDATA\[public class Message { private Long id; //id private String msg; //消息 private Date sendTime; //时间戳 //省略get set }\]\]>javaRDark<!\[CDATA\[//返回一个List private static List getMessageList(){ List list = new ArrayList<>(); list.add(new Message(1L, "a", new Date())); list.add(new Message(2L, "b", new Date())); list.add(new Message(4L, "b", new Date())); list.add(new Message(3L, "c", new Date())); return list; }\]\]>
### 1.4.2 使用Iterator遍历List
javaRDark<!\[CDATA\[ private static void TestArrayList(){ List list = getMessageList(); System.out.print("删除前:"); list.stream().forEach(item -> System.out.print(item)); Iterator it = list.iterator(); while (it.hasNext()) { Message s = it.next(); if (s.getMsg().equals("b")) { it.remove(); } } System.out.print("\\n删除后:"); list.stream().forEach(item -> System.out.print(item)); }\]\]>
### 1.4.3 使用Java8对List过滤筛选
javaRDark<!\[CDATA\[private static void filterList(){ List list1 = getMessageList(); //过滤所有msg是b的记录 List list2 = list1.stream().filter(s -> !s.getMsg().equals("b")).collect(Collectors.toList()); list2.stream().forEach(item -> System.out.println(item)); }\]\]>
## 1.5 使用Java8对List排序
### 1.5.1 单个字段排序
javaRDark<!\[CDATA\[ private static void sortList(){ List list = getMessageList(); if (list != null && !list.isEmpty()){ System.out.println("===排序前如下==="); list.stream().forEach(item -> System.out.println(item)); //根据Id升序排序 list.sort((a, b) -> a.getId().compareTo(b.getId())); //根据Id升序排序(简写) list.sort(Comparator.comparing(Message::getId)); //根据Id降序排序(简写) list.sort(Comparator.comparing(Message::getId).reversed()); System.out.println("===排序后如下==="); list.stream().forEach(item -> System.out.println(item)); } }\]\]>
### 1.5.2 多个字段组合排序
javaRDark<!\[CDATA\[private static void sortList(){ List list = getMessageList(); if (list != null && !list.isEmpty()){ System.out.println("===排序前如下==="); list.stream().forEach(item -> System.out.println(item)); //根据多条件组合排序,先根据msg(升序),再根据id(升序) list.sort(Comparator.comparing(Message:: getMsg).thenComparing(Message::getId)); //根据多条件组合排序,先根据msg(升序),再根据id(降序) list.sort(Comparator.comparing(Message:: getMsg).thenComparing(Comparator.comparing(Message::getId).reversed())); //根据多条件组合排序,先根据msg(降序),再根据id(降序) list.sort(Comparator.comparing(Message:: getMsg).thenComparing(Message::getId).reversed()); //根据多条件组合排序,先根据msg(降序),再根据id(升序) list.sort(Comparator.comparing(Message:: getMsg).reversed().thenComparing(Message::getId)); System.out.println("===排序后如下==="); list.stream().forEach(item -> System.out.println(item)); } }\]\]>
## 1.6 List转Map
还是上面的测试数据,按Message的msg作为key,如果key重复就用第一个
javaRDark<!\[CDATA\[ private static void listToMap(){ List list = getMessageList(); Map
<!--stackedit_data:
eyJoaXN0b3J5IjpbMTg2MDkwMzIxNl19
-->