一、集合框架

  1. 将集合的接口与实现分离,用接口类型存放集合引用。

  2. 集合有两个基本接口:Collection(不允许重复对象)和Map;Collection又主要是List(有序)和Set(无序)组成。

  3. 迭代器:在JavaSE8中,可以调用forEachRemaining并提供一个lambda,就会为每个元素调用这个表达式。

ArrayList<String> list = new ArrayList();
list.add("111");
list.add("222");
list.add("333");
list.add("444");
list.add("555");
Iterator<String> iterator = list.iterator();
iterator.forEachRemaining(str ->
{
    System.out.println(str);
    System.out.println("doother");
}
);

next()方法向前移动,然后返回上一个元素。remove()方法会删除上次调用next()方法返回的元素。


二、具体的集合

  1. 链表列表LinkedList:其中ListIterator的previous()和hasPrevious()可以用来放反向遍历链表。因为链表是个有序集合,在Iterator接口中没有add方法,而ListIterator包含了add。add方法依赖迭代器的位置。

    get方法做了个优化,如果索引大雨size()/2那就从尾端开始找。

    getFirst() getLast() removeFirst() removeLast()

  2. 数组列表ArrayList:单线程用ArrayList,多线程可用Vecotr。

  3. 散列表HashSet:快速查询对象,根据不同数据域的对象将参数不同的散列码。装填因子决定何时对散列表进行再散列。不关心元素顺序。

  4. 数集TreeSet:是个有序集合,添加元素比散列表慢,但比List快。要使用数集必须能够比较元素,这些元素必须实现Comparable接口,或者提供一个Comparator。higer/lower(E value)返回大于value的最小元素或小与value的最大元素。ceilling/floor(E value)与上类似不过加了个等于。


三、映射

  1. HashMap和TreeMap:散映射对键进行散列,数映射对键进行了排序。如果不需要排序,可用散映射。

  2. 迭代处理可以采用forEach方法

Map<Integer,String> map = new HashMap();
map.put( 1,"1111");
map.put( 2,"2222");
map.put( 3,"3333");
map.put( 4,"4444");
map.put( 5,"5555");
map.forEach((k,v) ->
{
    System.out.print("key is :"+k);
    System.out.println("  value is :"+v);
}
);

3.映射视图:可以对原映射进行操作

Set<K> keySet()         键集 

Set<Integer> key = map.keySet();
for (Iterator<Integer> iterator1 = key.iterator();iterator1.hasNext();){
        System.out.println("map's = "+iterator1.next());
}

Collection<V> values()     值集

Collection<String> collection = map.values();
for (Iterator<String> stringIterator = collection.iterator();stringIterator.hasNext();){
    System.out.println("map's value = "+stringIterator.next());
}

Set<Map.Entry<K,V>> entrySet() 键/值集

Set<Map.Entry<Integer, String>> mapSet = map.entrySet();
for (Map.Entry<Integer,String> entry : mapSet){
    System.out.print("map's key = "+entry.getKey());
    System.out.println(" map's values = "+entry.getValue());
}


四、视图与包装器

  1. 轻量级集合包装器:ArrayList.asList()把数组传递给一个集合,带有访问底层数组的get和set方法不过不能改变数组的大小。

  2. 子范围:subList(n,m) 第一个索引包含在内,第二个不包含。

  3. 同步视图:使用视图机制来确保集合的线程安全,而不是实现线程安全的集合类。Collections类的静态synchronizedMap方法可以将任何一个映射表转换成具有同步访问的Map。

    Map<K,V> map = Collections.synchroziedMap(new HashMap<K,V>)  (List,Set等的安全类都有)

  4. Collections的方法,sort、shuffle(打乱顺序)、binarySearch二分查找法、replaceAll()。