五、读第十一、十二章

来源:互联网 发布:淘宝投诉电话有用吗 编辑:程序博客网 时间:2024/05/16 01:50

1、初识泛型

  • 通过使用泛型,可以在编译期防止将错误类型的对象放置在容器中。

  • 指定了泛型之后,取出比如List中的数据不需要类型转换了。

  • 当指定了某个类型作为泛型参数时,你并不仅限于只能将该确切类型的对象放置在容器中。向上转型也可以像作用于其他类型一样用于泛型。(就是子类也可以放进去)

2、添加一组数据

ArrayList.asList()方法接受一个数组或是一个用逗号分隔的元素列表并将其转换为一个List对象。

3、初识容器

  • List:它以特定的顺序保存一组元素

    • ArrayList: 长于随机访问元素,但是在List的中间插入和移除元素比较慢

    • LinkedList: 通过代价比较低的在List中间进行插入和删除操作,提供了优化的顺序访问。随机访问方面比较慢,但是特性集叫ArrayList更大。添加了作为栈、队列、双端队列的方法。

    • 当确定一个元素是否属于这个List、移除一个元素,都要用到equals()方法。使用索引值的时候就不存在这种情况了。

  • Set:元素不能重复

    • HashSet:最快的获取元素方式。使用了相当复杂的方式存储元素的。

    • TreeSet: 按照比较结果的升序排序。

    • LinkedHashSet:按照被添加的顺序排列。

  • Map:保存键值对,关联数组。对于每一个键,Map只接受存储一次。

    • HashMap:提供了最快的查找技术,也没有按照任何明显的顺序保存元素

    • TreeMap: 按照比较结果的升序来排序

    • LinkedHashMap: 按照插入顺序来排序,同时还保留了HashMap的查询速度。

  • Queue:只允许在同期的一端插入对象,并从另一端移除对象。它可以安全地将对象从一个任务传输到另一个任务。

  • 迭代器

//伪代码Iterator<xxx> it = xxxs.iterator();    while(it.hasNext()){        XXX xxx = it.next();    }

这个玩意,不管前面的容器是什么类型,就是xxxs不管是什么容器装的,都可以用一种方式将其遍历出来。也就是说:爹大气统一了对容器的访问。

  • ListIterator

    • 是一个更加强大的Iterator的子类型,他只能用于各种List类的访问,尽管Iterator只能向前移动,但是ListIterator可以双向移动。
    • it.hasNext()和it.hasPrevious()方法,实现双向的访问。
  • forEach:适用于任何实现了Iterable的类,所以Collection都可以用,但是map就不行。

4、异常

只能在代码中忽略RuntimeException(及其子类)类型的异常,其他类型异常的处理都是由编译器强制实施的。究其原因,RuntimeException代表的是编程错误:
- 无法预料的错误,比如从你控制范围之外传递进来的Null引用
- 代码中的一些错误,比如数组长度越界。。。

5、finally

当要把除内存之外的资源恢复到他们的初始状态,就要用到finally语句。这种需要清理的资源包括:已经打开的文件或者网络连接,在屏幕上画的图形,甚至是外部世界的某个开关等。
原创粉丝点击