集合,反射

温故知新

标识符:

  • 是用来给类,方法,变量起名字的

  • 不能以数字开头

  • 区分大小写

  • 不能和关键字同名

  • 驼峰命名规则

  • 长度无限制

变量

  • 程序过程中可以变化的量
  • 变量的定义:数据类型 变量名 = 值;
  • 变量的分类
    • 成员变量:定义在类中方法外,成员变量会被初始化,可以不赋初值,生命周期是整个类中
  • 局部变量:定义在方法中,成员变量不会被初始化,需要赋初值,生命周期是此方法中。

数据类型

  • 八大基本数据类型

    类型 字节数 范围 后缀
    byte 1 -128 到127
    short 2 ±3万
    int 4 ±21亿
    long 8 l/L
    float 4 f/F
    double 8 d/D
    boolean
    char 2

集合的分类

Collection接口

定义:是存储单一数据的集合。
Collection:是无序的,可重复的集合。
List:是有序的,可重复的集合。
Set:是无序的,唯一的集合

集合,反射_第1张图片

Collection接口

添加元素:add(object)添加一个对象,addAll(coll)添加一个集合。
删除元素:remove(object)移除一个元素,removeAll(Collection)移除交集,clear()清除所有,
		retainAll(coll)保留交集。
查询:isEmpty()是否为空,size集合长度,contains(object)是否包含元素,containsAll是否包含集合。
循环输出元素:
方法1:foreach:for(Object obj:coll){...}
方法2:迭代器: Interator i = coll.Interator();

集合List接口

添加元素:add(object)添加一个对象,addAll(coll)添加一个集合。
删除元素:remove(object)移除一个元素,removeAll(Collection)移除交集,clear()清除所有,
		retainAll(coll)保留交集。
查询:isEmpty()是否为空,size集合长度,contains(object)是否包含元素,containsAll是否包含集合。
	 indexOf(Object)对象的索引,lastIndexOf(Object)最后一个数据的索引。
循环输出元素:
方法1:for语句
方法2:foreach:for(Object obj:coll){...}
方法3:迭代器: Interator i = coll.Interator();
		l.remove(1);
		l.remove(Integer.valueOf(1));
		
		List l1 = new ArrayList();
		l1.add("deo");
		l1.add("diro");
		
		List l2 = new ArrayList();
		l2.add("yhy");
		
		l.retainAll(l1);
		
		l1.remove(1);
		
		l.add(l1);
		l.add(0, 7);
		l.addAll(0, l1);
		l.addAll(l1);
		
		System.out.println("索引0"+l.get(0));
		System.out.println("索引4"+l.get(3));
		
		l.removeAll(l1);
		
		//l是否包含l2
		boolean isC2 = l.containsAll(l2);
		System.out.println("l contains l2  "+isC2+"   l "+l+"  l2  "+l2);
System.out.println("for循环");
		for(int i=0;i<l.size();i++) {
			System.out.println(l.get(i));
		}
		System.out.println("foreach循环");
		for(Object obj:l) {
			System.out.println(obj);
		}
		System.out.println("迭代器输出");
		for(Iterator i = l.iterator();i.hasNext();) {
			System.out.println(i.next());
		}

实现类ArrayList

​ ArrayList和List的方法基本相同,但是ArrayList集合中有subList(fromIndex,toIndex),截取一个一串元素,返回集合。

​ 优点:查询元素快

​ 缺点:添加和删除元素慢

实现类LinkedList

​ 相对于ArrayList来说,LinkedList多了一些头和尾的操作,offer()插入元素,offerFirst()插入头元素,offerLast()插入尾元素,peek查看,poll查看并删除头部元素,getFirst()查看头元素,getLast()查看尾元素。

​ 优点:添加和删除元素快

​ 缺点:查询元素慢。

Set接口

​ 大多数方法和Collection接口相同

​ 迭代方法:foreach、迭代器。

HashSet实现类

​ 在插入的对象中需要重写hashCode方法和equals()方法。

​ HashSet数组插入规则:

​ 1.首先计算hash值,通过重写hashCode()方法,来判断添加的位置;

​ 2.如果该位置没有元素则直接插入元素,如果该位置有元素,则通过equals()方法判断是否有相等的元素,如 果有相等的元素,那么该元素插入不成功,如果没有插入成功。

Map接口

定义:是存储键值对的数据
集合,反射_第2张图片

反射

​ 反射是运行期的行为

  • 如何获取class对象
    • class.forname(“权限命名加上类名”);
    • 对象.getcClass();
    • 类名.class
  • 获取父类的class对象
    • class类名.getSuperClass();

利用class对象获取对象,方法,构造器

1.获取类对象的属性,get.Field(String),getFields(),getDeclaredFields();

2.获取类对象的构造方法,get.Constructor(构造参数Class类 型),get.Constructor(),get.Constrctors(),get.DeclaredConstructors();

3.获取类对象的方法,getMethods(),getDeclaredMethods();

注意:导包的时候要注意 Field,Constructor,Method都要导入java.lang.reflect。

		Class clu = Class.forName("com.mage.reflect.User");
		Field f = clu.getField("name");
		System.out.println("Field   "+f);
		Field f1  = clu.getDeclaredField("gender");
		System.out.println("Field   "+f1);
		Field[] fs = clu.getFields();
		for(Field fss:fs) {
			System.out.println("Field   "+fss);
		}
		
		Constructor c = clu.getConstructor(String.class,Integer.TYPE,Integer.TYPE);
		System.out.println("Constructor   "+c);
		Constructor[] c2 = clu.getConstructors();
		for(Constructor c1:c2) {
			System.out.println("Constructor[]  "+c1);
		}
		//获取指定的方法fun
		Method m = clu.getMethod("fun",Integer.TYPE, String.class);
		

你可能感兴趣的:(集合,反射)