一、集合概述 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
-
- List: 特有方法:凡是可以操作角标的方法都是该体系特有的方法。
-
(1)增:add(index,element);
-
addAll(index,Collection);
-
(2)删:remove(index);
-
(3)改:set(index,element);
-
(4)查:get(index);
-
subList(from,to);
-
ListIterator();
-
备注:Iterator()只能对元素进行判断,取出,删除;
-
ListIterator()还可以进行添加,修改。
-
- 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 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 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 cmp):
-
反转比较器中的顺序;
-
(7)replaceAll(List 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的父类型。下限
-
七、其他知识点
-
- 迭代器:集合的取出元素的方式。(类似于电玩城夹娃娃的夹子)
-
- 数据结构:数据的存储方式。
-
- 增强for循环
-
格式:
-
for(数据类型 变量名:被遍历的集合(Collection)或者数组){}
-
- StaticImport 静态导入
-
当类名重名时,需要指定具体的包名。
-
当方法重名时,指定具体所属的对象或者类。