java基础笔记(三--泛型)

泛型:用于解决安全问题,是一个类型安全机制。
好处:
    1.将运行时期出现问题ClassCastException,转移到编译期,方便于解决问题,让运行时问题减少,更安全。
    2.避免强制转换的麻烦。

泛型格式:通过<>来定义要操作的应用数据类型。
通常在集合框架中很常见,只要见到<>就要定义泛型。

<>是用于接收类型的。当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。如同函数中传递参数。



import java.util.*;

class GenericDemo {
	public static void main(String[] args) {
		ArrayList<String> al = new ArrayList<String>();

		al.add("abc01");
		al.add("abc0991");
		al.add("abc014");

		//al.add(4);//al.add(new Integer(4));

		Iterator<String> it = al.iterator();
		while(it.hasNext()) {
			String s = it.next();

			System.out.println(s+":"+s.length());
		}
	}
}


import java.util.*;

class GenericDemo2 {
	public static void main(String[] args) {
		TreeSet<String> ts = new TreeSet<String>(new SLenCompare());

		ts.add("abcd");
		ts.add("aa");
		ts.add("bcd");
		ts.add("aaa");
		ts.add("z");

		Iterator<String> it = ts.iterator();

		while(it.hasNext()) {
			String s = it.next();
			System.out.println(s+":"+s.length());
		}
	}
}

class SLenCompare implements Comparator<String> {
	public int compare(String s1,String s2) {
		int num = s2.length()-s1.length();
		if(num == 0)
			return s2.compareTo(s1);
		return num;
	}
}
//abcd:4
//bcd:3
//aaa:3
//z:1


import java.util.*;

class GenericDemo {
	public static void main(String[] args) {
		ArrayList<String> a1 = new ArrayList<String>();

		a1.add("abc1");
		a1.add("abc2");
		a1.add("abc3");

		ArrayList<Integer> a2 = new ArrayList<Integer>();

		a2.add(2);
		a2.add(5);
		a2.add(8);

		printColl(a1);
		printColl(a2);
	}

	/*
	public static void printColl(ArrayList<?> {
		Iterator<?> it = a.iterator();		
		while(it.hasNext()) {
			System.out.println(it.next());
		}
	}*/
	public static <T> void printColl(ArrayList<T> a) {
		Iterator<T> it = a.iterator();
		while(it.hasNext()) {
			//T t = it.next();
			System.out.println(it.next());
		}
	}
}


/*区别:
*    <T>代表具体类型,后面可以直接接收并操作此类型。T t = it.next();
 *   <?>不明确类型,"?"是占位符.有扩展性,但不能使用类型特有方法。sop(it.next().length());
*/


泛型限定
? 通配符,也可为占位符。
? extends E:可以接收E类型或者E类型的子类型。上限。
? super E:可以接收E类型或者E类型的父类型。下限。




import java.util.*;

class GenericDemo {
	public static void main(String[] args) {
		/*
		ArrayList<Person> a = new ArrayList<Person>();

		a.add(new Person("abc1"));
		a.add(new Person("abc2"));
		a.add(new Person("abc3"));

		printColl(a);
		*/
		ArrayList<Person> a = new ArrayList<Person>();

		a.add(new Student("abc1"));
		a.add(new Student("abc2"));
		a.add(new Student("abc3"));

		printColl(a);
	}

	public static void printColl(ArrayList<? extends Person> a) {    //<? extends Person>泛型限制。只能接收Person及其子类
		Iterator<? extends Person> it = a.iterator();

		while(it.hasNext()) {
			System.out.println(it.next().getName());
		}
	}
}

class Person {
	private String name;
	Person(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}
}

class Student extends Person {
	Student(String name) {
		super(name);
	}
}






import java.util.*;

class GenericDemo {
	public static void main(String[] args) {
		
		TreeSet<Student> ts = new TreeSet<Student>(new Comp());

		ts.add(new Student("abc01"));
		ts.add(new Student("abc03"));
		ts.add(new Student("abc02"));
		ts.add(new Student("abc04"));

		Iterator<Student> it = ts.iterator();

		while(it.hasNext()) {
			System.out.println(it.next().getName());
		}
		

		TreeSet<Worker> ts1 = new TreeSet<Worker>(new Comp());

		ts1.add(new Worker("w--abc01"));
		ts1.add(new Worker("w--abc02"));
		ts1.add(new Worker("w--abc03"));
		ts1.add(new Worker("w--abc04"));

		Iterator<Worker> it1 = ts1.iterator();
		
		while(it1.hasNext()) {
			System.out.println(it1.next().getName());
		}
	}
}

class Comp implements Comparator<Person> {
	public int compare(Person p1,Person p2) {
		return p2.getName().compareTo(p1.getName());
	}
}

class Person {
	private String name;
	Person(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public String toString() {
		return "Person:"+name;
	}
}

class Student extends Person {
	Student(String name) {
		super (name);
	}
}

class Worker extends Person {
	Worker(String name) {
		super(name);
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值