集合

* java.util.Collection接口:是根据所有单列集合共性抽取出来形成的父接口
* 里边包含了所有集合中共性的内容(方法)

   api:

    * void clear() 移除此 collection 中的所有元素 , 清空的是集合中的元素,集合本身仍然存在     

    * boolean add(E e) 往集合末尾追加元素,此方法的返回值,一定是true

    * boolean remove(Object o)移除集合中指定的元素,如果有重复的元素,删除的是第一个出现的元素

     * boolean contains(Object o) ,判断对象是否存在于集合中,存在就返回true,不存在返回false

     * int size() ,返回此 collection 中的元素数。

    *  Object[] toArray() 把集合转成数组,返回的是一个存储对象的数组,数组存储的数据类型是Object

    *  void clear()   移除此 collection 中的所有元素,清空的是集合中的元素,集合本身仍然存在

 

* java.util.Iterator接口:迭代器
* 作用:集合的数据类型不同,存储数据不同,取出数据的方式也不同,
* 所以java就提供了一种技术,称之为迭代,是一种公共的取出集合中元素的方式.
*
* 迭代:在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。
* 一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
*
* 成员方法:
* boolean hasNext() 如果仍有元素可以迭代,则返回 true。 (判断集合是否还有元素)
* E next() 返回迭代的下一个元素。 (取出集合中的元素)
*
* 迭代器Iterator是一个接口,找到接口的实现类,是每个集合的内部类
* 在Collection接口中提供了一个方法叫iterator
* Iterator<E> iterator() 返回在此 collection 的元素上进行迭代的迭代器。
* 此方法就返回了迭代器Iterator的实现类对象
*
* 面向接口编程方式:
* iterator方法返回了迭代器Iterator的实现类对象,我们不需要关注返回的是哪个实现类对象,
* 只需要知道返回的是Iterator的实现类对象就够了,我们可以使用接口Iterator来来接收这个对象(多态)
*
* 迭代器的使用步骤:
* 1.创建一个集合,存储多个元素
* 2.调用集合中的方法iterator,获取迭代器的实现类对象,使用接口Iterator接收这个对象(多态)
* 3.调用Iterator中的方法hasNext和next依次取出集合中的元素

* 迭代器的并发修改异常:ConcurrentModificationException
* 我们在迭代集合中元素的时候,如果修改了集合的长度(添加元素/减少元素)
* 而这个时候迭代器正在工作,不知道集合的长度进行修改,所以就会抛出并发修改异常(罢工)
*
* 解决方案:
* 1.在迭代的过程中,不对集合的长度进行修改(没用)
* 2.只针对List接口的下边的集合,Iterator迭代器有一个子接口叫ListIterator
* 这个接口有很多自己特有的方法
* void add(E e) 将指定的元素插入列表(可选操作)。
* void remove() 从列表中移除由 next 或 previous 返回的最后一个元素(可选操作)。
* 我们可以使用这个接口的add/remove方法,让迭代器自己增加/删除集合中的元素
* 相当于迭代器已经同意了集合添加/删除元素,就不会罢工(抛异常)

 

* java.util.List接口 extends Collection接口
*
* List接口的特点:
* 1.有序的集合:存入元素和取出元素的顺序是一致的 存:abc 取:abc
* 2.有索引,可以使用普通for循环遍历集合
* 3.允许存储重复元素
*
* 因为有索引,所以包含了含有索引的特有方法
* void add(int index, E e)在指定的索引上添加元素
* E remove(int index)移除并返回,指定索引上的元素
* E set(int index, E e) 修改并返回值指定索引上的元素
* E get(int index) 返回列表中指定位置的元素。
*
* 使用带索引的方法,一定要防止索引越界异常:
* IndexOutOfBoundsException:索引越界异常(集合)
* StringIndexOutOfBoundsException:字符串索引越界异常
* ArrayIndexOutOfBoundsException:数组索引越界异常

    

 

* java.util.LinkedList集合 implments List接口
*
* LinkedList是链表结构:查询慢,增删快
* 是一个双向链表:存储元素和取出元素是有序的
*
* 有大量的操作首尾元素的方法
* 要使用LinkedList集合特有的方法,不能使用多态

api:

* E removeFirst() 移除并返回此列表的第一个元素。

* E pop() 移除并返回此列表的第一个元素。 此方法等效于 removeFirst()。
* E removeLast() 移除并返回此列表的最后一个元素。

* E getFirst() 返回此列表的第一个元素。
* E getLast() 返回此列表的最后一个元素。
* boolean isEmpty() 如果列表不包含元素,则返回 true。

* void addFirst(E e) 将指定元素插入此列表的开头。
* void push(E e) 将该元素插入此列表的开头。 此方法等效于 addFirst(E)。
* void addLast(E e) 将指定元素添加到此列表的结尾。相当于 add(E e)

 

 

