集合
单列集合 Collection
结构图

Collection常用方法
- add(Object o) 添加元素
- remove(Object o) remove(int index) 删除指定元素或者指定索引的元素
- contains(Object o) 查看是否包含指定元素
- size() 获取元素个数
- isEmpty() 判断集合是否为空
- clear() 清空
- addAll(Collection c) 添加整个集合
- contains(Collection<> c) 查看是否包含该集合
- removeAll(Collection<> c) 删除指定集合(多个元素)
迭代器 iterator
public class CollectionDemo02 {
@SuppressWarnings("all")//抑制警告
public static void main(String[] args) {
Collection c = new ArrayList();
c.add(new Book("红楼梦",1));
c.add(new Book("西游记",2));
c.add(new Book("水浒传",3));
c.add(new Book("三国演义",4.4));
Iterator iterator = c.iterator();
while (iterator.hasNext()) {
Object obj = iterator.next();
System.out.println("obj:"+obj);
}
}
}
class Book{
private String name;
private double price;
public Book(String name, double price) {
this.name = name;
this.price = price;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", price=" + price +
'}';
}
}
增强for循环 简化iterator (也可用于数组)
Collection c = new ArrayList();
c.add(new Book("红楼梦",1));
c.add(new Book("西游记",2));
c.add(new Book("水浒传",3));
c.add(new Book("三国演义",4.4));
for (Object o : c) {
System.out.println(o);
}
List
- 元素有序 且可重复
- 支持索引
List常用方法
- add(int index,Object o) 在指定位置添加元素
- addAll(int index,Collection c) 在指定位置添加集合
- get(int index) 获取指定位置的元素
- indexOf(Object o) 返回该元素在集合中首次出现的位置 没有返回-1
- lastIndexOf(Object o) 最后一次出现该元素的位置
- set(int index,Object o) 修改指定位置的元素 相当于替换
- subList(int start,int end) 返回start到end的元素子集合 左闭右开
List的常用实现类
ArrayList
- 基本等同于Vector 线程不安全
- 底层维护了一个element数组 Object[]
- 使用无参构造时 数组初始容量为0 扩容时第一次增加10 后续依次扩大当前容量的1.5倍
- 有参构造时 第一次容量为参数大小 后续扩容为当前容量的1.5倍
LinkedList
- 底层实现了双向链表和双端队列
- 可以添加任意元素 可以重复
- 线程不安全
- 添加和删除的效率较高
Vector
-
底层也是对象数组
-
线程安全的
-
使用无参构造时 数组初始容量为10 后续依次扩大当前容量的2倍
-
有参构造时 第一次容量为参数大小 后续扩容为当前容量的2倍
List的选择
- 改查的操作多 选用ArrayList 效率更高 (索引)80%-90%
- 增删的操作多 选用LinkedList
Set
- 元素无序 不支持重复数据
- 不支持索引
- 虽然无序 但是取数据的顺序是固定的 不会一直变化
常用方法
和Collection一致
- add() 添加元素
- remove(Object obj)删除对象
注:遍历时不能使用普通for循环 因为没有索引
Set的常用实现类
Hashset
底层是HashMap(存储结构是 数组+链表+红黑树)
public HashSet() {
map = new HashMap<>();
}
LinkedHashSet
- HashSet 的子类
- 底层是LInkedHashMap 存储结构是数组+双向链表
- 根据hashcode决定存放位置 同时通过链表维护次序 看上去像是有序的
- 不能存放重复值
双列集合 Map
结构图

常用方法
- put 添加键值对
- remove 根据key删除映射关系
- get 根据键获取值
- size 获取键值对个数
- isEmpty 判断个数是否为0
- clear 清除
- containsKey 是否包含key
遍历方式
- keySet + 增强for
- keySet+ 迭代器
- map.values() 获取所有的值再遍历
- 通过Entry<K,V>来获取 getKey getValue
常用实现类
HasMap
-
线程不安全 效率高
-
用于保存具有映射关系的数据 键值对
-
Map中的key和value可以是任意引用数据类型 会封装到HashMap$Node对象中
-
Map中的key不允许重复 value可以重复
-
key和value都可以为null
-
常用String类最为key
-
key和value为一对一的关系 通过指定的key可以找到对应的值
-
当有相同的key时 后面的value会覆盖前面的value
HashTable
- 键值不能为null
- 使用方法类似HashMap
- 线程安全
- 效率较低
Properties
- 继承了HashTable
- 使用方法类似HashTable
- 可用于读取和修改xxx.properties的配置文件
集合选型规则
-
先判断存储的类型是一组对象还是一组键值对
-
一组对象:Collection接口
-
允许重复 :List
增删多:LinkedList【底层维护了一个双向链表】
改查多:ArrayList【底层维护了Object类型的可变数组】
多线程操作:Vector
-
不允许重复:Set
无序:HashSet【底层是HashMap 维护了一个哈希表 存储结构为数组+链表+红黑树】
排序:TreeSet
插入和取出顺序一致:LinkedHashSet 【底层维护的是数组+双向链表】
-
-
一组键值对:Map
- 键无序 :HashMap 【底层是哈希表 jdk7 数组+链表 jdk8 数组+链表+红黑树】
- 键有序:TreeMap
- 键插入和取出顺序一致:LinkedHashMap
- 读取properties:Properties
Collections工具类
- Collections是一个操作Set、List和Map等集合的工具类
- Collections中提供了一系列静态的方法对集合进行排序、查询和修改等操作
常用方法
- 排序类方法
- revers(List list) 反转元素顺序
- shuffle(List lsit) 对集合元素进行随机排序
- sort(List list) 升序排序
- sort(List list,Compartor) 自定义排序
- swap(Liast list,int i,int j) 交换i和j位置的元素
- 查找、替换
- max(Collection c) 返回最大的元素
- min(Collection c) 返回最小的元素
- min(Collection c,Compartor) 自定义比较规则 返回最小的元素
- frequency(Collection c,Object) 指定元素出现的次数
- copy(List dest,List src) 将src的元素复制到dest中 目标数组的大小必须比源数组大
- replaceAll(List lsit,Object oldVal,Object newVal) 使用新元素替换之前的元素
本文详细介绍了Java集合框架,包括单列集合Collection(如List、Set)和双列集合Map的结构、常用方法、实现类特点。还阐述了集合选型规则,如根据增删改查操作选择合适的List实现类。此外,介绍了Collections工具类对集合的排序、查询和修改等操作。
1254

被折叠的 条评论
为什么被折叠?



