1. 泛型
1.1什么是泛型?
泛型是JDK5中引入的特性,它提供了编译时类型安全检测机制
1.2泛型有什么作用?
-
把运行时期的问题提前到了编译期间
-
避免了强制类型转换
1.3泛型怎么用?
类后面->泛型类-------------ArrayList<E>extends AbstractList<E>
方法声明上->泛型方法---add(E e)&public E get(int index) (自定义泛型方法时,<E>写在void前面)
接口后面->泛型接口
1.4注意
创建泛型类的对象时,必须要给这个泛型确定具体的数据类型
*toArray->把集合转化成数组
String []strings=list.toArray(new String[list.size()]);//new String[list.size()=list,这种new出来的可以直接当对象使用 System.out.println(Arrays.toString(Strings));//Arrays.toString->把数组转成打印数组格式字符串
2. 通配符
通配符表上限:<? extends 类型>
ArraryList<? extends Number>:他表示的类型是Numner或者其子类型
通配符表下限<? super类型
Arraylist<? super Numeber>:他表示的类型是Number或者其父类型
3. Set集合-TreeSet (遍历前必须定义排序规则)
3.1 Set集合特性
-
去重复
-
存取顺序不一致
-
没有索引
3.2 TreeSet排序方式
-
自然排序(Comparable)
-
使用空参构造创建TreeSet集合
-
自定义的Student类实现Comparable接口
-
重写里面的compatreTo方法()
@Override public int compareTo(Student o) { int result= this.getAge()-o.getAge(); result =result==0?this.getName().compareTo(o.getName()):result; return result; }
this.comparaTo.o--->把字符串按照字典排序
-
-
比较器排序
-
带参构造时使用
-
让集合构造方法接收Comparator的实现类对象,重写compare
-
排序规则必须按照要求的主要条件和次要条件
TreeSet<String>tS=new TreeSet<String>(new Comparator<String>() { @Override public int compare(String o1, String o2) { int result=o1.length()-o2.length(); result=result==0?o1.compareTo(o2):result; return result; } });
-
3.3两种排序小结
-
在使用的时候,默认使用自然排序,当自然排序不满足现在的需求时,必须使用比较器排序
比如说当集合储存的是String,Intrger包装类等,自然排序写在源码中不能更改,这时候选择比较器排序
-
两种方式中关于返回值的规则
-
如果返回值为负数,存左边
-
如果返回值为0, 不存
-
如果返回值为正数,存右边
-
4.数据结构-二叉树
-
二叉树
-
二叉查找树
较之二叉树,左边元素大,右边小
-
平衡二叉树
通过左旋和右旋来使每个节点两边长度差不超过1
-
红黑树