常见的八大排序
- 插入排序
- 直接插入排序时间复杂度O(n2)
- 时间复杂度O(n2)
- 空间复杂度O(1)
- 希尔排序
- 时间复杂度O(n1.3)
- 空间复杂度O(1)
- 直接插入排序时间复杂度O(n2)
- 选择排序
- 直接选择排序
- 时间复杂度O(n2)
- 空间复杂度O(1)
- 堆排序
- 时间复杂度O(nlog2n)
- 空间复杂度O(1)
- 直接选择排序
- 交换排序
- 冒泡排序
- 时间复杂度O(n2)
- 空间复杂度O(1)
- 快速排序
- 时间复杂度O(nlog2n)
- 空间复杂度O(nlog2n)
- 冒泡排序
- 归并排序
- 时间复杂度O(nlog2n)
- 空间复杂度O(1)
- 基数排序
- 时间复杂度O(d(r+n))
- 空间复杂度O(rd +n)
Jvm内存中各区存放内容
- 寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.
- 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)
- 堆:存放所有new出来的对象。
- 静态域:存放静态成员(static定义的)
- 常量池:存放字符串常量和基本类型常量(public static final)。
- 非RAM存储:硬盘等永久存储空间
遍历一个list有哪几种方式
- for循环遍历,
- iterator迭代器遍历,
- foreach遍历
Java中list、set、map集合的区别
List(列表)
- List的元素以线性方式存储,可以存放重复对象,List主要有以下两个实现类:
- ArrayList:长度可变的数组,可以对元素进行随机的访问,向ArrayList中插入与删除元素的速度慢。
- LinkedList:采用链表数据结构,插入和删除速度快,但访问速度慢。
Set(集合)
- Set中的对象不按特定(HashCode)的方式排序,并且没有重复对象,Set主要有以下两个实现类:
- HashSet:HashSet按照哈希算法来存取集合中的对象,存取速度比较快。当HashSet中的元素个数超过数组大小*loadFactor(默认值为0.75)时,就会进行近似两倍扩容。
- TreeSet:TreeSet实现了SortedSet接口,能够对集合中的对象进行排序。
Map(映射)
- Map是一种把键对象和值对象映射的集合,它的每一个元素都包含一个键对象和值对象。 Map主要有以下两个实现类:
- HashMap:HashMap基于散列表实现,其插入和查询<K,V>的开销是固定的,可以通过构造器设置容量和负载因子来调整容器的性能。
- LinkedHashMap:类似于HashMap,但是迭代遍历它时,取得<K,V>的顺序是其插入次序,或者是最近最少使用(LRU)的次序。
- TreeMap:TreeMap基于红黑树实现。查看<K,V>时,它们会被排序。TreeMap是唯一的带有subMap()方法的Map,subMap()可以返回一个子树。