JAVA集合

本文详细介绍了Java集合框架,包括单列集合Collection(如List、Set)和双列集合Map的结构、常用方法、实现类特点。还阐述了集合选型规则,如根据增删改查操作选择合适的List实现类。此外,介绍了Collections工具类对集合的排序、查询和修改等操作。

集合

单列集合 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接口

    1. 允许重复 :List

      ​ 增删多:LinkedList【底层维护了一个双向链表】

      改查多:ArrayList【底层维护了Object类型的可变数组】

      ​ 多线程操作:Vector

    2. 不允许重复:Set

      ​ 无序:HashSet【底层是HashMap 维护了一个哈希表 存储结构为数组+链表+红黑树】

      ​ 排序:TreeSet

      ​ 插入和取出顺序一致:LinkedHashSet 【底层维护的是数组+双向链表】

  • 一组键值对:Map

    1. 键无序 :HashMap 【底层是哈希表 jdk7 数组+链表 jdk8 数组+链表+红黑树】
    2. 键有序:TreeMap
    3. 键插入和取出顺序一致:LinkedHashMap
    4. 读取properties:Properties

Collections工具类

  • Collections是一个操作Set、List和Map等集合的工具类
  • Collections中提供了一系列静态的方法对集合进行排序、查询和修改等操作

常用方法

  1. 排序类方法
  • revers(List list) 反转元素顺序
  • shuffle(List lsit) 对集合元素进行随机排序
  • sort(List list) 升序排序
  • sort(List list,Compartor) 自定义排序
  • swap(Liast list,int i,int j) 交换i和j位置的元素
  1. 查找、替换
  • 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) 使用新元素替换之前的元素
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值