- Collection
- List
- Set
- 泛型
- Map
- Collections
一、Collection
- 单列集合的顶层接口,表示一组对象,这些对象也称为Collection元素
- JDK不提供Collection接口的任何实现,它提供更具体的子接口(Set、List)的实现
- 创建Collection集合的对象
- 采用多态的方式: Collection c = new ArrayList()
-
Collection集合的遍历方式, Iterator : 迭代器,集合的专用遍历方式。
-
迭代器是通过集合的iterator方法得到的,所以我们说它是依赖于集合而存在的。
-
iterator中的常用方法:
-
E next(): 返回迭代中的下一个元素
-
boolean hasNext(): 判断是否还有下一个元素(迭代具有更多元素,则返回true)
-
常用方法:
-
boolean add(E e) 添加元素
-
boolean remove(Object o) 从集合中移除指定的元素
-
void clear() 清空集合中的元素
-
boolean contains(Object o) 判断集合中是否存在指定的元素
-
boolean isEmpty() 判断集合是否为空
-
int size() 集合的长度,也就是集合中元素的个数
二、List
-
List是有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置,用户可以通过整数索引访问元素,并搜索列表中元素。
-
与Set集合不同,列表允许重复的元素
-
特点:
-
有序:存储和取出的顺序一致
-
可重复:存储的元素可以重复
-
常用方法:
-
void add (int index, E element) 在集合的制定位置插入指定的元素
-
E remove(int index) 删除指定索引处的元素,返回被删除的元素
-
E set(int index, E element) 修改指定索引处的元素,返回被修改的元素
-
E get(int index) 返回制定索引处的元素
-
增强for循环: 简化数组和Collection集合的遍历
-
实现Iterable接口的类,允许其对象称为增强for语句的目标
-
它是JDK5之后出现的,其内部原理是一个Iterator迭代器
-
格式: for(元素数据类型 变量名: 数组或者Collection集合){ //在此处使用变量即可,该变量就是元素} }
-
List实现类特点:
-
常用子类:
-
ArrayList : 底层实现是数组,查询快,增删慢
-
LinkedList:底层实现是链表,查询慢,增删快
-
特有功能:
-
public void addFirst(E e) 在该列表开头插入指定元素
-
public void addLast(E e) 将指定元素追加到此列表的末尾
-
public E getFirst() 返回此列表中的第一个元素
-
public E getLast() 返回此列表中的最后一个元素
-
public E removeFirst() 删除并返回第一个元素
-
public E removeLast() 删除并返回最后一个元素
三、Set
-
继承 Collection集合,不包含重复元素的集合,是一个接口
-
没有带索引的方法,所以不能使用普通的for循环
-
哈希值:是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
-
Object类中有一个方法可以获取对象的哈希值
-
public int hashCode() 返回对象的哈希码值
-
默认情况下,不同对象的哈希值是不同的
-
通过此方法重写,可以实现不同对象的哈希值是相同的
-
实现类
-
HashSet
-
底层数据结构是哈希表【数组和链表实现】
-
对集合迭代顺序不做任何保证
-
没有带索引的方法,所以不能使用普通的for循环遍历,可以使用迭代和增强for
-
要保证元素唯一性,需要重写hashCode()和equals()
-
HashSet集合添加一个元素的过程
-
LinkedHashSet : 继承 HashSet类
-
底层数据结构:哈希表和链表实现set接口,具有可预测迭代次序
-
由链表保证元素 有序,也就是说元素的存储和取出顺序是一致的
-
由哈希表保证元素唯一,即没有重复元素
-
TreeSet
-
元素有序 : 这里的顺序不是指存储和取出的顺序,而是按照一定的规则进行排序,具体排序方式取决于构造方法
-
TreeSet(): 根据元素的自然排序进行排序
-
TreeSet(Comparator comparator): 根据指定的比较器进行排序
-
比较器排序,就是让集合构造方法接受Comparator的实现类对象,重写compare(T o1, T o2)方法 【实际运用最多】
-
重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写
-
没有带索引的方法,所以不能使用普通的for循环遍历,可以使用迭代和增强for
-
由于是Set集合,所以不包含重复元素的集合
四、泛型
JDK5中引入的特性,提供编译时类型安全检测机制,该机制允许在编译时检测到非法的类型
-
本质:参数化类型 【将类型由原来的具体类型参数化,然后在使用/调用时传入具体的类型】
-
分类
-
泛型类
-
泛型方法
-
泛型接口
-
类型通配符
- : 通配符
- : 通配符上限
-
List<? extends Number> : 表示类型时Nuber或者其子类型
- : 通配符下限
-
List<? super Number> : 表示类型时Nuber或者其父类型
五、Map
-
interface Map<K, V> : K 键的类型;V: 值的类型
-
将键映射到值的对象,Map不能包含重复的键,每个键可以映射到最多一个值
-
创建Map集合对象
-
多态的方式
-
具体的实现类 HashMap
-
Map集合的基本功能
-
V put(K key, V value) 添加元素
-
V remove(Object key) 根据键删除键值对元素
-
void clear() 移除所有的键值对元素
-
boolean containsKey(Object key) 判断集合是否包含指定的键
-
boolean containsValue(Object value) 判断集合是否包含指定的值
-
boolean IsEmpty() 判断集合是否为空
-
int size() 集合的长度,也就是集合中键值对的个数
-
Map集合的获取功能
-
V get(Object key) 根据键获取值
-
Set keySet() 获取所有键的集合
-
Collection values() 获取所有值的集合
-
Set<Map.Entry<K,V>> entrySet() 获取所有键值对对象的集合
六、Collections
Collection是一个顶层接口,而Collections 是一个类,可以看做是针对结合的工具操作类
-
是针对集合操作的工具类
-
Collections类的常用方法:
-
public static <T extends Comparable<? super T>> void sort(List list) :将制定的列表按升序排序
-
public static void reverse(List<?>list): 反转制定列表中元素的顺序
-
public static void shuffle(List<?>list) : 使用默认的随机源随机排列制定的列表
-
使用示例:
List<Integer> list = new ArrayList<Integer>() list.add(30); list.add(40); Collections.sort(list) // 调用Collections的sort方法进行排序