(API)集合框架

1.集合框架包含的内容


2.List的相关方法


3.ArrayList、LinkList集合的使用

3.1 ArrayList集合

  • 新增

    Dog ououDog = new Dog("欧欧", "雪娜瑞");
    Dog yayaDog = new Dog("亚亚", "拉布拉多");
    Dog meimeiDog = new Dog("美美", "雪娜瑞");
    Dog feifeiDog = new Dog("菲菲", "拉布拉多");
    ​
    List dogs = new ArrayList();//创建集合对象,把狗狗对象放进去
            dogs.add(ououDog);
            dogs.add(yayaDog);
            dogs.add(meimeiDog);
            dogs.add(2, feifeiDog); // 添加feifeiDog到指定位置 
            
    System.out.println("共计有" + dogs.size() + "条狗狗。");
    ​
    System.out.println("分别是:");
            for (int i = 0; i < dogs.size(); i++) {
                Dog dog = (Dog) dogs.get(i);
                System.out.println(dog.getName() + "\t"+ dog.getStrain());
            }

  • 删除指定位置的小狗,使用remove()方法

    dogs.remove(0);
  • 删除指定的小狗

    dogs.remove(feifeiDog);
  • 判断是否包含指定的小狗,使用contains()方法

    if(dogs.contains(meimeiDog))
                System.out.println("\n集合中包含美美的信息");
            else
                System.out.println("\n集合中不包含美美的信息");
        }

  • List接口常用方法

    方法名说 明
    boolean add(Object o)在列表的末尾顺序添加元素,起始索引位置从**0开始**
    void add(int index,Object o)在指定的索引位置添加元素。索引位置必须介于**0和列表中元素个数之间**
    int size()返回列表中的元素个数
    Object get(int index)返回指定索引位置处的元素。取出的元素是**Object类型,使用前需要进行强制类型转换**
    boolean contains(Object o)判断列表中是否存在指定元素
    boolean remove(Object o)从列表中删除元素
    Object remove(int index)从列表中删除指定位置元素,起始索引位置从**0开始**

3.2 LinkedList集合的使用

  • 新增

    … // 创建多个狗狗对象
            
            LinkedList dogs = new LinkedList();
            dogs.add(ououDog);
            dogs.add(yayaDog);
            dogs.addLast(meimeiDog);
            dogs.addFirst(feifeiDog);
    • 获取第一条小狗信息,使用getFirst()方法

              Dog dogFirst= (Dog)dogs.getFirst();
              System.out.println("第一条狗狗昵称是"+dogFirst.getName() );
    • 获取最后一条小狗的信息,使用getLast()方法

              Dog dogLast= (Dog)dogs.getLast();
              System.out.println("最后一条狗狗昵称是"+dogLast.getName());
    • 删除第一条狗狗和最后一条,使用removeFirst()和removeLast()方法

      dogs.removeFirst();
      dogs.removeLast();
  • LinkedList的特殊方法

    方法名说 明
    void addFirst(Object o)在列表的首部添加元素
    void addLast(Object o)在列表的末尾添加元素
    Object getFirst**()**返回列表中的第一个元素
    Object getLast**()**返回列表中的最后一个元素
    Object removeFirst**()**删除并返回列表中的第一个元素
    Object removeLast**()**删除并返回列表中的最后一个元素


4.Set集合

4.1 介绍
  • Set 是一种集合接口,它继承自 Collection 接口,用于存储一组不重复的元素。

4.2 特点
  • 元素唯一性Set 集合中不允许存储重复的元素

  • 无序性(部分实现)Set 集合通常不保证元素的插入顺序,即元素在集合中的存储顺序可能与插入顺序不同。

  • 不支持索引访问:与 List 集合不同,Set 集合不支持通过索引来访问元素,因为它没有维护元素的顺序。

