学习Java第十二周

课中:

理论课:

  1. 泛型的本质就是”数据类型的参数化”我们可以把"泛型”理解为数据类型的一个占位符形式参数,即告诉编译器, 在调用泛型时必须传入实际类型。
  2. 泛型相当于标签。
java.lang.Object
 java.utilAbstractCollection<E>
   java.util.AbstractList<E>
      java.util.ArrayList<E>

ArrayList aa = new ArrayList();//aa就是一个容器

aa. add(new Dog());//将一个狗对象存到容器中

aa.add(12);//12会自动装箱成一个Integer对象
class MyArrayList<E>0bject[] obj = new 0bject[10];

public void set(E o, int index) {

obj [index] = 0 ;
}
public object get(int index) {

return (E)obj [index] ;//强制向下转型
}
}
  1. 容器里面有List和set继承,List有ArrayList继承。

实验课:
这节课老师讲了Ch8Demo1,然后接下来的时间由我们自己做,老师讲解完第一题后,我发现后面有几题也很简单了。

package ch8;

import java.util.HashSet;
import java.util.Set;

/*
 * 2.编写程序Ch8Demo1类
编写一个人的类,有属性:姓名,年龄。
构造方法:设定姓名,年龄
普通方法:显示此人的信息(姓名,年龄)
姓名及年龄相同的人是同一个人
年龄大的人比年龄小的人大
编写一个狗的类,内容和人类相同
编写一个测试的main方法,定义一个容器类(set),放入三个人,两条狗,实现增加及移除输出容器类的信息。
 */
public class Ch8Demo1 {
public static void main(String[] args) {
	Set s1 = new HashSet();//创建一个容器
	s1.add(new person("zhangsan",11));
	s1.add(new person("lisi",12));
	s1.add(new person("wangwu",13));
	
	s1.add(new dog("huahua",3));
	s1.add(new dog("xixi",5));
	
	System.out.println(s1);
	s1.remove(new person("wangwu",13));
	System.out.println(s1);
}
}
class person implements Comparable<person>{//用Comparable来比较是否是同一个人
	private String name;
	private int age;
	public person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	@Override
	public String toString() {
		return "name=" + name + ", age=" + age ;
	}
	@Override
	public int hashCode() {//增加这个方法在写容器Set输出时不会乱序。
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {//用equals方法来比较是否是同一个人
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		person other = (person) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
	@Override
	public int compareTo(person arg0) {
		if(this.age>arg0.age) {
			return 1;
		}else if(this.age>arg0.age) {
			return 0;
		}else {
			return -1;
		}
	
	}
	
}
class dog implements Comparable<dog>{//和person类完全一样,只是将名字修改了一下
	private String name;
	private int age;
	public dog(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	@Override
	public String toString() {
		return "name=" + name + ", age=" + age ;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		dog other = (dog) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
	public int compareTo(dog arg0) {
		if(this.age>arg0.age) {
			return 1;
		}else if(this.age>arg0.age) {
			return 0;
		}else {
			return -1;
		}
	
	}
	
}

如果Set里面有两个类,那么结果是乱序,如果只有一个类且有Hashcode这个方法,结果是有序的,如果是List,不用Hashcode方法结果也是有序的。
老师讲解第1题后,2、3、4、5题都是比较简单的了。

预习:

  1. Stack
  2. Set
  3. Map
  4. Queue:PriorityQueue
  5. Collection 和Iterator
  6. Foreach和迭代器:适配器方法惯用法
  7. 完整的容器分类法

总结:

这周我们初步学习了容器,了解了泛型及容器的一些概念,还有简单的应用,在这同时,我们也学习了怎么更方便的去比较两个相同的人,用了Comparable这个方法。在这周的两节课中,老师都给我们强调了数据结构的重要性,我们这章和数据结构关联比较大,所以我们要更加好好学习数据结构了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值