)
java中常见的集合 分类以及涉及到的接口。java中常见的集合主要有两类单列集合和双列键值对。单列collection顶层接口有以下三个子接口1.List接口里面有ArrayList()LinkedList()ArrayList()底层是通过动态数组实现的(有序可重复带索引)线程不安全。查询速度快不适合进行增删操作。LinkedList底层是通过双链表来实现的收尾增删快查询速度慢。2.Set接口(无序不可重复无索引)其无序主要是通过hashcode()equals()来判断是否重复。里面有HashSet()TreeSet()LinkedHashSet()。HashSet主要是通过HashMap哈西表来实现的。存取速度极快不利于查找。原理是通过HashMap的键来存取key是一个常量。不用来存储。LinkedHashset()主要是通过哈希表跟双向链表来实现的。实现有序插入查询速度略慢于HashSet()TreeSet底层是红黑树特点是自然排序3.Queue 队列接口LinkedList()ArrayDeque()双列键值对 顶层接口Map(不继承Collection)Mapkeyvalue key是键value是值。键不可重复值是可以重复的。有HashMap()TreeMap()。HashMap()的底层是数组 链表和红黑树。特点是键无序值是可重复的查询速度极快线程不安全。LinkedHashMap()的底层是通过数组和双向链表来实现的。TreeMap()的底层是红黑树它实现自动排序。ArrayList 和LinkedList 的区别有: 1. 数据结构 ArrayList是通过动态数组来实现的。LinkedList是通过双向链表来实现的。2. 在性能上ArrayList的随机访问速度快时间复杂度为O(1)增删比较慢时间复杂度为O(n) LinkedList的随机访问速度比较慢时间复杂度为O(n)Linked的插入删除比较快 时间复杂度为O(1)。3.在内存占用上ArrayList除了要存储数据外还要存索引。而LinkedList除了要存数据外还要存两个指针。还有关于数组遍历的问题。数组的遍历有四种。1.普通遍历(下标遍历) 普通遍历就是通过for循环的常规遍历但是注意不要使用LinkedList 增加的时候会导致速度极慢 2.迭代器遍历 3.增强for循环 for(String s:: list){} 其本质就是编译器自动转成Iterator迭代器 但是它不能够实现增删以及拿不到下标 4.java8的流式遍历 list.foreach(system.out::println) 简单操作支持过滤映射等链式操作。线性安全的集合跟有序的集合。有序的集合类 TreeMap LinkedHashMap TreeSet LinkedHashSet