同样的一个面试火热的问题。以前的笔记,挖出来整理下

1 java中final和static的区别

final定义的变量不能被更改,定义的方法不能被覆盖,定义的类不能被继承。

static定义的变量所有的对象都可以都共享这个值,static定义的方法不与任何类关联,不用创建类也可以调用方法。static不修饰类。

2 java中list,set和map的区别

List按对象进入的顺序保存对象,不做排序或编辑操作。Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List)。Map同样对每个元素保存一份,但这是基于"键"的,Map也有内置的排序,因而不关心元素添加的顺序。如果添加元素的顺序对你很重要,应该使用 LinkedHashSet或者LinkedHashMap.    

List有两种,一种是arrayList,优点在于随机访问元素,另一种是linkedlist,对顺序访问支持较好。

set不保存重复元素,hashset优点在于快于查找,其中的值必须要定义hashcode。treeset是保存顺序的set,底层是树结构,linkedhashset内部是按照链表维护元素的顺序,并且按照插入的顺序维护。

map是保存键和值的结构。hashmap是基于散列实现的。LinkedHashMap类似于hashmap,内部通过链表维护熟悉。treemap是基于红黑树数据结构的

另外下面还有两种很少用的map

WeakHashMap : 弱键(weak key)Map,Map中使用的对象也被允许释放: 这是为解决特殊问题设计的。如果没有map之外的引用指向某个“键”,则此“键”可以被垃圾收集器回收。

IdentifyHashMap : 使用==代替equals()对“键”作比较的hash map。专为解决特殊问题而设计。