* java.util.Set接口 extends Collection接口
* Set接口的特点:
* 1.不允许存储重复的元素
* 2.没有索引,不能使用普通for循环遍历,只能使用增强for/迭代器
* 里边的方法和Collection是一样的
*
* java.util.HashSet 集合 implments Set接口
* HashSet集合的特点:
* 1.不允许存储重复的元素
* 2.没有索引,不能使用普通for循环遍历,只能使用增强for/迭代器
* 3.自身的特点:是一个无序的集合,存入的元素和取出的元素顺序可能不同
*
* HashSet结构的特点:底层是一个哈希表(数组+链表)
* 即查询快,又增删快

* 哈希值:就是一个十进制的整数,由操作系统随机给出
*
* 在Object类中有一个方法叫hashCode(),可以获取到对象的哈希值
* int hashCode() 返回该对象的哈希码值。

 

* java.util.LinkedHashSet 集合 extends HashSet implments Set
* LinkedHashSet特点:
* 1.不允许重复重复元素
* 2.是一个有序的集合
* 结构:哈希表(数组+链表)+链表-->是一个双向链表,可以保证迭代的顺序

 

 

 

* java.util.Map<K,V>接口
* Map集合的特点:
* 1.是一个双列集合,有两个泛型,键key,值value
* 2.我们使用Map集合就需要为两个泛型赋值,而这两个泛型的类型可以相同,也可以不同
* 3.Map集合中的key不能重复,但是value可以重复,key是唯一的。
* 4.一个key对应一个value值
*
* java.uitl.HashMap集合 implments Map接口
* 1.底层是一个哈希表(数组+链表):即查询快,又增删快
* 2.因为只有一条链表,所以是一个无序的集合(存储元素和取出元素有可能不一致)

* 将键值对存储到集合中
* V put(K key, V value) K 作为健对象 V 作为值对象
* 存储的是重复的健,将原有的值覆盖
* 返回值一般情况下返回的是 null,存储重复健的时候,返回被覆盖之前的值

api:

* V put(K key, V value) K 作为健对象 V 作为值对象
* 存储的是重复的健,将原有的值覆盖
* 返回值一般情况下返回的是 null,存储重复健的时候,返回被覆盖之前的值

* V get(Object key),通过健对象,获取值对象,如果集合中没有这个健,返回 null

* V remove(Object key),根据指定的健,移除集合中的键值对,返回是被移除之前的值,如果集合中没有这个健,返回 null

* Set<K> keySet() 返回此映射中所包含的键的 Set 视图(将map中的key值都取出来放到set集合中)

 * Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射关系的 Set 视图。(将map中的映射关系Map.Entry<T,T>取出来)。。。。。。getKey()  getValue()

keySet() 和entrySet()便遍历map的两种方式。

 

HashMap存储自定义类型键值
* HashMap集合想要保证键不能重复:
* 作为键的对象,必须重写hashCode and equals方法

 

 java.util.LinkedHashMap<K,V> extends HashMap集合
特点:
* 1.数据结构:哈希表(数组+链表)+链表,是一个双向链表,可以保证迭代的顺序(有序)
* 2.key不能重复,value可以重复

 

* Map 的实现类 Hashtable
* 底层数据结构是哈希表,特点和 hashMap 是一样的
* Hashtable 是线程安全的集合,运行速度慢(单线程)
* HashMap 是线程不安全的集合,运行速度快(多线程)
*
* Hashtable 命运和 Vector 是一样的,从 JDK1.2 开始,被更先进的 HashMap 取代
*
* HashMap 允许存储 null 值,null 健
* hashtable 不允许存储 null 值,null 健
*
* Hashtable 他的孩子,子类 Properties 依然活跃在开发舞台

 

相关工具类

* java.util.Collections:操作集合的工具类
*
* 常用的方法:
* static void shuffle(List<?> list) 使用默认随机源对指定列表进行置换。
* 打乱List集合中的元素的顺序
*
* static void sort(List<T> list) 根据元素的自然顺序 对指定列表按升序进行排序。
* 对List集合中的元素进行升序排序
*
* static <T> int binarySearch(List<?>> list, T key) 折半查找
* 使用二分搜索法搜索指定列表,以获得指定对象。
* 参数:
list - 要搜索的列表。
key - 要搜索的键。
返回:
如果搜索键包含在列表中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。

* 数组工具类:Arrays
* static int binarySearch(Object[] a, byte key) 二分查找
* static void sort(Object[] a) 快速排序(升序)
* static String toString(boolean[] a) 返回指定数组内容的字符串表示形式。

 

posted @ 2018-08-22 10:56  JokerZM  阅读(90)  评论(0编辑  收藏  举报