Collection接口和Iterator接口

1. Collection接口

  1. - **接口概述<br />Collection集合:单列集合,是所有单列集合的顶层接口<br /> 子接口:<br /> **** List集合;Set集合****<br />Collection集合中定义的方法在所有单列集合中都可以使用

**

  1. - **接口函数方法概要**<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580563791520-9b6b5ec5-c852-40a0-b873-562dfed74f8f.png#align=left&display=inline&height=505&name=image.png&originHeight=505&originWidth=758&size=458604&status=done&style=none&width=758)
  2. - **接口方法示意**<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580564659185-094526e1-a63c-4bf1-9435-b28fffc45478.png#align=left&display=inline&height=236&name=image.png&originHeight=236&originWidth=516&size=21630&status=done&style=none&width=516)

2. Iterator接口(迭代器)

  1. - **基本概念**:Collection集合元素的通用获取方式,在取出元素之前判断集合中是否有元素,如果有就取出来,然后继续判断,直到将所有元素取出,这种取出方式的专业术语叫做"迭代"<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580564799193-47de2277-a116-4330-a803-80b0dfc2483c.png#align=left&display=inline&height=119&name=image.png&originHeight=119&originWidth=1126&size=189668&status=done&style=none&width=1126)
  2. - **使用方法(使用接口多态接受iterator对象值)**<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580565572482-6fc0e206-4e00-42b2-b20a-1c7082ebfcd0.png#align=left&display=inline&height=258&name=image.png&originHeight=258&originWidth=462&size=17127&status=done&style=none&width=462)<br />比较简单的一个使用方法<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580565792694-e161d23a-1019-4cbd-af55-7c5c2584dade.png#align=left&display=inline&height=79&name=image.png&originHeight=79&originWidth=326&size=3660&status=done&style=none&width=326)

Set集合

1. 基本概念

  1. - **其实是Collection接口的子类**<br />1. 不允许储存重复的元素<br />2. 没有索引,没有带索引的方法,也不能使用普通的for循环遍历(可以使用增强for循环)
  2. - **具体使用方法见HashSet集合使用方法**
  3. - **Set集合元素不重复的前提:储存的元素必须重写hashCode方法和equals方法(通过他们比较元素的)**

Queue集合

1. 简介

  1. - **Queue是队列**:典型的队列特征是只允许,在表的前端进行删除操作,在表的后端进行插入
  2. - **LinkedList类实现了Queue接口**,可以将LinkedList当作Queue来用
  3. - **Queue接口与ListSet同一级别**,**都是继承了Collection接口**。LinkedList实现了Queue接口。我们平时使用的一些常见队列都是非阻塞队列,比如PriorityQueueLinkedList(LinkedList是双向链表,它实现了Dequeue接口)

2. 使用

  1. - offer方法:向队列中添加一个元素<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580827810963-afd6e51a-1cd6-4a87-9e1b-85bd088a66d6.png#align=left&display=inline&height=300&name=image.png&originHeight=300&originWidth=511&size=20219&status=done&style=none&width=511)
  2. - poll方法:将第一个元素删除并返回<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580827877264-e47225eb-927d-4254-9a10-bca6a1814979.png#align=left&display=inline&height=26&name=image.png&originHeight=26&originWidth=115&size=821&status=done&style=none&width=115)
  3. - element方法:返回第一个元素<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580827909357-30dc4508-ecba-4d7b-b45a-45e6815a0043.png#align=left&display=inline&height=33&name=image.png&originHeight=33&originWidth=143&size=1076&status=done&style=none&width=143)
  4. - peek方法:返回第一个元素<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580827968198-67768778-0459-4648-aa91-0c4fe0bbe092.png#align=left&display=inline&height=22&name=image.png&originHeight=22&originWidth=112&size=812&status=done&style=none&width=112)

