• java —— 集合


    一、集合的概念

    集合可以看做是一个存储对象的容器,与数组不同的是集合可以存储不同类型的对象,但开发中一般不这样做。集合不能存储基本类型的对象,如果存储则需要将其转化为对应的包装类。

    二、集合的分类

    集合分为 Collection 和 Map 两大接口,具体的实现类继承自这两大接口。

    (一)Collection 接口

    Collection 接口下面有 3 个子接口,可以视为 3 个分支,常用的是 List 接口和 Set 接口:

    1、List 子接口

    特点:存放的数据有序且允许重复,主要的实现类有 ArrayList(重点)、LinkedList、Vector,这三个实现类用法相同,具体可见:java —— ArrayList 使用方法

    区别:LinkedList 增加了 .addFirst() 方法和 .addLast() 方法,分别表示在首尾添加。

    1. public static void main(String[] args)
    2. {
    3. LinkedList list=new LinkedList();
    4. list.add("Tom");
    5. list.add("Jerry");
    6. list.addFirst("Spike");
    7. list.addLast("Snoopy");
    8. System.out.println(list.get(0));
    9. System.out.println(list.get(list.size()-1));
    10. }

    2、Set 子接口

    特点:存放的对象无序且不允许重复,方法与 ArrayList 相同,但由于无序,因而没有 .get() 方法,常见的实现类有 HashSet、TreeSet。

    区别:HashSet 内部对象散列存放,完全无序;TreeSet 内部按照自然升序排列,与添加的先后顺序无关。自定义的类如果要在 TreeSet 内部实现自然排序,要么实现 Comparable 接口,要么自定义 Comparator 比较器。

    (二)Map 接口

    特点:Map 接口的实现类采用键值对的形式存储对象,主要的实现类是 HashMap、TreeMap、HashTable。虽然内部存储无序,但由于有键值对的存在,可以通过 .get(key k) 的方法获取元素。

    区别:HashMap 允许键出现一次“null”,值允许为空;TreeMap 内部按照键的自然升序排列,键不允许为“null”,值允许为空;HashTable 键和值都不允许为空。

    常用方法:

    .containsKey(key k)判断是否包含指定的键
    .containsValue(value v)判断是否包含指定的值
    .get(key k)根据键获取值
    .isEmpty()判断是否为空
    .keySet()返回一个set集合,包含所有的键
    .values()返回一个collection集合,包含所有的值
    .put(key k,value v)添加元素
    .putAll(Map m)将集合m添加至本集合
    .remove(key k,value v)根据键删除值
    .size()获取集合长度

    三、服务集合的三大工具

    (一)Iterator 迭代器

    用法可见:java —— ArrayList 使用方法 中的 “八、迭代器”。

    (二)Comparable 接口和 Comparator 比较器

    用法可见:java —— Comparable 接口和 Comparator 比较器

    (三)Collections 工具类

    Collections 是一个操作 List、Set、Map 等集合的工具类,它提供了一系列静态方法用于对集合执行查询、排序、修改等操作。

    1、排序

    ① 升序:Collections.sort(List list)

    ② 降序:Collections.reverse(List list)

    ③ 随即排列:Collections.shuffle(List list)

    1. public static void main(String[] args)
    2. {
    3. ArrayList ar=new ArrayList();
    4. ar.add(5);
    5. ar.add(4);
    6. ar.add(7);
    7. //升序
    8. Collections.sort(ar);
    9. Iterator ite1=ar.iterator();
    10. while(ite1.hasNext())
    11. {
    12. System.out.println(ite1.next());
    13. }
    14. //降序
    15. Collections.reverse(ar);
    16. Iterator ite2=ar.iterator();
    17. while(ite2.hasNext())
    18. {
    19. System.out.println(ite2.next());
    20. }
    21. //随即排列
    22. Collections.shuffle(ar);
    23. Iterator ite3=ar.iterator();
    24. while(ite3.hasNext())
    25. {
    26. System.out.println(ite3.next());
    27. }
    28. }

    2、 修改

    ① 交换:Collections.swap(List list,int i,int j)

    1. public static void main(String[] args)
    2. {
    3. ArrayList ar=new ArrayList();
    4. ar.add(5);
    5. ar.add(4);
    6. ar.add(7);
    7. Collections.swap(ar,0,2); //将索引0和2的元素进行交换
    8. Iterator ite=ar.iterator();
    9. while(ite.hasNext())
    10. {
    11. System.out.println(ite.next());
    12. }
    13. }

    ② 填充:Collections.fill(List list, Object obj)

    1. public static void main(String[] args)
    2. {
    3. ArrayList ar=new ArrayList();
    4. ar.add(5);
    5. ar.add(4);
    6. ar.add(7);
    7. Collections.fill(ar,10); //将集合内元素变成10
    8. Iterator ite=ar.iterator();
    9. while(ite.hasNext())
    10. {
    11. System.out.println(ite.next());
    12. }
    13. }

    3、使集合不可变

    1. public static void main(String[] args)
    2. {
    3. ArrayList ar=new ArrayList();
    4. ar.add(5);
    5. ar.add(4);
    6. ar.add(7);
    7. Collection cc=Collections.unmodifiableCollection(ar);
    8. //将集合不可变并返回一个集合cc,此时cc不能执行任何变更
    9. }

  • 相关阅读:
    微前端——qiankun(乾坤)实例
    基于HTML5和CSS3搭建一个Web网页(二)
    毫米波雷达2-雷达的工作模式
    0907小众网,续0906,SSM前后端项目,思路,报错(重点)
    【系统架构设计】架构核心知识: 3.5 Redis和ORM
    切记这三点 避免你的虾皮Shopee店铺被计分
    hiveSql 各时段观看直播人数
    BEV(Bird’s-eye-view)三部曲之一:综述
    【ROS 2 基础-常用工具】-7 Rviz仿真机器人
    DockerHub 镜像仓库原理
  • 原文地址:https://blog.csdn.net/firstgrass/article/details/139348221