博客:http://www.cnblogs.com/skywang12345/p/3323085.html
https://blog.csdn.net/vegetable_bird_001/article/details/50975884
https://blog.csdn.net/vegetable_bird_001/article/details/50975884
容器主要分为Collection和Map两个大分类
一、Collection接口
Collection接口主要包括List(有序,可重复)和Set(无序,不可重复)接口。
List接口的实现类有:ArrayList、LinkedList、Vector。
ArrayList基于动态数组,查询快,增加和删除慢。
LinkedList基于链表,查询慢,增加和删除快。
LinkedLise常用方法:
void addFirst(E e):在链表头部插入一个元素;
addLast(E e):在链表尾部添加一个元素;
E removeFirst():移除链表中第一个元素,与remove类似;
E removeLast():移除链表中最后一个元素;
E getFirst():获取第一个元素;
E getLast():获取第二个元素;
void push(E e):与addFirst一样,实际上它就是addFirst;
E pop():与removeFirst一样,实际上它就是removeFirst;
E poll():查询并移除第一个元素;
E peek():获取第一个元素,但是不移除;
E peekFirst():获取第一个元素,但是不移除;
E peekLast():获取最后一个元素,但是不移除;
boolean offer(E e):在链表尾部插入一个元素;
boolean offerFirst(E e):与addFirst一样,实际上它就是addFirst;
boolean offerLast(E e):与addLast一样,实际上它就是addLast;
Vector基于动态数组,与ArrayList的不同是,Vector是线程安全的,ArrayList是线程不安全的,Vector的性能比ArrayList低。
Set接口的实现类有:HashSet、TreeSet。没有get方法,完全实现Collection中的抽象方法,没有另外的方法。
HashSet基于哈希码存储和查询数据,依赖于HashMap实现。
TreeSet基于红黑树结构存储数据,有一定的顺序,依赖于TreeMap实现。
TreeSet支持两种排序方式:自然排序和客户化排序。
自然排序:在JDK中,有一部分类实现了Comparable接口,如Integer,Double和String等,Comparable接口有一个compareTo(Object o)方法,它返回整数类型,对于表达式x.compareTo(y),如果返回值为0,表示x和y相等,如果返回值大于0,表示x大于y,如果小于0,表示x小于y。TreeSet调用对象的compareTo方法与集合中的对象作比较,然后进行升序排序,这种方式叫自然排序。
Person类实现Comparable接口,按照年龄排序,年龄相等,按照名字排序。
结果
客户化排序: java.util.Comparator接口用于指定具体的排序方式,它有个compare(Object obj1,Object obj2),用于比较两个对象的大小,调用构造方法TreeSet(Comparator comparator),集合存储对象的时候按照Comparator接口实现的比较方法进行排序。当数据类实现了Comparable,同时Set构造参数实现了Comapator,此时按照Comparator中的排序方法进行排序!
结果:
二、Map接口
Map接口存放键值对,实现类有:HashMap,TreeMap。
HashMap基于哈希表存放键值。
TreeMap基于红黑树结构存储数据,是有序的。
另外一种存放键值对的容器,HashTable线程安全的,HashMap线程不安全的。
Map接口分别提供了用于返回 键集、值集或键-值映射关系集。
1、entrySet()用于返回键-值集的Set集合。
2、keySet()用于返回键集的Set集合 。
3、values()用户返回值集的Collection集合。
因为Map中不能包含重复的键;每个键最多只能映射到一个值。所以,键-值集、键集都是Set,值集时Collection。
List遍历方法:
Map的常用方法:
V put(K Key,V Value)方法,如果key不重复,返回null,如果key重复,覆盖之前的value,返回之前的value值。
V get(K Key )返回key值对应的value值。
V remove(K Key)方法,返回删除的key值,对应的value值。
boolean isEmpty()
boolean containsKey(Object key)
boolean containsValue(Object value)
int size()
Map的遍历方法
1、使用keySet()方法,返回Set集合,集合内存放key对象,遍历Set集合,通过Map的get(K Key)方法获取value值。
2、使用values()方法,遍历value值,不能获得key值。
3、使用entrySet方法,返回Set<Map.EntrySet<K Key,V Value>>集合,将键值对的映射关系封装到Map.EntrySet对象中,然后放入Set集合中,遍历Set集合,使用Map.EntrySet对象的getKey()和getValue()方法获取键和值。