3. 阻塞非阻塞

  1. - **建议**:对于非阻塞队列,一般情况下建议使用offerpollpeek三个方法,不建议使用addremove方法。因为使用offerpollpeek三个方法可以通过返回值判断操作成功与否,而使用addremove方法却不能达到这样的效果。注意,非阻塞队列中的方法都没有进行同步措施。
  2. - **非阻塞(平时常用的ArrayListList之类的)**<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580828348230-f31c6b9c-adb9-4a8e-9fd8-d0d6415600bd.png#align=left&display=inline&height=216&name=image.png&originHeight=216&originWidth=841&size=29780&status=done&style=none&width=841)
  3. - **阻塞(优化,但前期不常用)**<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580828625190-66eaac8f-83cb-4328-9d4d-bd0477db7940.png#align=left&display=inline&height=351&name=image.png&originHeight=351&originWidth=720&size=42462&status=done&style=none&width=720)
  4. - [阻塞非阻塞的详解](https://blog.csdn.net/yan454790122/article/details/84836226)

List集合**

1. 常用方法

  1. - **list集合为collection的子类(大部分方法都通用,但是list集合拥有索引方法)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580631921376-47a1654d-b3d6-410d-85bf-bf1d5ec2ec35.png#align=left&display=inline&height=128&name=image.png&originHeight=128&originWidth=1024&size=231022&status=done&style=none&width=1024)**
  2. - **带索引方法示例<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580632491971-1c9ce876-97f5-49a0-a091-b5ce48e8bc31.png#align=left&display=inline&height=134&name=image.png&originHeight=134&originWidth=582&size=16452&status=done&style=none&width=582)**

2. 遍历方式

  1. - **使用普通for循环**<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580632662614-73a52746-3c5c-405e-855c-73b4a1e33181.png#align=left&display=inline&height=206&name=image.png&originHeight=206&originWidth=353&size=8879&status=done&style=none&width=353)
  2. - **使用迭代器**<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580632742534-ea88835c-084d-49aa-a4a2-482d807aa0c8.png#align=left&display=inline&height=188&name=image.png&originHeight=188&originWidth=337&size=8706&status=done&style=none&width=337)
  3. - **使用增强for循环**<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580632814271-53402d4e-b1f3-4b40-b4c7-d71210b4062a.png#align=left&display=inline&height=185&name=image.png&originHeight=185&originWidth=339&size=7143&status=done&style=none&width=339)

3. ArrayList集合

  1. - **ArrayList集合的底层其实就是数组,查找快,增删慢**
  2. - **使用ArrayList集合一定要慎重,不常增删的使用比较合适**<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580633202415-ab64c216-1578-4cb2-b639-174397417ec4.png#align=left&display=inline&height=222&name=image.png&originHeight=222&originWidth=1117&size=239498&status=done&style=none&width=1117)

4. LinkedList集合

  1. - **特有函数**(他也是list集合的子类,所以共性方法通用)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580633477081-70878c1b-6a5b-45dd-9c56-1e9e558a31a6.png#align=left&display=inline&height=419&name=image.png&originHeight=419&originWidth=703&size=415443&status=done&style=none&width=703)
  2. - **特有函数使用**<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580634643048-c0f6b39c-84e4-463f-82f7-bf5da33408b4.png#align=left&display=inline&height=367&name=image.png&originHeight=367&originWidth=443&size=25969&status=done&style=none&width=443)

Map集合(双列)

1. 集合特点

  1. - Map集合是一个双列集合,一个元素包含了两个值(一个Key,一个value
  2. - Map集合中的元素,keyvalue的数据类型可以相同,也可以不同
  3. - Map集合中的元素,key是不允许重复的,value是可以重复的
  4. - Map集合中的元素,keyvalue是一一对应的

2. 常用子类

  1. - **HashMap集合**
  2. - **底层是哈希表**
  3. - JDK1.8之前:数组+单项链表<br />JDK1.8之后:数组+单项链表/红黑树(链表的长度超过8:提高查询的速度)
  4. - 是一个无序的集合,储存和取出前元素的顺序有可能不一致
  5. - **LinkedHashMap集合**
  6. - 底层是哈希表+链表(保证迭代顺序)
  7. - 是一个有序的集合,存储元素和取出元素的顺序是一致的<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580735626653-8cbbecb6-18e3-42ad-8a09-4f8843810104.png#align=left&display=inline&height=197&name=image.png&originHeight=197&originWidth=528&size=13018&status=done&style=none&width=528)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580735635846-8196ed8a-1e38-4e0e-8859-cf7aa32bd89f.png#align=left&display=inline&height=32&name=image.png&originHeight=32&originWidth=285&size=2402&status=done&style=none&width=285)
  8. - **Hashtable集合**
  9. - **Hashtable**:底层是一个哈希表,是一个线程安全的集合,是单线程集合,速度慢
  10. - 不可以储存null值,null
  11. - Vector集合一样,在jdk1.2版本之后被更先进的集合(HashMap)取代了
  12. - 子类Properties依然活跃在历史舞台(是唯一一个和IO流相结合的集合)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580736645139-89cb4dc2-6af8-42cd-9770-b78a908b7d1d.png#align=left&display=inline&height=62&name=image.png&originHeight=62&originWidth=475&size=4381&status=done&style=none&width=475)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580736656915-897f0739-6a80-4a7a-beb2-e659df13184c.png#align=left&display=inline&height=84&name=image.png&originHeight=84&originWidth=526&size=7200&status=done&style=none&width=526)
  13. - **HashMap**:底层是一个哈希表,是一个线程不安全的集合,是多线程的集合,速度快
  14. - 可以储存null值,null键(包括以前所有的集合都能储存)

3. 常用方法

  1. - **put方法:向map对象中添加元素(第一个值不可以相同,但是第二个可以)(注意Map是一个接口,new的时候)(返回值是第二个位置被替换的元素,如果没替换就返回null)**<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580717021554-372f287b-cd61-42b3-ad26-5d0acc96fd43.png#align=left&display=inline&height=266&name=image.png&originHeight=266&originWidth=411&size=15816&status=done&style=none&width=411)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580717034034-9e6fb71a-001d-4cce-9cd9-653f709ee3b7.png#align=left&display=inline&height=32&name=image.png&originHeight=32&originWidth=477&size=3654&status=done&style=none&width=477)
  2. - **remove方法:移除key对应的元素,返回被移除的元素(如果不存在,就返回null)**<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580719776316-a907fddd-f55d-4e4d-b5ea-748f38ff3609.png#align=left&display=inline&height=288&name=image.png&originHeight=288&originWidth=392&size=18109&status=done&style=none&width=392)![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580719786192-a1442eea-9fcb-4219-a20f-d12d55632fa0.png#align=left&display=inline&height=32&name=image.png&originHeight=32&originWidth=427&size=3277&status=done&style=none&width=427)
  3. - **get方法:得到对应key值的元素,如果没有就返回null(需要是包装类类型)**<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580720029453-8b2d0985-d79a-486f-88d3-5466d90142bc.png#align=left&display=inline&height=285&name=image.png&originHeight=285&originWidth=395&size=17508&status=done&style=none&width=395)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580720040418-7549bb73-dcec-48ca-afc8-bb5eed7b6a08.png#align=left&display=inline&height=37&name=image.png&originHeight=37&originWidth=549&size=3927&status=done&style=none&width=549)
  4. - **containsKey方法:查看集合中是否包含这个key值,返回值是Boolean类型(还有containsValue方法:查看value值是否存在)**<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580720140931-efb40309-6a1a-4c2e-9c55-1bc026e5f582.png#align=left&display=inline&height=290&name=image.png&originHeight=290&originWidth=416&size=18330&status=done&style=none&width=416)![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580720151866-539f3e19-b735-4aaa-a7b6-cbeec6c14960.png#align=left&display=inline&height=31&name=image.png&originHeight=31&originWidth=521&size=3920&status=done&style=none&width=521)
  5. - **Set<K> keySet()返回此映射中包含的键的 Set示图**<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580722240119-b4f715cd-a000-4780-b49b-2c254500f869.png#align=left&display=inline&height=36&name=image.png&originHeight=36&originWidth=284&size=2057&status=done&style=none&width=284)
  6. - **用所学方法来统计字符串中字符的方法(题目练习)**<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580738250741-3a5d3043-2993-4704-b5ea-233b49422372.png#align=left&display=inline&height=410&name=image.png&originHeight=410&originWidth=526&size=21854&status=done&style=none&width=526)

4. 遍历方式

  1. - 通过键找值的方法
  2. - 使用Map集合中的方法keySet(),把Map集合中所有的key取出来,存储到一个Set集合中
  3. - 遍历set集合,获取map集合中中的每一个key
  4. - 通过Map集合中的方法getkey),通过key找到value
  5. - 使用迭代器遍历<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580721631354-d9bf4754-77bc-4f30-bd9e-7eb1607cf470.png#align=left&display=inline&height=439&name=image.png&originHeight=439&originWidth=403&size=26841&status=done&style=none&width=403)
  6. - 使用增强for遍历<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580721900713-319bd84f-0a28-4a0c-99f3-f14e4c2be40d.png#align=left&display=inline&height=359&name=image.png&originHeight=359&originWidth=407&size=22293&status=done&style=none&width=407)![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580721909083-127ea79f-4a9f-4347-b9d7-1a2d0aca6cd1.png#align=left&display=inline&height=139&name=image.png&originHeight=139&originWidth=118&size=4141&status=done&style=none&width=118)
  7. - **通过Entry键值对查找**
  8. - **简介**:Map.Entry<K,V> : Map接口中有一个内部类接口Entry
  9. - **作用**:当Map集合一创建,Entry对象也会随之创建,用来记录键和值(键和值的对应关系)
  10. - **使用方法**:
  11. - 使用Map集合中的方法entrySet(),把Map集合中多个Entry对象取出来,存储到一个Set集合中
  12. - 遍历Set集合,获取每一个Entry对象
  13. - 使用Entry对象中的方法getKey()和getValue()获取键和值<br />使用迭代器遍历<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580728966358-4cc68e3d-a5c8-4ffa-87f7-4a584840086f.png#align=left&display=inline&height=487&name=image.png&originHeight=487&originWidth=529&size=32670&status=done&style=none&width=529)![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580728983280-4079f2d7-8423-4a76-9da1-7307db30d894.png#align=left&display=inline&height=137&name=image.png&originHeight=137&originWidth=125&size=4173&status=done&style=none&width=125)<br />使用增强for循环遍历(增强for循环总是略简单一点)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580729089234-e73ed5a2-98bd-4f3d-a52a-53d22af19e75.png#align=left&display=inline&height=437&name=image.png&originHeight=437&originWidth=493&size=28198&status=done&style=none&width=493)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580729105214-f036b5ca-4416-4763-9532-5da5f0098b92.png#align=left&display=inline&height=135&name=image.png&originHeight=135&originWidth=124&size=4171&status=done&style=none&width=124)

5. HashMap储存自定义键值

  1. - **简介**:当Key是自定义类时,使用Map类储存就无法正确判断Key的相等,这个时候需要重写HashCode方法和equals方法来保证程序正常执行
  2. - **使用方法**<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580732878025-5f970a65-83ae-4233-acbf-d4942dace130.png#align=left&display=inline&height=341&name=image.png&originHeight=341&originWidth=478&size=26847&status=done&style=none&width=478)<br />重写toString方法和HashCode,equals方法(直接alt+insert插入即可,笔记本需要按上Fn键)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580732973679-3c579d2a-7a7e-4ef7-83b2-64782d73da15.png#align=left&display=inline&height=534&name=image.png&originHeight=534&originWidth=585&size=27026&status=done&style=none&width=585)

HashSet和HashMap

1. HashSet集合类

  1. - **基本定义**
  2. - 不允许存储重复的元素
  3. - 没有索引没有带索引的方法,不能使用普通的for循环
  4. - 是一个无序的集合,存储元素与取出元素的顺序有可能不同
  5. - 底层是一个哈希表结构(查询速度非常的快)
  6. - **遍历方法**(仅仅输出顺序1 2 3)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580636084940-b5176ce3-c0c9-4384-b38c-5f1fc8347364.png#align=left&display=inline&height=382&name=image.png&originHeight=382&originWidth=349&size=17233&status=done&style=none&width=349)![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580640491880-0a41feed-71aa-4f34-aded-2ae92457f527.png#align=left&display=inline&height=78&name=image.png&originHeight=78&originWidth=34&size=458&status=done&style=none&width=34)
  7. - **HashCode值**(是一个十进制的整数,是对象的逻辑地址值,与物理地址值一一对应)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580643269014-4711ffaf-176c-4299-82f4-de5ab72ce733.png#align=left&display=inline&height=110&name=image.png&originHeight=110&originWidth=320&size=4307&status=done&style=none&width=320)![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580643276750-34a5f980-8696-4926-a6be-68a2e67dbda8.png#align=left&display=inline&height=52&name=image.png&originHeight=52&originWidth=178&size=1950&status=done&style=none&width=178)<br />直接输出对象输出的是对象的逻辑地址的十六进制表示模式<br />而哈希值输出的是这个值的十进制模式
  8. - **HashSet存储自定义类型元素**(必须重写HashCodeEquals方法)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580673307330-7f2cfd11-5ef4-446d-9419-ba6803a48d2c.png#align=left&display=inline&height=263&name=image.png&originHeight=263&originWidth=480&size=15303&status=done&style=none&width=480)<br />**重写方法(**都有提示,很方便,在alt+insert中找equals和hashcode方法的重写,直接一直下一步)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580673356386-90c7ce05-63b2-437c-991a-f77951aa7a7b.png#align=left&display=inline&height=774&name=image.png&originHeight=774&originWidth=603&size=36344&status=done&style=none&width=603)
  9. - **但是有一点需要****注意**(这个时侯返回值是不同的,说明两者的地址还是不同的)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580673543208-9a8272f4-58d0-4d2d-b969-0ee571e61ad8.png#align=left&display=inline&height=29&name=image.png&originHeight=29&originWidth=247&size=1530&status=done&style=none&width=247)![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580673567309-8448d794-4e70-42af-b902-eb634b6edd90.png#align=left&display=inline&height=30&name=image.png&originHeight=30&originWidth=76&size=439&status=done&style=none&width=76)

2. LinkedHashSet集合类

  1. - **简介**:在HashSet的基础上加了一个链表,可以保证数据存储的有序性(什么顺序入,什么顺序出)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580674253305-dae3c454-a9b2-4251-a94e-b1ffdf67b985.png#align=left&display=inline&height=189&name=image.png&originHeight=189&originWidth=499&size=10551&status=done&style=none&width=499)![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580674265658-1ae72c99-c121-4f34-8134-0326483e4d65.png#align=left&display=inline&height=35&name=image.png&originHeight=35&originWidth=150&size=1193&status=done&style=none&width=150)
  2. - **对比**:HashSet方法(无序,存入之后按照某种顺序储存,不管你的输入先后顺序)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580674377891-6c5a41a2-9b29-4b7f-b14a-c5c95b628718.png#align=left&display=inline&height=181&name=image.png&originHeight=181&originWidth=405&size=9902&status=done&style=none&width=405)![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580674387588-c811bab6-8b8a-4284-bb38-4b8c6a5b6f44.png#align=left&display=inline&height=33&name=image.png&originHeight=33&originWidth=157&size=1120&status=done&style=none&width=157)

2. 哈希表

  1. - **简介**:是HashSet集合储存数据的结构
  2. - 哈希表 = 数组 + 链表 jdk1.8版本之前)
  3. - 哈希表 = 数组 + 链表 jdk1.8版本之后)<br />哈希表 = 数组 + 红黑树 (提高查询的速度)
  4. - **结构**:通过数组储存数据的哈希值(哈希值相同的储存在一组中)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580670899941-e93f1b4b-dd0c-482f-b054-bb7b0680a01d.png#align=left&display=inline&height=498&name=image.png&originHeight=498&originWidth=800&size=249879&status=done&style=none&width=800)
  5. - **注意**:在向哈希表中存储数据时需要先
  6. - 调用HashCode方法查询数组中是否有相同哈希值的位置,有就挂在上边
  7. - 然后调用equals方法查询哈希值相同时元素是否相同
  8. - 如果哈希值相同,元素又相同,那么这个元素就不会储存在哈希表中