4.3 常用实现类
  • HashSet:哈希
    • 基于哈希表实现,它使用 HashMap 来存储元素。当向 HashSet 中添加元素时,会根据元素的哈希码来确定存储位置。

    • 性能特点:插入、删除和查找操作的时间复杂度通常为 O (1),性能较高。

       public static void main(String[] args) {
              Set<String> set = new HashSet<>();
              set.add("apple");
              set.add("banana");
              set.add("cherry");
              System.out.println(set); // 输出: [apple, banana, cherry]
              set.add("apple"); // 尝试添加重复元素
              System.out.println(set); // 输出: [apple, banana, cherry],重复元素未被添加
          }

  • TreeSet
    • 基于红黑树(一种自平衡的二叉搜索树)实现,它会对元素进行自然排序(元素必须实现 Comparable 接口)或根据指定的比较器进行排序。

    • 性能特点:插入、删除和查找操作的时间复杂度为 O (log n),因为需要维护树的平衡。

      public static void main(String[] args) {
              Set<Integer> set = new TreeSet<>();
              set.add(3);
              set.add(1);
              set.add(2);
              System.out.println(set); // 输出: [1, 2, 3],元素按升序排列
          }

  • LikedHashSet
    • 继承自 HashSet,它使用链表来维护元素的插入顺序,因此可以保证元素按照插入的顺序进行遍历。

    • 性能特点:插入、删除和查找操作的时间复杂度与 HashSet 相同,为 O (1),但由于需要维护链表,会额外占用一些内存

      public static void main(String[] args) {
              Set<String> set = new LinkedHashSet<>();
              set.add("apple");
              set.add("banana");
              set.add("cherry");
              System.out.println(set); // 输出: [apple, banana, cherry],元素按插入顺序排列
          }

  • 常用方法

    • add(E e):向集合中添加元素,如果元素已经存在,则添加失败,返回 false;否则返回 true

    • remove(Object o):从集合中移除指定的元素,如果元素存在,则移除成功,返回 true;否则返回 false

    • contains(Object o):判断集合中是否包含指定的元素,如果包含则返回 true;否则返回 false

    • size():返回集合中元素的数量。

    • isEmpty():判断集合是否为空,如果为空则返回 true;否则返回 false

    • clear():清空集合中的所有元素。

  • 遍历方式

    • 使用迭代器(Iterator)

      public static void main(String[] args) {
              Set<String> set = new HashSet<>();
              set.add("apple");
              set.add("banana");
              set.add("cherry");
      
              Iterator<String> iterator = set.iterator();
              while (iterator.hasNext()) {
                  System.out.println(iterator.next());
              }
          }


5.Map集合接口

5.1实现类: HashMap
  • Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作

    • 存储,使用的是put()方法

      Map countries = new HashMap();
      countries.put("CN", "中华人民共和国");
      countries.put("RU", "俄罗斯联邦");
      
      
    • 获取指定元素的值,get()

      String country = (String) countries.get("CN");
      		System.out.println("CN对应的国家是:" + country);
      
      
    • 获取Map元素个数,size()

      System.out.println("Map中共有"+countries.size()+"组数据");
      
    • 删除指定元素,remove()

      countries.remove("FR");
      
    • 判断是否包含指定元素,containsKey()

      System.out.println("Map中包含FR的key吗?" + 
      				countries.containsKey("FR"));
      
      
    • 显示键集、值集、键值对集

      System.out.println( countries.keySet() ) ;
      System.out.println( countries.values() );
      System.out.println( countries );
      
      

  • Map接口常用方法
    方法名说 明
    Object put(Object key, Object val**)**以**“键-值对”的方式进行存储**
    Object get (Object key)根据键返回相关联的值,如果不存在指定的键,返回**null**
    Object remove (Object key)删除由指定的键映射的**“键-值对”**
    int size()返回元素个数
    Set keySet ()返回键的集合
    Collection values ()返回值的集合
    boolean containsKey (Object key)如果存在由指定的键映射的**“键-值对”,返回true**


6.迭代器Iterator的使用

6.1 什么是迭代器

  • 在Java中,迭代器(Iterator)是一种设计模式和接口,它为集合类提供了一种统一的方式来遍历其中的元素,而不需要关心集合的具体实现。

6.2 迭代器的作用

  • 迭代器的主要作用是提供一种统一的、不依赖于具体集合实现的遍历机制。使用迭代器可以让我们以相同的方式遍历不同类型的集合(如 ListSet 等),提高了代码的可复用性和可维护性。同时,迭代器还提供了在遍历过程中安全地删除元素的功能。

6.3 迭代器接口(java.util.Iterator)

  • Iterator 接口位于 java.util 包中,它定义了三个主要的方法:

    • hasNext():用于判断集合中是否还有下一个元素,如果有则返回 true,否则返回 false

    • next():返回集合中的下一个元素,并将迭代器的位置向后移动一位。如果没有下一个元素,调用该方法会抛出 NoSuchElementException 异常。

    • remove():移除迭代器最后返回的元素。该方法只能在每次调用 next() 方法之后调用一次,如果违反此规则,会抛出 IllegalStateException 异常。

