set(无序,不可重复,线程不安全,增加删除快,查询慢)
Set是无序的,指的是队列排列结果无法预知,不是按照插入顺序排列。所以,
TreeSet既成自Set,无序,但是结果是按照二叉树排列,HashSet安装哈希表排列。
Set的排序:
自然排序:
1、TreeSet的add会把对象升级为Comparable类型
2、add的时候调用compareTo方法比较
3、安装compareTo方法进行排序存储
比较器比较
1、创建TreeSet的时候接收Compator
2、add的时候调用Compator的compare方法
3、安装compareTo方法进行排序存储
List(有序,可以重复,线程不安全)
线程不安全的解决办法(装饰)
List list=Collections.synchronizedList(newLinkedList(...));
子类有ArrayList,LinkedList,Queue,
ArrayList的底层是可变数组,随着元素增大按照50%扩容(即变成原来的1.5倍),新增删除慢,查询元素快
LinkedList底层是链表,新增删除快,查询元素慢。
HashMap和Hashtable的区别
1、HashMap可以保存null key和null value,但是Hashtable不可以
2、HashMap是线程不安全的,Hashtable是线程安全的。多个线程可以共享一个Hashtable,而没有正确同步的话,多个线程是不能共享HashMap的。
3、正是因为Hashtable是线程安全的,所以在单线程的情况下Hashtable的效率比较低,应该选择HashMap。
HashMap可以通过下面的语句进行同步:
Map m = Collections.synchronizeMap(hashMap);
HashMap和TreeMap的区别
HashMap 的底层是哈希表,非线程安全的,允许null 的key和null的value。key不能重复,value可以重复。
TreeMap的底层是红黑树。非线程安全,不允许null。value可以重复。不能重复,value可以重复。
JDK 1.5后新特性
1、泛型
2、装箱和拆箱
3、可变参数
4、枚举
5、增强for循环
6、静态导入
java中类加载器、反射、动态代理之间的关系
1、类加载器是用来把一个类的.class文件从硬盘中加载到虚拟机上变成对象的类。
Bootstrap classloader、extention classloader、app classloader
2、反射是通过字节码文件对象将字段,方法,构造等成员变量映射成响应的类,获取并操作类的成员变量的技术。
3、动态代理中通过反射调用目标方法,是反射的应用。