集合
集合
-
Collection(单列)
-
List(可重复)
-
ArrayList(底层数组,查询快、增删慢)
-
LinkedList(底层链表,查询慢、增删快)
-
-
Set(不可重复)
-
-
Map(双列)
遍历方式及并发修改异常
遍历方式:迭代器循环(list.iterator()),普通for循环(list.size()),增强for循环(E e : list)
并发修改异常:迭代器遍历时添加数据会抛出异常(删remove和改set不会)。解决办法:用普通for循环遍历。
(以下说明均可在Idea中用快捷键Ctrl+B 和 Alt+7中查询)
Collection
| 方法名 | 说明 |
|---|---|
| boolean add(E e) | 添加元素 |
| boolean remove(Object o) | 从集合中移除指定的元素 |
| void clear() | 清空集合中的元素 |
| boolean contains(Object o) | 判断集合中是否存在指定的元素 |
| boolean isEmpty() | 判断集合是否为空 |
| int size() | 集合的长度,也就是集合中元素的个数 |
List 集合的特有方法
| 方法名 | 说明 |
|---|---|
| void add(int index, E element) | 在此集合中的指定位置插入指定的元素 |
| E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
| E set(int index, E element) | 修改指定索引处的元素,返回被修改的元素 |
| E get(int index) | 返回指定索引处的元素 |
LinkedList 集合的特有功能
| 方法名 | 说明 |
|---|---|
| void addFirst(E e) | 在该列表开头插入指定的元素 |
| void addLast(E e) | 在指定的元素追加到此列表的末尾 |
| E getFirst() | 返回此列表中的第一个元素 |
| E getLast() | 返回此列表中的最后一个元素 |
| E removeFirst() | 从此列表中删除并返回第一个元素 |
| E removeLast() | 从此列表中删除并返回最后一个元素 |
Set 集合的特点
- 元素存取无序
- 没有索引,只能通过迭代器或者增强for循环遍历,不能用普通for循环遍历
- 不能存储重复元素
HashSet集合的特点
- 底层哈希表
- 迭代顺序不保证
- 没有索引,只能通过迭代器或者增强for循环遍历,不能用普通for循环遍历
- 不能存储重复元素
注意:HashSet集合保证元素唯一性,必须重写 hashcode() 和 equals() 方法!(快捷键Alt+Insert)
LinkedHashSet 集合特点
- 底层哈希表和链表,迭代次序可预测
- 链表保证元素有序,哈希表保证元素唯一
TreeSet
- 元素有序(自然排序、比较器排序)
- 没有索引,只能通过迭代器或者增强for循环遍历,不能用普通for循环遍历
- 不能存储重复元素
自然排序
让元素所属的类实现 Comparable 接口,重写 compareTo(T t) 方法
| return 正数 | this排在t后 |
|---|---|
| return 负数 | this排在t前 |
| return 0 | 不存储 |
比较器排序
让集合构造方法接收Comparator的实现类对象(匿名内部类创建对象),重写compare(T o1,T o2)方法,与自然排序相比 o1是this , o2是t
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() | 集合的长度,也就是集合中键值对的个数 |
获取功能
| 方法名 | 说明 |
|---|---|
| V get(Object key) | 根据键获取值 |
| Set |
获取所有键的集合 |
| Collection |
获取所有值的集合 |
| Set<Map.Entry<K, V>> entrySet() | 获取所有键值对对象的集合 |
遍历方式
-
方式一:
- 获取所有键的集合 Set
keySet() - 根据键去找值 get(Object key)
- 获取所有键的集合 Set
-
方式二:
-
获取所有键值对对象集合 Set<Map.Entry<K, V>> entrySet()
//引用类型 Map.Entry for (Map.Entry m : entries){ …… } -
用 getKey() 得到键,用 getValue() 得到值
-
注意:键值对的键值为自定义类型(如Student类)需重写 hashcode() 和 equals() 方法