##### 集合

``java / java集合框架:* Collection:存放的是单一值* 特点:* 1、可以存放不同类型的数据-而数组只能存放固定类型的数据* 2、当使用arraylist子类实现的时候-初始化的长度是10-当长度不够的时候会自动进行扩容操作* api方法:* 增加数据的方法* add:要求必须传入的参数是Object对象-因此当写入基本数据类型的时候-包含了自动拆箱和自动装箱的过程* addAll:添加另一个集合的元素到此集合中 删除数据的方法* clear:只是清空集合中的元素-但是此集合对象并没有被回收* remove:删除指定元素* removeAll:删除集合元素 查询数据的方法* contains:判断集合中是否包含指定的元素值* containsAll:判断此集合中是否包含另一个集合* isEmpty:判断集合是否等于空* retainAll:若集合中拥有另一个集合的所有元素-返回true-否则返回false* size:返回当前集合的大小 //集合转数组的操作* toArray:将集合转换成数组* */ `

illustration

illustration

illustration

##### List

`java / java集合框架:* List:存放的是单一值* 特点:* 1、可以存放不同类型的数据-而数组只能存放固定类型的数据* 2、当使用arraylist子类实现的时候-初始化的长度是10-当长度不够的时候会自动进行扩容操作* api方法:* 增加数据的方法* add:要求必须传入的参数是Object对象-因此当写入基本数据类型的时候-包含了自动拆箱和自动装箱的过程* addAll:添加另一个集合的元素到此集合中 删除数据的方法* clear:只是清空集合中的元素-但是此集合对象并没有被回收* remove:删除指定元素* removeAll:删除集合元素 查询数据的方法* contains:判断集合中是否包含指定的元素值* containsAll:判断此集合中是否包含另一个集合* isEmpty:判断集合是否等于空* retainAll:若集合中拥有另一个集合的所有元素-返回true-否则返回false* size:返回当前集合的大小 //集合转数组的操作* toArray:将集合转换成数组* */ `

illustration

illustration

###### 迭代器

`java / 在java代码中包含三种循环的方式* do...while* while* for* 还有一种增强for循环的方式-可以简化循环的编写* 所有的集合类都默认实现了Iterable的接口-实现此接口意味着具备了增强for循环的能力-也就是for-each* 增强for循环本质上使用的也是iterator的功能* 方法:* iterator()* foreach()* 在iterator的方法中-要求返回一个Iterator的接口子类实例对象* 此接口中包含了* hasNext()* next()** 在使用iterator进行迭代的过程中如果删除其中的某个元素会报错-并发操作异常-因此* 如果遍历的同时需要修改元素-建议使用listIterator()-* ListIterator迭代器提供了向前和向后两种遍历的方式* 始终是通过cursor和lastret的指针来获取元素值及向下的遍历索引* 当使用向前遍历的时候必须要保证指针在迭代器的结果-否则无法获取结果值* */ `

illustration

illustration

illustration

###### LinkedList

illustration

illustration

###### Vector

`java /** * 1、Vector也是List接口的一个子类实现 * 2、Vector跟ArrayList一样-底层都是使用数组进行实现的 * 3、面试经常问区别: * (1)ArrayList是线程不安全的-效率高-Vector是线程安全的效率低 * (2)ArrayList在进行扩容的时候-是扩容1.5倍-Vector扩容的时候扩容原来的2倍 * `

##### Set

`java /** 1、set中存放的是无序-唯一的数据* 2、set不可以通过下标获取对应位置的元素的值-因为无序的特点* 3、使用treeset底层的实现是treemap,利用红黑树来进行实现* 4、设置元素的时候-如果是自定义对象-会查找对象中的equals和hashcode的方法-如果没有-比较的是地址* 5、树中的元素是要默认进行排序操作的-如果是基本数据类型-自动比较-如果是引用类型的话-需要自定义比较器* 比较器分类:* 内部比较器* 定义在元素的类中-通过实现comparable接口来进行实现* 外部比较器* 定义在当前类中-通过实现comparator接口来实现-但是要将该比较器传递到集合中* 注意:外部比较器可以定义成一个工具类-此时所有需要比较的规则如果一致的话-可以复用-而* 内部比较器只有在存储当前对象的时候才可以使用* 如果两者同时存在-使用外部比较器* 当使用比较器的时候-不会调用equals方法* */ `

illustration

###### HashSet

illustration

illustration

illustration

illustration

###### TreeSet

illustration

###### 比较器

`java /*** 内部比较器* 定义在元素的类中-通过实现comparable接口来进行实现* 外部比较器* 定义在当前类中-通过实现comparator接口来实现-但是要将该比较器传递到集合中* 注意:外部比较器可以定义成一个工具类-此时所有需要比较的规则如果一致的话-可以复用-而* 内部比较器只有在存储当前对象的时候才可以使用* 如果两者同时存在-使用外部比较器* 当使用比较器的时候-不会调用equals方法* */ `

illustration

</div