集合框架知识点总结
一、集合概述 Collection
* 1.List:元素是有序的,元素可以重复。因为该集合体系有索引。
* (1)ArrayList:底层的数据结构使用的是数组结构。
* 特点:查询速度很快,但是增删特别慢。线程不同步。
* (2)LinkedList:底层使用的是链表数据结构。
* 特点:增删速度很快,查询稍慢。
* (3)Vector:底层是数组数据结构。线程同步。被ArrayList替代了。
*
* 2.Set:元素是无序的(存入和取出的顺序不一致),元素不可以重复。
* Set集合的功能和Collection是一致的。
* (1)HashSet:底层数据结构是哈希表。线程是非同步的。
* HashSet是如何保证元素唯一性的呢?
* 答:是通过元素的两个方法:hashCode和equals来完成。
* (2)TreeSet:可以对Set集合中的元素进行排序。
* 底层数据结构是二叉树。
* 保证元素唯一性的依据:compareTo方法return 0.
* 二、集合框架-List
*
* 1. List: 特有方法:凡是可以操作角标的方法都是该体系特有的方法。
* (1)增:add(index,element);
* addAll(index,Collection);
* (2)删:remove(index);
* (3)改:set(index,element);
* (4)查:get(index);
* subList(from,to);
* ListIterator();
* 备注:Iterator()只能对元素进行判断,取出,删除;
* ListIterator()还可以进行添加,修改。
*
* 2. LinkedList:特有方法:
* (1)addFirst();
* addLast();
* (2)获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException.
* getFirst();
* getLast();
* (3)获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException.
* removeFirst();
* removeLast();
* 在JDK1.6出现了替代方法。
* (1)offerFirst();
* offerLast();
* (2)获取元素,但不删除元素。如果集合中没有元素,会返回null。
* peekFirst();
* peekLast();
* (3)获取元素,但是元素被删除。如果集合中没有元素,会返回null。
* pollFirst();
* 三、集合框架-Set
*
* TreeSet的两种排序方式:
*(1)第一种:
* 让元素自身具备比较性。元素需要实现comparable接口,覆盖compareTo方法。
* 这种方式也称为元素的自然顺序,或者叫做默认顺序。
*(2)第二种:
* 当元素自身不具备比较性时,或者具备的比较性不是所需要的,这时就需要让集合自身具备比较性。
* 在集合初始化时,就有了比较方式。定义一个类,实现Comparator接口,覆盖compare方法。
* 四、集合框架-Map
* 1.Map集合:该集合存储键值对,一对一对往里存,而且要保证键的唯一性。
* (1)添加:
* put(K key,V value);
* putAll(Map<? extends K,? extends V> m);
* (2)删除:
* clear();
* remove(Object key);
* (3)判断:
* containsValue(Object value);
* containsKey(Object key);
* isEmpty();
* (4)获取:
* value get(Object key);
* size();
* values();//获取map集合中所有的值
*
* 2.Map集合的两种取出方式
* (1)Set<k> keySet:
* 将map中所有的键存入到Set集合,因为Set具备迭代器,所以用迭代方式取出所有的键。
* 再根据get方法,获取每一个键对应的值。
* Map集合的取出原理:将map集合转成set集合,再通过迭代器取出。
* (2)Set<Map.Entry<k,v>> entrySet:
* 将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是:Map.Entry
* 其实Entry也是一个接口,它是Map接口中的一个内部接口
* 3.Map分类
* (1)Hashtable:底层是哈希表数据结构,不可以存入null键和null值。
* 该集合是线程同步的。JDK1.0后出现。效率低。
* (2)HashMap: 底层是哈希表数据结构,允许使用null键和null值。
* 该集合是线程不同步的。JDK1.2后出现。效率高。
* (3)TreeMap: 底层是二叉树数据结构。线程不同步。
* 可以用于给map集合中的键进行排序。
* 和Set很像。其实Set底层就是使用了Map集合。
* 五、集合框架工具类-Collections和Arrays
* 1.Collections常用方法:
* (1)sort(list<T> list,Comparator<? super T> c):
* 根据比较器排序给定集合;
* (2)max(Collection<? extends T> coll, Comparator<? super T> comp) :
* 返回给定集合的最大元素;
* (3)binarySearch(List<? extends Comparable<? super T>> list,T key):
* 根据二分查找获得指定元素的下标
* (4)shuffle(List<?> list):
* 随机置换list集合中的元素顺序(应用:扑克洗牌)
* (5)reverse(List<?> list):
* 反转集合中的元素顺序;
* (6)reverseOrder(Comparator<T> cmp):
* 反转比较器中的顺序;
* (7)replaceAll(List<T> list,T oldVal,T newVal):
* 替换;
* (8)fill(List<? super T> list,T obj):
* 将list集合中所有元素替换成指定元素
* 2.Arrays:用于操作数组的工具类。里面都是静态方法。
* (1)数组变成集合
* Arrays.toString(arr);
* Arrays.asList(arr);
* (2)集合变成数组:toArray方法
* 六、泛型
*
* 1.泛型:JDK1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制。
*
* 2.好处:
* (1)将运行时期出现的问题ClassCastException(类型转换异常)转移到了编译时期。
* 方便于程序员解决问题,让运行时期问题减少,安全。
* (2)避免了强制转换麻烦。
*
* 3.泛型格式:通过<>来定义要操作的引用数据类型。
*
* 4.泛型的限定:
* (1)? extends E:可以接收E类型或者E的子类型。上限
* (2)? super E:可以接收E类型或者E的父类型。下限
* 七、其他知识点
* 1. 迭代器:集合的取出元素的方式。(类似于电玩城夹娃娃的夹子)
*
* 2. 数据结构:数据的存储方式。
*
* 3. 增强for循环
* 格式:
* for(数据类型 变量名:被遍历的集合(Collection)或者数组){}
*
* 4. StaticImport 静态导入
* 当类名重名时,需要指定具体的包名。
* 当方法重名时,指定具体所属的对象或者类。
一、集合概述 Collection
* 1.List:元素是有序的,元素可以重复。因为该集合体系有索引。
* (1)ArrayList:底层的数据结构使用的是数组结构。
* 特点:查询速度很快,但是增删特别慢。线程不同步。
* (2)LinkedList:底层使用的是链表数据结构。
* 特点:增删速度很快,查询稍慢。
* (3)Vector:底层是数组数据结构。线程同步。被ArrayList替代了。
*
* 2.Set:元素是无序的(存入和取出的顺序不一致),元素不可以重复。
* Set集合的功能和Collection是一致的。
* (1)HashSet:底层数据结构是哈希表。线程是非同步的。
* HashSet是如何保证元素唯一性的呢?
* 答:是通过元素的两个方法:hashCode和equals来完成。
* (2)TreeSet:可以对Set集合中的元素进行排序。
* 底层数据结构是二叉树。
* 保证元素唯一性的依据:compareTo方法return 0.
* 二、集合框架-List
*
* 1. List: 特有方法:凡是可以操作角标的方法都是该体系特有的方法。
* (1)增:add(index,element);
* addAll(index,Collection);
* (2)删:remove(index);
* (3)改:set(index,element);
* (4)查:get(index);
* subList(from,to);
* ListIterator();
* 备注:Iterator()只能对元素进行判断,取出,删除;
* ListIterator()还可以进行添加,修改。
*
* 2. LinkedList:特有方法:
* (1)addFirst();
* addLast();
* (2)获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException.
* getFirst();
* getLast();
* (3)获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException.
* removeFirst();
* removeLast();
* 在JDK1.6出现了替代方法。
* (1)offerFirst();
* offerLast();
* (2)获取元素,但不删除元素。如果集合中没有元素,会返回null。
* peekFirst();
* peekLast();
* (3)获取元素,但是元素被删除。如果集合中没有元素,会返回null。
* pollFirst();
* pollLast();
* 三、集合框架-Set
*
* TreeSet的两种排序方式:
*(1)第一种:
* 让元素自身具备比较性。元素需要实现comparable接口,覆盖compareTo方法。
* 这种方式也称为元素的自然顺序,或者叫做默认顺序。
*(2)第二种:
* 当元素自身不具备比较性时,或者具备的比较性不是所需要的,这时就需要让集合自身具备比较性。
* 在集合初始化时,就有了比较方式。定义一个类,实现Comparator接口,覆盖compare方法。
* 四、集合框架-Map
* 1.Map集合:该集合存储键值对,一对一对往里存,而且要保证键的唯一性。
* (1)添加:
* put(K key,V value);
* putAll(Map<? extends K,? extends V> m);
* (2)删除:
* clear();
* remove(Object key);
* (3)判断:
* containsValue(Object value);
* containsKey(Object key);
* isEmpty();
* (4)获取:
* value get(Object key);
* size();
* values();//获取map集合中所有的值
*
* 2.Map集合的两种取出方式
* (1)Set<k> keySet:
* 将map中所有的键存入到Set集合,因为Set具备迭代器,所以用迭代方式取出所有的键。
* 再根据get方法,获取每一个键对应的值。
* Map集合的取出原理:将map集合转成set集合,再通过迭代器取出。
* (2)Set<Map.Entry<k,v>> entrySet:
* 将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是:Map.Entry
* 其实Entry也是一个接口,它是Map接口中的一个内部接口
* 3.Map分类
* (1)Hashtable:底层是哈希表数据结构,不可以存入null键和null值。
* 该集合是线程同步的。JDK1.0后出现。效率低。
* (2)HashMap: 底层是哈希表数据结构,允许使用null键和null值。
* 该集合是线程不同步的。JDK1.2后出现。效率高。
* (3)TreeMap: 底层是二叉树数据结构。线程不同步。
* 可以用于给map集合中的键进行排序。
* 和Set很像。其实Set底层就是使用了Map集合。
* 五、集合框架工具类-Collections和Arrays
* 1.Collections常用方法:
* (1)sort(list<T> list,Comparator<? super T> c):
* 根据比较器排序给定集合;
* (2)max(Collection<? extends T> coll, Comparator<? super T> comp) :
* 返回给定集合的最大元素;
* (3)binarySearch(List<? extends Comparable<? super T>> list,T key):
* 根据二分查找获得指定元素的下标
* (4)shuffle(List<?> list):
* 随机置换list集合中的元素顺序(应用:扑克洗牌)
* (5)reverse(List<?> list):
* 反转集合中的元素顺序;
* (6)reverseOrder(Comparator<T> cmp):
* 反转比较器中的顺序;
* (7)replaceAll(List<T> list,T oldVal,T newVal):
* 替换;
* (8)fill(List<? super T> list,T obj):
* 将list集合中所有元素替换成指定元素
* 2.Arrays:用于操作数组的工具类。里面都是静态方法。
* (1)数组变成集合
* Arrays.toString(arr);
* Arrays.asList(arr);
* (2)集合变成数组:toArray方法
* 六、泛型
*
* 1.泛型:JDK1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制。
*
* 2.好处:
* (1)将运行时期出现的问题ClassCastException(类型转换异常)转移到了编译时期。
* 方便于程序员解决问题,让运行时期问题减少,安全。
* (2)避免了强制转换麻烦。
*
* 3.泛型格式:通过<>来定义要操作的引用数据类型。
*
* 4.泛型的限定:
* (1)? extends E:可以接收E类型或者E的子类型。上限
* (2)? super E:可以接收E类型或者E的父类型。下限
* 七、其他知识点
* 1. 迭代器:集合的取出元素的方式。(类似于电玩城夹娃娃的夹子)
*
* 2. 数据结构:数据的存储方式。
*
* 3. 增强for循环
* 格式:
* for(数据类型 变量名:被遍历的集合(Collection)或者数组){}
*
* 4. StaticImport 静态导入
* 当类名重名时,需要指定具体的包名。
* 当方法重名时,指定具体所属的对象或者类。
附录