treeset
可以对set集合中元素进行排序
底层数据结构是二叉树
保证元素唯一性的依据是compareTo方法return 0
-
自然顺序
让元素自身具备比较型,元素需要实现comparable接口,覆盖compareto方法,这种方式也称为元素的自然顺序 -
第二种排序方式
当元素自身不具备比较性时,或者具备的比较性不是所需要的,这时就需要让集合自身具备比较性。在集合初始化时就有了比较方式。
treeset练习
- 按照字符串长度排序,字符串本身具备比较性,但是它的比较方式不是所需要的,这时就只能使用比较器。
泛型
用于解决安全问题,是一个安全机制
好处:
1。将运行时期出现问题classCastException转移到了编译时期,方便于程序员解决问题,让运行时问题减少,安全。
2.避免了强制转换的麻烦通常
ArrayList al=new ArrayList();
Iterator it=al.iterator();
- 格式
通过<>来定义要操作的引用数据类型
在集合框架中很常见,只要见到<>就要定义泛型,<>用来接收类型
泛型类
- 什么时候定义泛型类?当类中要操作的引用数据类型不能确定的时候
class Utils<QQ>
{
private qq;
public void setobject(QQ q)
{
this.q=q;
}
public QQ getobject()
{
return q;
}
}
Utils<worker> u = new Utils<worker>();
u.setObject(new worker());
泛型方法
class demo
{
public <T> void show(T t)
{
System.out.println("show"+t);
}
public <Q> void show(Q q)
{
System.out.println("show"+q);
}
}
demo d=new demo();
d.show("hh");
d.show(new Integer(4));
d.print("heihei");
- 静态方法不可以访问类上定义的泛型,如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上
public static <W> void method(w t)
{}
泛型限定
?通配符 也可以理解为占位符
import java.util.*;
class generic
{
public static void main(String[] args) {
ArrayList<String> al=new ArrayList<String>();
al.add("abc1");
al.add("abc2");
al.add("abc3");
ArrayList<Integer> all=new ArrayList<Integer>();
all.add(4);
all.add(5);
all.add(2);
printcol(al);
printcol(all);
}
public static void printcol(ArrayList<?> al)
{
Iterator<?> it = al.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
?extends E:可以接收E类型或者E的子类型。上限
?super E:可以接收E类型或者E的父类型。下限