今天看到一些知识点,与大家分享:
1、Collection是一个接口,它是List、Set、Queue等接口的父接口。在这个接口中,定义了集合类中通用的方法,例如增加元素、删除元素等。该接口继承了Iterable接口,因此可以使用foreach遍历集合中的元素。
Collections是一个类,它是专门为Collection接口类型对象定义的工具类。这个类提供了很多静态方法,实现了排序、查找等算法。
2、Comparator接口的实现类用于实现排序功能
具体见:http://www.cnblogs.com/linjiqin/archive/2011/08/31/2160360.html
3、ArrayList和LinkedList的区别:
对于ArrayList,在底层上使用数组作为容器,类似于数据结构中的顺序表,它可以快速的存取容器中任意位置的元素,缺点是插入和删除操作需要移动大量元素。
对于LinkedList,在底层上使用双向链表作为容器,类西域数据结构中的链表,它可以快速地插入和删除元素,缺点是获取元素比较耗时。
4、Deque叫做双端队列,Double Ended Queue 的缩写,它支持在两端插入和删除元素。该接口的实现类包括ArrayDeque和LinkedList类,他们都支持在必要时自动扩展容量。
5、Hashtable的“t”不能写成“T”
6、Map接口的实现类:HashMap(基于哈希表的实现),LinkedHashMap(基于哈希表和链表的Map接口实现),TreeMap(基于红黑树的Map接口实现)
7、不使用新的内存交换两个数:
int a = 10;
int b = 6;
a = a+b;
b = a-b;
a = a-b;
8、System.arraycopy方法的使用
Arrays.toString(arr1)方法可以直接打印出来整个数组
package com.lk.C; import java.util.Arrays; public class Test2 { public static void main(String[] args) { int [] arr1 = {1,2,3,4,5,6,7,8,9}; int [] arr2 = new int[10]; System.arraycopy(arr1, 2, arr2, 1, 3); //参数的含义:从哪个数组复制;从被复制数组的第几个数开始复制;目标数组;目标数组的第几个数开始接收;接收几个 System.out.println(Arrays.toString(arr1)); System.out.println(Arrays.toString(arr2)); } }
//[1, 2, 3, 4, 5, 6, 7, 8, 9] //[0, 3, 4, 5, 0, 0, 0, 0, 0, 0]
9、Hanoi(汉诺塔)问题的时间复杂度是T(n)=2T(n-1)+1 即T(n)=2^n-1 时间复杂度是O(2^n)
10、树的度指的是某节点所拥有的子树的个数。
11、霍夫曼树是带权路径最小的二叉树,其算法的核心思想是每次从节点的权值中选择两个最小的构造树。
例题在P241页
12、静态查找和动态查找:
静态查找是指查找过程中元素不发生变化,动态查找是指查找过程中元素发生增加、删除等变化。
适合静态查找的算法包括:顺序查找、折半查找、散列查找等。
适合动态查找的算法包括二叉排序树查找、散列查找等。
13、对于散列查找,可以直接根据函数来计算元素的位置,因此时间复杂度与n无关。
14、有向完全图需要任意两个顶点之间都存在两条方向相反的连线。
即n个顶点的有向完全图中包含n*(n-1)条边。
15、水仙花数就是一个数等于组成该数各个位的立方和,例如370=3^3+7^3+0^3
16、一个数怎么获得个十百千万位的数?
package com.lk.C; public class Test5 { public static void main(String[] args) { // TODO Auto-generated method stub int num = 12345; System.out.println((num/10000)%10);//获得万位 System.out.println((num/1000)%10);//获得千位 System.out.println((num/100)%10);//获得百位 System.out.println((num/10)%10);//获得十位 System.out.println((num/1)%10);//获得个位 } }