Java-day15泛型&Set

Java-day15泛型&Set

1.泛型
	概述:广泛的类型,在定义一个类的时候,类型中有些方法参数不确定,
			就使用一个符号来表示这些不确定的类型
	ArrayList<Integer> array = new ArayList<Integer>();
	标注了类型以后会自动进行类型检测和类型转换
	泛型的好处:1)提高了数据的安全性,将运行时的问题暴露在编译阶段;
				(2)避免了类型的强制转换
	泛型类的定义
		1.带有泛型的类
			class 类名<泛型类型1,泛型类型2,……>{
					……
			}
			说明:1.类名后面跟着的是泛型类型,就是泛型的声明,就相当于确定了类的类型
					2.泛型的声明需要一个合法的标识符,常用的大写字母 T Q W K V T
					3.泛型的确定,在使用时再确定类型
			class Contain<T>{
				ArraysList<T> arr = new ArrayList<T>();//新特性,后面的<>可以省略类型
				public T get(){}
				public void add(T t)
			}
			4.泛型方法的定义
				1.在声明方法中,带着泛型声明的方法,及时==就是方法声明。
				2.格式:
						修饰符<泛型声明1,泛型声明2,……> 方法名(参数列表){}
				3.说明
						1.在方法上声明的泛型在整个类中都可以使用;
						2.如果非静态的方法没有任何泛型的声明,可以使用类中定义的泛型
						3.如果静态方法上名,没有泛型的声明,就不能使用类泛型,
							需要自己定义自己的泛型类型
			5.泛型接口的定义和使用
				1.带着泛型定义的接口,就是泛型接口
				2.格式
					interface 接口名称<泛型1,……>{}
				3.说明
					1.在接口中定义的泛型作用范围是整个接口
					2.泛型接口被实现时,有两种方式
						1.实现时已被声明的类不在是一个泛型类,而是一个确定类型的类;
						2.实现时声明的类还是一个泛型类,可以在创建对象的时候确定类型
				4.集合体系中,大量的接口都存在实现和继承的关系
					Collection<E>  List<E>  ArrayList<E>
		6.通配符
			?extends E:E的类型及其子类类型
			?super E:E的类型及其父类
				Animals
					Dog
						YellowDog
				method(? extends E)
				method(? super E)
练习:
		1.模拟一个栈,完成先进后出的特点
		2.模拟一个队列,完成先进后出的特点
2.Set
	1.是Collection的子接口
	2.特点:无序的,没有前后之分,没有位置的概念,所有的元素都在集合中;
				没有索引,相同值的元素不能重复,因为无法区分;
				集合本身不保证顺序,即存入的顺序和取出的顺序不保证一致;
	3.Set的实现类
			1.HashSet:使用哈希表的存储方式来存储元素的集合
				Set set = new HashSet();
			2.Set集合的遍历
				1.转成数组,遍历数组
						Object[] toArray()  返回一个包含 set 中所有元素的数组。 
				2.转成数组
						<T> T[] toArray(T[] a)  返回一个包含此 set 中所有元素的数组;
						返回数组的运行时类型是指定数组的类型。
				(数组长度大于等于集合元素的个数,没有创建新的数组,只是产生了一个新的引用,多的位置上都填充为null值)	 
				(数组长度小于集合元素的个数,则创建新的数组,把集合中数组存储进新数组中并返回对应的地址,打印时创建的数组内容都为空,结果都在我们存放的新数组中)	   
				3.迭代器
					Iterator iterator = set.iterator();
				4.高级for循环
					格式:for(元素的数据类型 元素名:要遍历的数组或者集合)
					说明:元素名称虽然是固定的,但是随着循环的执行,每次代表的元素却不相同
					使用高级for循环,由于没有索引,无法获取元素的值,则不能修改
					底层是迭代器,不能与集合同时操作,否则会发生并发修改异常;
	4.HashSet 如何保持数据唯一
			1.重写HashCode()方法
			2.重写equals()方法
		TreeSet (底层是二叉树)
			1.使元素本身具有比较性
					泛型类实现Comparable接口,重写compareTo()方法
		   2.使集合本身具有比较性
		   写一个比较器,在创建集合的传入匿名内部类
		   new Comparator<Student>(){
						重写compare()方法;
			}
		   				
		   	3.当元素本身和集合都具有比较性时,使用集合的比较性,元素的比较性被忽略			
			4.二叉树排序的三种方式
			先(根)序遍历的递归算法定义:
			若二叉树非空,则依次执行如下操作:
			⑴ 访问根结点;
			⑵ 遍历左子树;
			⑶ 遍历右子树。
			2.中(根)序遍历的递归算法定义:(默认)
			若二叉树非空,则依次执行如下操作:
			⑴遍历左子树;
			⑵访问根结点;
			⑶遍历右子树。
			3.后(根)序遍历得递归算法定义:
			若二叉树非空,则依次执行如下操作:
			⑴遍历左子树;
			⑵遍历右子树;
			⑶访问根结点。
	5.LinkedHashSet
		1.是HashSet的一个子类,和HashSet保证元素唯一的原理相同
		2.将每个元素存储的时候,都记录了前后元素的地址
		3.可以根据元素存储的顺序,使其取出顺序保持不变


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值