6.4 迭代器的使用

  • 使用迭代器遍历ArrayList的示例

public static void main(String[] args) {
        // 创建一个 ArrayList 并添加元素
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("cherry");

        // 获取迭代器
        Iterator<String> iterator = list.iterator();

        // 使用迭代器遍历集合
        while (iterator.hasNext()) {
            String element = iterator.next();
            System.out.println(element);
        }
    }
  • 在遍历过程中删除元素

    • 迭代器的 remove() 方法允许在遍历集合的过程中安全地删除元素。

       Iterator<String> iterator = list.iterator();
              while (iterator.hasNext()) {
                  String element = iterator.next();
                  if (element.equals("banana")) {
                      iterator.remove(); // 删除当前元素
                  }
              }
              System.out.println(list); // 输出: [apple, cherry]

6.5 迭代器的局限性

  • 单向遍历:标准的 Iterator 只能单向遍历集合,即只能从前往后遍历,不能反向遍历。

  • 功能有限:它只提供了基本的遍历和删除元素的功能,没有提供插入元素等其他操作的方法。

6.6 增强的迭代器

  • 对于 List 集合,Java 还提供了 ListIterator 接口,它是 Iterator 的子接口,除了具备 Iterator 的功能外,还支持双向遍历、在遍历过程中插入元素等操作。

public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("cherry");

        ListIterator<String> listIterator = list.listIterator();

        // 正向遍历
        while (listIterator.hasNext()) {
            System.out.println(listIterator.next());
        }

        // 反向遍历
        while (listIterator.hasPrevious()) {
            System.out.println(listIterator.previous());
        }
    }


7.泛型集合

7.1 什么是泛型集合

  • 概念

    • 在 Java 中,集合是用于存储和管理一组对象的容器,例如 ListSetMap 等。而泛型是 Java 5 引入的一项特性,它允许在定义类、接口或方法时使用类型参数。泛型集合就是在集合中使用泛型,通过在创建集合对象时指定具体的元素类型,使得集合只能存储该类型的元素。

7.2 特点

  • 类型安全

    • 在没有泛型的情况下,集合可以存储任意类型的对象,这可能会导致在运行时出现 ClassCastException 异常。使用泛型集合可以在编译时进行类型检查,确保集合中只存储指定类型的元素,从而避免了运行时的类型转换错误。

  • 代码可读性和可维护性

    • 通过指定集合中元素的类型,代码的意图更加清晰,其他开发者可以更容易理解集合中存储的数据类型。同时,也减少了类型转换的代码,使代码更加简洁和易于维护。

  • 消除强制类型转换

    • 在使用非泛型集合时,从集合中取出元素需要进行强制类型转换。而使用泛型集合,编译器会自动处理类型转换,使得代码更加简洁

7.3泛型的使用

  • List泛型集合

    public static void main(String[] args) {
            // 创建一个只能存储 String 类型元素的 List
            List<String> stringList = new ArrayList<>();
            stringList.add("apple");
            stringList.add("banana");
            // stringList.add(123); // 编译错误,不能添加非 String 类型的元素
    
            // 遍历集合,无需进行类型转换
            for (String fruit : stringList) {
                System.out.println(fruit);
            }
        }

  • Set泛型集合

    public static void main(String[] args) {
            // 创建一个只能存储 Integer 类型元素的 Set
            Set<Integer> integerSet = new HashSet<>();
            integerSet.add(1);
            integerSet.add(2);
            // integerSet.add("three"); // 编译错误,不能添加非 Integer 类型的元素
    
            // 遍历集合
            for (Integer number : integerSet) {
                System.out.println(number);
            }
        }

  • Map泛型集合

    public static void main(String[] args) {
            // 创建一个键为 String 类型,值为 Integer 类型的 Map
            Map<String, Integer> scoreMap = new HashMap<>();
            scoreMap.put("Alice", 85);
            scoreMap.put("Bob", 90);
            // scoreMap.put(123, "C"); // 编译错误,键和值的类型不匹配
    
            // 遍历 Map
            for (Map.Entry<String, Integer> entry : scoreMap.entrySet()) {
                String name = entry.getKey();
                Integer score = entry.getValue();
                System.out.println(name + ": " + score);
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值