您的位置:首页 > 编程语言 > Java开发

Java编程思想之读书笔记系列九 --- 第十一章 --- 持有对象

2018-03-12 15:53 274 查看
检查笔记的时候,突然发现少了第十一章的内容,特此补上。

基本的容器类:List, Set, Queue和Map
Java容器类都可以自动地调整自己的尺寸
可以使用注解来抑制警告信息:注解以“@”开头,可以接收参数,比如 @SuppressWarnings("unchecked")表示只有有关“不受检查的异常”的警告信息应该被抑制
容器类的尖括号括起来的是参数类型,可以有多个
Object默认的toString()方法:打印类名,后面跟随该对象散列码的无符号十六进制表示
容器可以分为两类:Collection和Map。Collection是一个独立元素的序列,这些元素都服从一条或多条规则;Map,一组成对的“键值对”对象,允许你使用键来查找值
Collection的构造器可以接受另一个Collection,用它来将自身初始化,但是Collection.addAll()方法运行起来要快得多,因此新建一个空白Collection,然后使用Collection.addAll()方法是首选方式
可以直接使用Arrays.asList()的输出作为List,但是这种情况下,就无法调整大小了,因为底层表示的是数组
可以在Arrays.asList()中间插入一条线索,以告诉编译器对于由Arrays.asList()产生的List类型,实际的目标类型应该是什么,这样可以解决子类父类之间的问题。实例如:Arrays.<Snow>asList(new Light(), new Heavy());
使用Arrays.toString()方法可以产生数组的可打印表示,而容器类无需任何帮助即可打印出内容
LinkedList包含的操作多于ArrayList
HashSet使用了相当复杂的存储方式来存储元素,而且这种技术是最快的获取元素的方式;TreeSet按照比较结果的升序保存对象;LinkedHashSet按照被添加的顺序保存对象
与HashSet一样,HashMap也提供了最快的查找技术;TreeMap按照比较结果的升序保存键;LinkedHashMap按照插入顺序保存键,同时还保留了HashMap的查询速度
Collections.shuffle()随机打乱原来的顺序;retainAll()方法是一种有效的“交集”操作,当然,它所产生的行为依赖于equals()方法;addAll(),通过方法的重载,既可以追加到表尾,也可以在中间插入新的列表;toArray()也存在方法重载,默认返回的是Object数组,但是可以通过传递目标类型的数据,那么它将产生指定类型的数据
List的行为根据equals的行为而有所变化,因为确定一个元素是否属于某个List,发现某个元素的索引,以及从某个List中移除一个元素时,都会用到equals()方法
长度为0的数组,叫做空数组,辅助作用,比如作为一个类型
迭代器统一了容器的访问方式,能够将遍历序列的操作与序列底层的结构分离
Iterator和ListIterator,父类和子类的关系,但是ListIterator提供了更多的功能,两种可分别通过iterator()方法和listIterator()方法获得
LinkedList还添加了可以使其用作栈、队列或双端队列的方法,方法很多,比如getFirst(),element()和peek(),removeFirst(),remove()和poll(),addFirst(),add()和addLast(),removeLast()
java中的stack类:java.util.Stack;使用LinkedList可以直接实现一个Stack
TreeSet将元素存储在红-黑树结构当中,而HashSet则存储在散列当中,LinkedHashSet也是存储在散列里,不过使用链表维护了插入元素的顺序
Map里的方法:containsKey()和containsValue(),用于判断是否包含特定的键和值;keySet()方法和values()方法分别返回map里的键集合和值集合
队列在并发编程中特别重要;LinkedList提供了方法以支持队列的行为,并且它实现了Queue接口,可以将LinkedList向上转型为Queue
Queue的方法:peek()和element()都将在不移除的情况下返回队头,但是peek()在队列为空时返回null,而element()会抛出NoSuchElementException异常;remove()和poll()方法都将移除并返回队头, 但是poll()在队列为空时返回null,而remove()会抛出NoSuchElementException异常;offer()在允许的情况下向队列尾部插入一个元素,否则返回false
优先队列:优先级队列声明下一个弹出的元素是最需要的元素(具有最高的优先级)
标准C++类库中并没有其容器的任何公共基类——容器之间所有的共性都是通过迭代器完成的
Collection和Iterator:Iterator会更灵活一些
任何实现了Iterable的类都可以用于foreach,因为foreach就是利用Iterable接口来在序列中移动
数组和Iterable无法自动转换
当你有一个接口并需要另一个接口时,编写适配器就可以解决问题,即适配器模式
新程序中不应该使用过时的Vector,HashTable和Stack
容器分类
以上就是关于持有对象的笔记内容,如有错误,敬请指出,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息