集合类的应用
集合类是一些特殊的类,专门用来存放放其它类对象的“容器”。主要是完成一些数据库和数据结构的功能。
集合类的出现,使我们的程序更加强大,更加简单。
Map结构集合类:
HashMap 包含了键 不再用add,用put,且传入两个参数,键和对象名
举例:
集合类的比较:
List集合类与Map集合类的区别:
键值:能唯一标识某一事物的值称为键值。
(注意:键值是为了唯一标识事物而单独添加的属性,一定不要用事物本身的属性来做键值)
List没有键值,Map有键值。
ArrayList和Vector的区别于HashMap和HashTable的区别相同,他们是:
ArrayList和HashMap都是线程异步的,所以它们的特点是效率高但是安全性低。//单机的
Vector和HashTable都是线程同步的,所以它们的特点是效率低但安全性高。//联网的
集合类是一些特殊的类,专门用来存放放其它类对象的“容器”。主要是完成一些数据库和数据结构的功能。
集合类的出现,使我们的程序更加强大,更加简单。
学好集合类很重要,在开放中起到至关重要的作用,学好集合类,开发就简单多了。
集合类的分类:
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]);
}
}
}