java容器类是用来保存对象,分为两种:
①Collection,一个独立元素的序列。List必须按照插入的顺序保存元素,Set不能有重复的元素,Queue按照排队规则来确定对象产生的顺序
②Map,一组“键值对”对象。map可以通过KeySet()方法返回它的键的Set,它的值得Collection;hashMap用于快速访问,它的实现是数组和链表的结合体,它的底层是数组,数组的每一项是一个链表;key-value对,它持有一个指向下一个元素的引用,这就构成了链表;TreeMap保持“键“始终处于排序状态,LInkedHashMap保持元素插入顺序,也提供了快速访问能力
有两种list:
ArrayList,常于随机访问元素,插入和删除元素比较慢;常用方法,add()方法添加元素,get()方法取元素,contains()判断某个对象是否在列表中,remove()移除对象,indexOf()用来判断某个对象在list中的索引编号,reatinAll()方法找两个list的交集,也可用来移除未包含在list中的元素;对AraayList排序,通过collections类的sort方法来进行排序,如果要自定义排序规则,需要有类实现comparator接口并重写compare方法,调用sort方法时,将list对象与实现comparator接口的类对象作为参数;MapReduce中Map函数和Reduce函数处理的 <key,value>,其中需要根据key对键值对进行排序,所以,key实现了WritableComparable<T>接口,实现这个接口可同时用于序列化和反序列化。
LinkedList,是一个双向列表,个节点都包含了对前一个和后一个元素的引用,插入和删除较快,但是随机访问较慢,提供了优化的顺序访问,可以用来实现栈,队列效果。
Set,不保存重复的元素,也就是不能将相同对象的多个实例添加到Set中,一般用hashSet,它方便快速查找,若想对结果排序,一般使用treeSet代替HashSet;LinkedHashSet以插入顺序保存元素。
队列在并发编程中很重要,它可以安全地将对象从一个任务传输给另一个任务;priorityQueue是优先级队列,它在插入对象时,这个对象会被排序,这样可以保证获取元素时得到的是优先级最高的元素。
迭代器Iterator用来取容器中的元素,特征:java中的Iterator只能是单向的,容器实例调用iterator()方法将返回一个Iterator。使用next()可获得序列中下一个元素;如果只是向前遍历List,并不打算修改list对象本身,用foreach语法更简单;
ListIterator只能用于List类的访问,它可以双向移动。
Comparable & Comparator 都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序
omparator定义了俩个方法,分别是 int compare(T o1, T o2)和 boolean equals(Object obj),
用于比较两个Comparator是否相等有时在实现Comparator接口时,并没有实现equals方法,可程序并没有报错,原因是实现该接口的类也是Object类的子类,而Object类已经实现了equals方法。
Comparable接口只提供了 int compareTo(T o)方法,也就是说假如我定义了一个Person类,这个类实现了 Comparable接口,那么当我实例化Person类的person1后,我想比较person1和一个现有的Person对象person2的大小时,我就可以这样来调用:person1.comparTo(person2),通过返回值就可以判断了;而此时如果你定义了一个 PersonComparator(实现了Comparator接口)的话,那你就可以这样:PersonComparator comparator= new PersonComparator();
comparator.compare(person1,person2);。