单列集合
List:
List系列集合:添加的元素是有序、可重复、有索引
有序:是指存和取的顺序是一样的,不是大小有序。
遍历方式:
迭代器遍历:
增强for遍历:
lambda遍历:
普通for遍历:
Set:
- HashSet 无序、不重复、无索引
- LinkedHashSet:有序、不重复、无索引
- TreeSet:可排序、不重复、无索引
- 这里的有序指的是保证存储和取出的元素顺序一致
Hashset:
需要在对象中重写hashCode方法alt+inset idea会自动生成
LinkedHashSet:
在以后如果要数据去重,我们使用哪个?
默认使用HashSet
如果要求去重且存取有序,才使用L LinkedHashSet :因为效率比较低
TreeSet
- 不需要重写hashcode和equals方法因为TreeSet的底层是红黑树,但是要指定排序规则
- 可排序:按照元素的默认规则(有小到大)排序。
- TreeSet集合底层是基于红黑树的数据结构实现排序的,增删改查性能都较好。
比较字符串默认是按首字母大小来排序的,如果我们想先按长度进行排序如果长度一样再按首字母排序。就会用到第二中排序方式。
比较器排序:创建TreeSet对象时候,传递比较器Comparator指定规则
使用原则:默认使用第一种,如果第一种不能满足当前需求,就使用第二种
遍历方式:
迭代器遍历:
lambda遍历:
增强for遍历:
双列集合
双列集合的特点:
双列集合一次需要存一对数据,分别为键和值
键不能重复,值可以重复
键和值是一一对应的,每一个键只能找到自己对应的值
键+值这个整体我们称之为“键值对”或者“键值对对象”,在Java中叫做"Entry对象"
双列集合的遍历方式:
键值对
键找值:
Lambda表达式:
Set<Map.Entry<String, String>> entries = map.entrySet();//匿名内部类map.forEach(new BiConsumer<String, String>() {@Overridepublic void accept(String key, String value) {System.out.println(key+"="+value);}});
HashMap
- 特点都是由键决定的:无序、不重复、无索引
- HashMap跟HashSet底层原理是一模一样的,都是哈希表结构
LinkedHashMap
由键决定:有序、不重复、无索引。
底层数据结构是依然哈希表,只是每个键值对元素又额外的多了一个双链表的机制记录存储的顺序。
TreeMap
TreeMap跟TreeSet底层原理一样,都是红黑树结构的。
由键决定特性:不重复、无索引、可排序
可排序:对键进行排序。
注意:默认按照键的从小到大进行排序,也可以自己规定键的排序规则
代码书写两种排序规则:
实现Comparable接口,指定比较规则。
创建集合时传递Comparator比较器对象,指定比较规则。