Collection:
不同于HashSet的根本就是TreeSet是有序的
Set则是在HashMap的基础上来实现的
TreeSet,它把对象添加到集中的操作将变为按照某种比较规则将其插入到有序的对象序列中。它实现的是SortedSet接口,也就是加入了对象比较的方法。是否意味着要添加进TreeSet的对象须实现某种排序方法呢。就像map里的hashCode()和equals()一样。
客户化排序和自然排序:
客户化排序:答案:写一个实现comparator接口的类,定义好compare方法,并用之初始化set对象即可。
自然排序:待排序类实现comparable接口并重写compareTo()方法
TreeSet对象获得第一个迭代器将按升序提供对象。TreeSet类使用了一个TreeMap【针对TreeSet】
重写hashCode()和equals方法【针对HashSet】
要添加到map中的定义键的类必须实现hashcode()方法和equal()方法
HashMap: 实现一个映象,允许存储空对象,而且允许键是空(由于键必须是唯一的,当然只能有一个).HashMap虽然不支持同步,但是可以用Map.synchronizeMap(HashMap map)方法返回一个支持同步的map。
TreeMap: 实现这样一个映象,对象是按键升序排列的
在《Practical Java》一书中Peter Haggar建议使用一个简单的数组(Array)来代替Vector或ArrayList。尤其是对于执行效率要求高的程序更应如此。因为使用数组(Array)避免了同步、额外的方法调用和不必要的重新分配空间的操作
Collection类的客户化排序: Collections.sort(list,new Mycomparator());
泛型:
方法能够接受的参数必须是预定义参数的子类型,如下方法可以针对泛型编程处理类型安全
有界通配符:
public void drawAll(List<? extends Shape> shapes) { ... }
使用通配符带来的灵活性得要付出一定的代价;代码就是现在在方法里面不能对Shape对象插入元素。例如,下面的写法是不允许的:
public void addRectangle(List<? extends Shape> shapes) {
shapes.add(0, new Rectangle()); //编译错误
}
static <T> void fromArrayToCollection(T[]a, Collection<T> c){
for (T o : a){
c.add(o);//<span style="" font-size:"="">正确
}
}
Lambda表达式:
()->output;
只针对 只有一个函数的functional Interface,可以解决vertical hiararchy问题。