集合工具类Collections

1. 常用方法

  1. - **shuffle静态方法**:打乱集合中的元素顺序<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580626276802-7285dd2f-00df-481a-9ec7-7a5dd0dee4c1.png#align=left&display=inline&height=105&name=image.png&originHeight=105&originWidth=411&size=5451&status=done&style=none&width=411)
  2. - **addAll静态方法**:一次添加多个元素<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580711188961-4d1ac6e7-fafd-4cfa-96ee-f6e04495e042.png#align=left&display=inline&height=79&name=image.png&originHeight=79&originWidth=464&size=6124&status=done&style=none&width=464)
  3. - **sort静态方法**:按照升序排序<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580711457731-dcd25896-e36d-4254-a042-dc1ff4525271.png#align=left&display=inline&height=185&name=image.png&originHeight=185&originWidth=458&size=9882&status=done&style=none&width=458)![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580711468069-be812918-2123-4fab-a987-2a5d5ecb7d8d.png#align=left&display=inline&height=54&name=image.png&originHeight=54&originWidth=135&size=1139&status=done&style=none&width=135)<br />sort方法在自定义类中的重写(只需要重写compareto方法即可)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580712407793-ec6b1ca2-e77d-4b77-92c5-42672dacb9b8.png#align=left&display=inline&height=211&name=image.png&originHeight=211&originWidth=409&size=14691&status=done&style=none&width=409)<br />一定要继承这个接口来获取这个compareto方法(后边的一些构造器什么的也要写上)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580712472125-8e62d4e1-0d18-49aa-a5b8-b6664e1d3201.png#align=left&display=inline&height=207&name=image.png&originHeight=207&originWidth=412&size=9092&status=done&style=none&width=412)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580712513327-7f2129f9-ffad-4d2e-b1c6-e30d00cb57d0.png#align=left&display=inline&height=59&name=image.png&originHeight=59&originWidth=779&size=7190&status=done&style=none&width=779)<br />注意排序规则:自己 - 外人 = 升序 外人 - 自己 = 降序
  4. - **sort直接指定排序方法**直接重写静态内部类(这个时候需要把之前的接口继承删除掉,重载方法也删除掉)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580713146694-bce4278c-983b-433d-8113-41990437c637.png#align=left&display=inline&height=353&name=image.png&originHeight=353&originWidth=446&size=22125&status=done&style=none&width=446)<br />**可以写出一个组合排序的方法(注意方法的使用)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/710889/1580713745175-3eb28b87-fc44-4142-a1f0-9a3decea7c92.png#align=left&display=inline&height=253&name=image.png&originHeight=253&originWidth=568&size=11723&status=done&style=none&width=568)

**