JavaSe学习总结_Collection篇
(一)集合和数组的区别:
1 长度的区别
a 数组长度是固定的
b 集合长度是可变的
2 存储数据类型的区别
a 数组既可以存储基本数据类型,也可以存储引用数据类型
b 集合只能存储引用数据类型
3 存储元素的区别
a 数组存储同一种类型的元素
b 集合可以存储多个类型的元素
(二)Collection集合的子接口
1 List:
1.1 ArrayList:底层为数组,查询快,增删慢,线程不安全,效率高
1.2 LinkedList:底层为链表,增删快,查询慢,线程不安全,效率高
1.3 Vector:底层为数组,查询快,增删慢,线程安全,效率低
2 Set:
2.1 HashSet:底层为哈希表,元素不重复,无序,线程不安全,效率高
2.2 LinkedHashSet:底层为哈希表和链表,元素不重复,有序,线程不安全,效率高
2.3 TreeSet:底层数为二叉树,元素不重复,可以进行排序,线程不安全,效率高
(三)Collection的具体功能
1 添加功能
boolean add(Object obj):把指定元素添加到该集合中
boolean addAll(Collection c):把指定集合中的所有元素添加到该集合中
2 删除功能
void clear():删除该集合中所有元素
boolean remove(Object o):从该集合中删除指定元素
boolean removeAll(Collection c):从该集合中删除指定集合中的元素,删除一个以上就算删除
3 判断功能
boolean contains(Object o):判断该集合中是否包含指定的元素
boolean containsAll(Collection c):判断该集合中是否包含指定的集合元素,包含所有才算包含
boolean isEmpty():判断该集合是否为空
4 获取功能
int size():获取该集合中元素的个数
Iterator<E> iterator():迭代器,遍历集合中使用
5 交集功能
boolean retainAll(Collection c):获取两个集合的交集元素
6 转换功能
Object[] toArray():将集合转换为数组
(四)泛型:一种把数据类型明确工作推迟到创建对象或调用方法时才去明确的一种机制(JDK1.5之后新特性)
1 语法:<数据类型,数据类型,......>
注:数据类型只能为引用数据类型
2 泛型的好处:
a 把问题提前到了编译期
b 避免了向下转型
3 泛型可以定义在:
接口上:public interface Demo1<A,B>{}
类上:public class Demo2<A,B> implements Demo1<A,B>
方法上:public B show(A a){}
4 通配符
<?>:任意类型
? extends E:向下限定,右边的泛型只能是他的本身,或者他的子类
? super E:向上限定,右边的泛型只能是他的本身,或者他的父类
(五)增强for循环
格式:for(容器中的数据类型 以及元素的变量名 : 容器名){}
如:for(Student stu : students)
(六)可变参数
格式:修饰符 返回值类型 方法名(数据类型… 变量名){}
如:public int show(int... num){}
(七)遍历集合
1 把一个集合转成数组进行遍历
使用Object[] toArray()方法
2 用迭代器遍历
使用Iterator<E> iterator()方法
迭代器中成员方法:
boolean hasNext():如果仍有元素可以迭代,则返回 true
E next():返回迭代的下一个元素
代码:
运行结果:
(八)List接口
1 成员方法:
void add(int index,E element):在指定索引处添加元素
E remove(int index):移除指定索引处的元素 返回的是移除的元素
E get(int index):获取指定索引处的元素
int size():返回裂变中元素个数
2 遍历:
ListIterator<E> listIterator():返回此列表元素的列表迭代器
代码:
运行结果:
3 实现类
3.1 ArrayList
int indexOf (Object o)返回此列表中指定元素的第一个出现的索引,或 如果此列表不包含元素返回 - 1
void sort (Comparator < ? super E > c):用Comparator排序
List<E> subList ( int fromIndex, int toIndex):返回指定范围,包前不包后
Object[] toArray (): 把该集合转为数组
3.2 Vector
E elementAt(int index):返回指定索引处的组件
Enumeration<E> elements():返回此向量的组件的枚举
E firstElement():返回第一个组件(在指数 0项目)这个载体
E lastElement():返回向量的最后一个组件
3.3 LinkedList
void addFirst(E e):将指定元素添加到列表开头
void addLast(E e):将指定元素添加到列表结尾
E getFirst():获取列表第一个元素
E getLast():获取裂变最后一个元素
E removeFirst():删除列表第一个元素
E removeLast():删除列表最后一个元素
(九)Set接口:
1 HashSet:
元素无序且唯一,哈希表保证其唯一性,通过重写hahsCode()方法和equals()方法来保证其唯一性
代码:
运行结果:
2 LinkedHashSet:链表保证有序 哈希表保证元素唯一
3 TreeSet:元素唯一且按特定顺序排列,底层数据结构为二叉树
3.1 自然排序:必须实现Comparable接口,重写compareTo()方法
代码:
运行结果:
3.2 比较器排序:
匿名内部类方式,重写Comparator连接口中的compare()方法
代码:
运行结果:
(十)Collections工具类
成员方法:
public static <T > void sort (List < T > list):排序, 默认按照自然顺序
public static <T > int binarySearch (List < ? > list, T key):二分查找
public static <T > T max(Collection < ? > coll):获取最大值
public static void reverse (List < ? > list):反转
public static void shuffle (List < ? > list):随机置换