TreeSet和TreeMap
TreeMap 和 TreeSet 是 Java Collection Framework 的两个重要成员,其中 TreeMap 是 Map 接口的常用实现类,而 TreeSet 是 Set 接口的常用实现类。虽然TreeMap 和 TreeSet 实现的接口规范不同,但 TreeSet 底层是通过 TreeMap 来实现的(如同HashSet底层是是通过HashMap来实现的一样),因此二者的实现方式完全一样。而 TreeMap 的实现就是红黑树算法。
相同点:
1.TreeMap和TreeSet都是有序的集合,也就是说他们存储的值都是排好
2.TreeMap和TreeSet都是非同步集合,因此他们不能在多线程之间共享,不过可以使用方法Collections.synchroinzedMap()来实现同步
3.运行速度都要比Hash集合慢,他们内部对元素的操作时间复杂度为O(logN),而HashMap/HashSet则为O(1)。
不同点:
1.最主要的区别就是TreeSet和TreeMap分别实现Set和Map接口
2.TreeSet只存储一个对象,而TreeMap存储两个对象Key和Value
3.TreeSet中不能有重复对象,而TreeMap中可以存在
4.Key可以是任意数据类型, 无序的, 唯一的,—>set集合
5.Value 可以是任意数据类型, 无序的, 不是唯一的 ---->collection集合
6.一个key只能对应一个value(value可以为集合,集合中存储多个数据
7.TreeSet是由TreeMap的key维护的,他们的使用方式相同,但是TreeMap是键值对的形式.
反射----Class对象
反射是发生在程序运行期间的行为–java的一个动静态机制
1.创建对象的时候,拿到的都是当天前类型Class对象的一个镜像|赋值体
2.在类加载的时候,会在内存中存在当天前类型的一个Class对象,一个类的Class对象中存储这个类的所有信息(属性,方法,构造器…)
3.只要我们能够获取这个类型的Class对象,就可以对这个类做一切操作
Class 类的实例表示正在运行的 Java 应用程序中的类和接口
获取源头(Class对象):
1.对象.getClass()
Class cls1=“哈哈”.getClass();
Class cls2=“呵呵”.getClass();
System.out.println(cls1cls2);
2.类名.class
Class cls3=String.class;
System.out.println(cls1cls3);
System.out.println(cls3);
3.Class.forName(“类的权限命名:包名+类名”)
Class cls4=Class.forName(“java.lang.String”);
System.out.println(cls3cls4);
4.根据子类的Class对象获取父类的Class对象
Class cls5=cls4.getSuperclass();
System.out.println(cls5);
5.获取基本数据类型的Class对象
Class base1=int.class;
System.out.println(base1);
Class cls6=Integer.class;
System.out.println(base1cls6);
Class base2=Integer.TYPE; //得到对应的基本数据类型的class对象
System.out.println(base1==base2);
常用的方法
//1.getName() 包名+类名
System.out.println(cls5.getName());
2. Class<?>[] getInterfaces()
Class[] arr=cls4.getInterfaces();
System.out.println(Arrays.toString(arr));
3.String getSimpleName()
System.out.println(cls4.getSimpleName());
4.boolean isInterface() isPrimitive()
System.out.println(Integer.class.isPrimitive());
System.out.println(Integer.TYPE.isPrimitive());
通过反射创建对象
1)通过反射获取到类中的构造器
2)根据构造器创建对象