ArrayList<>,尖括号当中可以写多个类型参数,表示可以让列表存放的对象类型
java 容器类类库分为两个概念:Collection 与 Map ,而且容器不能存放基本数据类型,要经过自动包装机制将基本类型转化为对应的包装类型来存放。
Collection 包括: List(必须按照插入顺序保存元素)、Set(不能有重复元素)、Queue(按排队规则确定对象产生顺序,通常与插入顺序相同);
Map: 是成对的“键值对”对象,允许使用键查找值。ArrayList 允许使用数字查找值,从某种意义上将数字与对象关联在一起。映射表允许使用某一对象查找另外的对象。Map 可以通过将存储值设置为其它容器来达到多维存储的目的。
Arrays.asList() 接受一个数组或是一个用逗号分隔的元素列表,并将其转换为一个 List 对象(Arrays.asList(1,2,3,4),该方法也可以通过显式类型参数说明的方式标明实际目标类型,即Arrays.<Type>asList(1,2,3,4)。该方式转换后由于底层为数组,因此不能调整大小;可以通过在尖括号内标注 Arrays.<Type>asList 告诉编译器所产生的 List 类型)。Collections.addAll() 接受一个 Collection 对象以及一个数组或者逗号分隔的列表,将元素加入 Collection 中(Collections.addAll(collection,11,12.13,14),还有一个 Collection.addAll(),区别在于 Collections.addAll() 可以接受当前 Collections 对象作为参数;Collection.addAll()只能接受其它的 Collection 对象为参数)。
Collection 与 Map 都可以直接使用打印语句进行输出,不需要进行toString 处理。Collection 打印的结果是中括号包含的,而 Map 则是由大括号包含的。
键值在 Map 中的保存顺序与其插入顺序不同,使用的是一种非常快的算法来控制顺序。
名称 | 特点 |
HashMap | 与 HashSet相同,保存元素无明显顺序,使用最快查找技术 |
LinkedHashMap | 按照插入顺序保存键,保留了 HashMap 的查询速度 |
TreeMap | 存入之后将数据进行比较,并按升序排列 |
Set 不保存重复元素,通常被用于查询某元素是否存在。与 Map 一样,Set 也有三种不同的实现:
名称 | 特点 |
HashSet | 使用散列函数的方式加快速度 |
TreeSet | 使用红黑树的结构 |
LinkedHashSet | 散列与链表结合(维护插入顺序) |
List 的两种类型:ArrayList、LinkedList
ArrayList 适合随机访问,LinkedList 擅长插入删除操作,且特性集更大。subList(param1,param2.....) 方法可以构建子链表,addAll() 方法既可以在链表尾部添加内容,也可以在指定的位置插入内容。
Set 实际上就是 Collection,只是行为不同。最常用于查询是否包含某元素,其基于对象的值确定归属性并且会自动阻止重复的元素存储操作。HashSet 使用散列函数进行存储,而 TreeSet 使用红黑树的数据结构。
Queue(所有操作由 LinkedList 提供支持):
方法名 | 特点 |
offer() | 将元素插入队尾或者返回 false |
peek(),element() | 都用于返回队头(不移除元素)。为空时,peek()返回null,element()抛出 NoSuchElementException |
poll(),remove() | 都用于返回队头(将移除元素)。为空时,poll()与peek()一样;remove()与element()一样。 |
PriorityQueue:
该队列在调用 offer() 插入对象时,会在队列中被排序,默认使用自然顺序(可通过提供 Comparator 修改顺序)。PriorityQueue 在执行 peek()、poll() 以及 remove() 方法时,获得的是队列中优先级最高的元素。
不要使用过时的 Vector、Hashtable、Stack
迭代器只能单向移动,作用如下:
序号 | 描述 |
1 | iterator()要求容器返回一个Iterator,Iterator将准备好返回序列中第一个元素 |
2 | next() 获取下一个元素 |
3 | hasNext() 检查是否还有元素 |
4 | remove() 将新返回的元素删除 |
Iterator 的真正价值在于能够将遍历序列的操作与底层结构分离,也就是根本不用知道容器的类型就能够对其中的数据进行操作。
ListIterator 是一个更强大的 Iterator,并且只用于访问各种 List 类。强大之处在于能够双向移动并且能够产生当前访问元素的前一个与后一个元素的索引;还可以使用 set() 方法替换掉访问过的最后一个元素或者使用 listIterator(n) 方法创建一个一开始就指向列表中索引为 n 的元素处的 ListIterator。