Java有多种方式保存对象,确切的说是对象的引用。譬如数组是保存一组对象的最有效的方式,但是数组有固定的尺寸,不适合不确切的场景。Java容器类库作用于“保存对象”,划分为两种:Collection;Map。
Java集合类:List,Set,Queue,Map。
泛型
如果一个类没有显式的声明继承哪个类,那么自动继承Object类。ArrayList保存的是Object,可以将例如Apple对象放进容器,在编译器还是运行都不会出现问题。get()方法取出的只是Object的引用,必须转型为Apple。应用预定义的泛型例如:ArrayList<Apple>,尖括号中是类型参数(可以有多个),制定了容器实例可以保存的类型。通过使用泛型可以再编译器防止放入错误类型的对象。如果你把别的对象放进去,会出现编译错误,而不是运行时错误。
类型
1,Collection。独立元素的序列,这些元素服从一条或多条规则。List按照插入顺序保存,Set不能有重复元素,Queue按照队列规则确定顺序。
2,Map(也被称关联数组)。一组成对的“键值对”对象。
注意:Arrays.asList方法底层是数组,因此不能修改size,add或delete都会在运行时报错。
List
两种类型:
ArrayList:随机访问O(1),插入删除慢O(N)
LinkedList:插入删除O(1),随机访问比较慢。
迭代器
也是一种设计模式,也是一个对象,工作:遍历并选择序列中的对象,而客户端程序员不必关系序列底层的结构。通常被称为轻量级对象。Iterator只能单向移动。移除之前需要先调用next方法。Iterator能够将遍历序列的操作与序列底层的结构分离。
ListIterator:更加强大的Iterator的子类型,只能用于对List的访问。可以双向移动。
栈
先进后出的容器。也被称为叠加栈。LinkedList可以实现栈的所有功能。
Set
最常被使用测试是否存在。Set具有与Collection完全一样的接口,没有额外的功能,实际Set就是Collection只是行为不同。HashSet使用了散列,所以顺序是没有规律的。TreeSet是存储在红黑树中。
Map
将对象映射到其他对象。Map可以返回他的键的Set,keySet()方法产生所有的键组成的Set。
Queue
先进先出的容器。在并发中特别重要。可以安全的将一个对象从一个任务传输到另一个任务。LinkedList提供了方法支持队列行为,实现了Queue接口,LinkedList是Queue的一种实现,可以向上转型。
offer():在允许的情况下,将一个元素插入到队尾或者返回false。peek()和element()再不移除的情况下返回队头。peek再队列为空返回null,element抛出异常。poll()和remove()将移除并返回队头,poll再队列为空返回null,remove抛出异常。
PriorityQueue
优先级队列声明下一个元素是最需要的元素(具有最高的优先级)。先进先出声明的是下一个元素是等待时间最长的元素。重复是允许的,最小的值又有最高的优先级,优先级可以通过提供Comparator对象来改变排序。
Collection,Iterator
Collection描述了所有序列容器的共性的根接口,表示了其他若干个接口的公共性而出现的接口。
Foreach语法主要永固数组,打死你hi也可以应用于Collection对象。创建了任何实现Iterator得类都可以用于foreach。大量的类都是Iterable类型主要包含所有的Collection类但是不包含Map。
如果现有一个Iterable类,想要添加一种或多种在foreach使用这个类的方法,那么需要使用适配器设计模式。
![](https://img.haomeiwen.com/i2417893/e7d2ddd39f93c86f.png)
总结:
数组将数字和对象联系起来。他保存的类型是明确的对象,容量不可变。
List建立数字索引和对象的管理,数组和List都是排好序的容器,List可以自动扩容。
网友评论