【JAVA】集合类、泛型和反射

集合类的应用
 集合类是一些特殊的类,专门用来存放放其它类对象的“容器”。主要是完成一些数据库和数据结构的功能。
集合类的出现,使我们的程序更加强大,更加简单。

学好集合类很重要,在开放中起到至关重要的作用,学好集合类,开发就简单多了。

集合类的分类:
1、List结构结合类
ArrayList LinkedList Vector Stack
2、Map结构集合类
HashMap HashTable
3、Set结构集合类
HashSet TreeSet
4、Queue结构集合类和Queue接口


Arraylist new1=new Arraylist();
new1.add(object);
System.out.prinlln("the Size is"+new1.size());

LinkedList
addFirst()	//栈存储,后进先出
.get(i)	//遍历的时候用
.getFirst()	//用一下,取第一个 顶部
.getLast()	//用一下,取最后一个 底部
.addLast()	//

Vector
Stack

Map结构集合类:
HashMap 包含了键 不再用add,用put,且传入两个参数,键和对象名
举例:

Person stu1=new Person("zhangsan",22);
Person stu2=new Person("lisi",23);

HashMap aa=new HashMap();
aa.put("001",stu1);
aa.put("002",stu2);
//aa.put("002",stu3); 键相同,则后者覆盖前者

查找:(不需要遍历)
if(aa.containsKey("002"));
取出来:
Person stu=(Person)aa.get("002");
遍历:
/*
for(int i=0;i<aa.size();i++){
	ee.get();
}
for循环完成不了...
*/

Iterator it=aa.keySet().iterator();	//将键取出来
while(it.hasNext()){
	String key=it.next().toString();
	Person stu=(Person)aa.get(key);
	System.out.println("");
}



集合类的比较:
List集合类与Map集合类的区别:
键值:能唯一标识某一事物的值称为键值。
(注意:键值是为了唯一标识事物而单独添加的属性,一定不要用事物本身的属性来做键值)
List没有键值,Map有键值。


ArrayList和Vector的区别于HashMap和HashTable的区别相同,他们是:
ArrayList和HashMap都是线程异步的,所以它们的特点是效率高但是安全性低。//单机的
Vector和HashTable都是线程同步的,所以它们的特点是效率低但安全性高。//联网的


泛型和反射机制
由于类型转换的错误,java虚拟机在编译时不会报错,二在运行时报异常,所以安全隐患非常明显,为此我们需哟啊用泛型来弥补这一问题。有了泛型,我们在集合类中添加对象的时候,就不用再强转了。
反射机制是将泛型固定的类的所有方法和成员全部可以显示出来,以供程序员可以确定程序的编写是否有错误机制。

泛型举例:

import java.util.*;
public class Generics {

	/**
	 * @param args
	 */
	
	public static void main(String[] args) {
		Goods1 myGoods=new Goods1("pear",31);
		//ArrayList goodsList=new ArrayList();	//1普通定义法
		ArrayList<Goods1> goodsList=new ArrayList<Goods1>();	//2泛型定义法,通过泛型将类型定下来
		goodsList.add(myGoods);
		//Goods1 temp=(Goods1)goodsList.get(0);	//1普通调用法,若要使用Goods1中的方法,需要强制类型转换
		goodsList.get(0);	//2泛型定义法,可以直接调用得Goods对象
		//Goods2 temp1=(Goods2)goodsList.get(0);	//此处非法强制类型转换在普通定义法时不会被检测出来
	}
}

class Goods1{
	private String name;
	private float price;
	public Goods1(String name,float price){
		this.name=name;
		this.price=price;
	}
}


class Goods2{
	private String color;	//类的不同之处在于多一个color属性
	private String name;
	private float price;
	public Goods2(String color,String name,float price ){
		this.color=color;
		this.name=name;
		this.price=price;
	}
}


反射举例:

import java.lang.reflect.Method;//导入


public class Reflection {//什么是反射机制呢,
						//就是别人编写的类,我们来用的时候可以通过这个机制知道里面有多少个方法,成员变量,构造方法,其参数,返回值...

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Items<Toy> myItems=new Items<Toy>(new Toy());	//注意此处语法,new Toy()一个对象,作为Items构造器的实参
		//与之类似的,传入一个普通的String类试试
		//Items<String> myItems=new Items<String>("haha");	//语法与上相同,还可以传入Integer...
		myItems.typeName();
		

	}

}

class Toy{	//一个自定义的toy类
	public void play(){
		System.out.println("正在玩游戏");
	}
	public int add(int a, int b){
		return a+b;
	}
}

class Items<L>{
	private L l;	//定义L类型的l,这块很有意思,将一个未知的类型传进来,并在后面进行解析
	Items(L l){	//构造方法
		this.l=l;
	}
	public void typeName(){
		System.out.println("类名是:"+l.getClass().getName());
		
		Method[] a=l.getClass().getDeclaredMethods();
		for(int i=0;i<a.length;i++){
			System.out.println("方法名是:"+a[i]);
		}
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值