.stackedit-trash/viewpagestorage.html.md created from https://stackedit.cn/
This commit is contained in:
parent
9c58708bd9
commit
735d90d6dd
88
.stackedit-trash/viewpagestorage.html.md
Normal file
88
.stackedit-trash/viewpagestorage.html.md
Normal file
@ -0,0 +1,88 @@
|
||||
# 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
|
||||
-->
|
Loading…
x
Reference in New Issue
Block a user