Java小白入门到实战应用教程-集合框架

前言

在java中我们用于存储表示一个值可以通过定义变量,存储多个值可以通过数组。

但是数组操作起来是有点麻烦的,而且一旦逻辑考虑的不全面就会产生一些未知的异常。

所以Java语言中提出了集合框架,集合类(Collection Framework)是Java API的一个重要组成部分,它提供了一套用于存储和操作对象集合的接口和类。

正文

Java集合类是一个高度统一的框架,它包含了一系列的接口和类,用于表示和操作集合。这些集合可以是不同大小的对象组,且对象可以是不同的类型。集合类被设计用来存储和操作对象,而不需要关注对象的存储细节,从而简化了编程工作。

核心类

Java集合类框架主要由以下几个核心接口组成:

  1. Collection:这是所有集合类的根接口,定义了集合的基本操作,如添加(add)、删除(remove)、遍历(iterator)等。
  2. List:继承自Collection接口,表示一个有序集合,可以包含重复的元素。List接口提供了按索引访问元素的方法,如get(int index)set(int index, E element)
  3. Set:同样继承自Collection接口,但不保证集合的迭代顺序,且不允许包含重复的元素。Set接口的实现类(如HashSet、TreeSet)提供了不同的存储机制。
  4. Map:将键映射到值的对象,一个键可以最多映射到最多一个值。Map接口的实现类(如HashMap、TreeMap)提供了基于键值对的存储和检索功能。

基于上面的核心接口,Java提供了很多上面接口的实现类,常见的有:

  • ArrayList:基于动态数组实现的List接口,允许快速随机访问元素,但在列表的开头和中间插入或删除元素时可能较慢。
  • LinkedList:基于链表实现的List接口,提供了高效的插入和删除操作,但在随机访问元素时可能较慢。
  • HashSet:基于哈希表实现的Set接口,不保证集合的迭代顺序,且不允许包含重复的元素。
  • TreeSet:基于红黑树实现的Set接口,能够确保集合元素处于排序状态。
  • HashMap:基于哈希表实现的Map接口,允许使用null键和null值。它不保证映射的顺序,但允许快速的键值对查找。
  • TreeMap:基于红黑树实现的Map接口,能够确保映射按照键的自然顺序或创建映射时提供的Comparator进行排序。
应用场景

以接口类型去区分,接口下的实现类同理

  1. List:适用于需要维护元素插入顺序的场景,如用户列表、订单列表等。
  2. Set:适用于不允许出现重复元素的场景,如去重操作、检查元素是否存在等。
  3. Map:适用于需要根据键来快速检索值的场景,如用户信息缓存、配置项存储等。
样例

我们分别针对这三类接口,每类接口挑选一个常用的实现类去写一段样例代码:

首先针对List接口的ArrayList实现类,我们通过下面一段代码演示一下集合的创建,增加数据、删除数据、循环遍历数据。

public class CollectDemo {

    public static void main(String[] args) {
        //list接口类型的集合
        //创建一个ArrayList类型的集合,用于存放String类型的数据
        List<String> list = new ArrayList<>();
        //往集合list中添加数据,通过add方法
        list.add("张三");
        list.add("李四");
        list.add("王五");
        //集合中数据存放的位置也类似数组,下标从0开始
        //删除下标为0的数据
        list.remove(0);
        //获取集合中数据的个数
        int size = list.size();
        //打印集合中的数据,通过循环遍历打印
        for (String name : list){
            System.out.println(name);
        }
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.

其次关于Set接口应用的api基本上跟List相似。我们还是通过一段代码演示一下创建,增加数据、删除数据等动作。

public class CollectDemo {
    public static void main(String[] args) {
        //Set接口
        Set<String> set = new HashSet<>();
        //往集合Set中添加数据,通过add方法
        set.add("张三");
        set.add("李四");
        set.add("王五");
        
        //删除某个数据
        set.remove("张三");
        //获取集合中数据的个数
        int size1 = set.size();
        //打印集合中的数据,通过循环遍历打印
        for (String name : set){
            System.out.println(name);
        }
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

下面我们再来看Map接口,Map跟List和Set是有点区别的,Map中的数据格式是Key-value形式的,是键值对的形式进行存储的,然后通过键值可以获取到对应的值。下面我们还是通过一段代码演示一下如何使用。

public class CollectDemo {

    public static void main(String[] args) {
        //Map接口
        //定义一个存储key为String类型,value为Integer类型的Map
        Map<String,Integer> map = new HashMap<>();
        //往map中插入数据,key  value格式,存一下每个人的年龄
        map.put("张三",20);
        map.put("李四",30);
        map.put("王五",25);
        //删除key为李四的数据
        map.remove("李四");
        //获取map中的数的个数
        int size = map.size();
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

总结

关于集合框架一些简单应用通过上面的例子已经给大家都演示了,同一类型的接口下的实现类的使用都基本相似,所以我们只找了最常用的几个实现类做了演示。

其实关于集合框架的内容还是挺多的,包括么个接口及实现类对应的底层数据结构,以及个集合类具体是怎么实现的等等都还需要大家在课余的时间多多了解。