集合
- 单列集合:Collection
- List:可重复
- ArrayList
- LinkedList
- Set:不可重复
- HashSet
- TreeSet
- List:可重复
- 双列集合:Map
- HashMap
Collection
JDK不提供接口实现,提供子接口Set和List实现
add(E e):添加元素
remove(Object o):移除元素
clear:清空元素 contains(Object o):判断集合中是否存在指定元素
isEmpty():判断集合是否为空 size():集合长度,也就是集合中元素的个数
遍历
Iterator:迭代器,集合的专用遍历方式
- Iterator
iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到 - 迭代器依赖于集合而存在的
Iterator常用方法:
- E next():返回迭代中的下一个元素
- boolean hasNext():如果迭代具有更多元素,返回true
List(有序可重复)
add(int index,E element):在集合指定位置插入指定元素
remove(int index):删除指定索引处的元素,返回被删除的元素
set(int index,E element):修改指定索引处的元素,返回被修改的元素
get(int index):返回指定索引处的元素
并发修改异常
并发修改异常:
- ConcurrentModificationException
产生原因:
- 迭代器遍历过程中,通过集合对象修改了集合中元素的长度,造成迭代器获取元素中判断预期修改值和实际修改值不一致
解决方案
- 用for循环遍历,然后用集合对象做对应的操作即可
ListIterator 列表迭代器
ListIterator允许程序员沿任一方向遍历列表,在迭代期间修改列表,并获取当前位置
ListIterator常用方法:
- E previous():返回迭代中的上一个元素
- boolean hasPrevious():如果迭代相反方向具有更多元素,返回true
- add(E e):将指定的元素插入列表
增强for循环
增强for:简化数组和Collection集合的遍历
格式:
for(元素数据类型 变量名 : 数组或Collection集合){ //在此处使用变量即可,该变量就是元素 }
内部本质是一个Iterator迭代器
List集合子类
- ArrayList:底层数据结构是数组,查询快,增删慢
- LinkedList:底层数据结构是链表,查询慢,增删快
- addFirst|addLast():在列表开头或结尾增加元素
- getFirst|getLast():返回第一个或最后一个元素
- removeFirst|removeLast():删除并返回第一个或最后一个元素
Set(不重复)没有索引,不能for遍历
Set<String> set = new HashSet<>()
创建对象HashSet:对集合的迭代顺序不做任何保证
哈希值
根据对象的地址或者字符串或数字算出来的int类型的数值
hashCode()
获取对象的哈希值默认情况下,不同对象的哈希值是不同的。
通过方法重写可以实现不同对象哈希值相同
HashSet
- 底层数据结构是哈希表
- 迭代顺序不做保证
- 没有索引方法,不能for循环遍历,可以fori
- 不重复
HashSet集合保证唯一性原理:
如果哈希表未初始化,就进行初始化;
根据对象的哈希值计算对象的存储位置,该位置无元素则存储元素;
存入元素和之前元素对比哈希值:
不同:继续执行,添加元素到集合
相同:调用对象的equals()方法比较:
false:继续执行,元素添加到集合
true:元素重复,不存储
若要重复:需重写HashCode和equals方法
哈希表
元素为链表的数组
LinkedHashSet
哈希表和链表组成
TreeSet
间接的实现了Set接口;自然排序
- 元素按照一定的规则进行排序,具体排序方式取决于构造方法
- TreeSet():根据元素自然排序进行排序
- TreeSet(Comparator comparator):根据指定比较器进行排序
- 没有带索引的方法,不能使用普通的for循环遍历
- 不包含重复元素
无参构造方法为自然排序
让元素所属的类实现Comparable接口,重写compareTo方法
重写方法时,注意排序规则按照要求的主要条件和次要条件
比较器排序Comparator
- 用TreeSet集合存储自定义对象,带参构造方法使用比较器排序
- 让集合构造方法接收Comparator的实现类对象,重写compare(T o1,T o2)方法
- 按照要求的主要次要排序条件
泛型
本质是参数化类型,所操作的数据类型被指定为一个参数
将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型
泛型格式:
- <类型>:指定一种类型的格式,看作形参
- <类型1,类型2>:指定多种类型的格式,用逗号隔开,看作形参
- 将来具体调用的时候给定的类型可以看成实参,并且实参的类型只能是引用数据类型
泛型类
- 格式:修饰符 class 类名<类型>{}
- 范例:public class Generic
{}
泛型方法
- 格式:修饰符 <类型> 返回值类型 方法名(类型 变量名){ }
- publc
void show(T t){ }
类型通配符
为了表示各种泛型List的父类,使用类型通配符
- >
- 表示各种类型的泛型的父类
- 通配符上限:<? extend 类型> 表示类型及其子类型
- 通配符下限:<? super 类型> 表示类型及其父类型
Map
概述:
- Interface Map<K,V> K:键的类型; V:值的类型
- 将键映射到值的对象;不能包含重复的键;每个键可以映射到最多一个值
put(K key,V value):添加元素
remove(Object key):根据键删除键值对元素
clear():移除所有键值对元素
containsKey(Object Key):判断集合是否包含指定的键
containsValue(Object value):判断集合是否包含指定的值
isEmpty():判断集合是否为空
size():集合的长度,也就是集合中键值对的个数
Map集合的获取功能:
- V get(Object key) 根据键获取值
- Set
keySet() 获取所有键的集合 - Collection
values() 获取所有值的集合 - Set<Map.Entry<K,V>> entrySet() 获取所有键值对对象的集合
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):使用默认的随机源随机排序指定的列表
可以留下你的信息哦(去Github_issues)😀😀😀
GitHub Issues