随笔1-List和Set的区别

1、List

List接口继承自Collection接口,因此也继承了Collection集合中的所有方法。所有已知的实现类有:AbstractList、AbstractSequenceList、ArrayList、AttributeList、CopyOnWriteArrayList , LinkedList , RoleList , RoleUnresolvedList , Stack , Vector,其中比较常见的是ArrayList、LinkedList、Vector等。
在这里插入图片描述

2、Set

同List接口一样,Set接口也是继承自Collection,所有已知的实现类有:AbstractSet , ConcurrentHashMap.KeySetView , ConcurrentSkipListSet , CopyOnWriteArraySet , EnumSet , HashSet , JobStateReasons , LinkedHashSet , TreeSet,其中比较常见的是HashSet 、LinkedHashSet、TreeSet
在这里插入图片描述

3、两者的区别

  1. List是有序集合,输入的顺序就是输出的顺序;Set是无序集合,无法保证每个元素的存储顺序(注意:元素虽然无放入顺序,但是元素在Set中的位置是有该元素的HashCode决定的,其位置其实是固定的)。
  2. List的元素是可重复,可以存在多个null值;Set是不可重复的,只能有一个null值。
  3. List的元素有下标,因此可以精确的控制元素的插入位置,也能以此去查询元素,所以查询效率比较高,但是插入删除元素时需要依次改变元素的位置,所以效率相对比较低;Set的元素没有固定的位置,因此查询元素的效率比较低,但是相对的插入删除元素时并不会使元素位置发生变化,所以插入删除效率比较高。
  4. List可以用for循环也可以用迭代器,Set只能使用迭代器循环,因为Set没有下标,也就没有get(index)方法。
  5. Set的判断元素是否重复是通过比较该元素的HashCode决定的,因此Set中的Object必须重写equals和hashCode方法。
public class Test1 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("1元素");//list的元素是有序
        list.add("2元素");
        list.add("3元素");
        list.add("1元素");//list的元素是可重复的
        list.add("2元素");
        list.add("3元素");
        list.add(null);//list可以存储多个null值
        list.add(null);
        list.add(null);
        for (String s : list) {
            System.out.println("list>>" + s);
        }

        Set<String> set = new HashSet<>();
        set.add("1元素");//set的元素是无序,根据hashCode确定其位置,hashCode不变,则位置不会发生改变
        set.add("2元素");
        set.add("3元素");
        set.add("1元素");//set的元素不可重复,通过hashCode值判断两者是否相同
        set.add("2元素");
        set.add("3元素");
        set.add(null);//set只能存储一个null值
        set.add(null);
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()) {
            System.out.println("set>>" + iterator.next());
        }
    }
}

4、总结

List是有序的、可重复的集合,适用于查询比较多的场景下;而Set是无序的、不可重复的集合,适用于增删比较多的场景下,同时也可以用于去重。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThinkPHP 是一个优秀的PHP框架,可以帮助我们快速开发高质量的 Web 应用程序。因此,使用 ThinkPHP 来开发 OA 系统是非常方便和实用的。下面我们来讨论一下如何使用 ThinkPHP 来开发一个人力资源管理系统。 1. 创建数据库 首先,我们需要创建一个数据库来存储我们的数据。在该数据库中,我们需要创建一些表来存储员工信息、部门信息、职位信息、薪资信息等等。我们可以使用 MySQL 数据库来创建这些表。 2. 创建 ThinkPHP 项目 在创建完数据库之后,我们需要创建一个 ThinkPHP 项目来实现我们的 OA 系统。我们可以使用 ThinkPHP 官方提供的命令行工具来创建项目,具体命令如下: ``` composer create-project topthink/think oa ``` 执行完上述命令后,会在当前目录下创建一个名为 oa 的 ThinkPHP 项目。 3. 配置数据库 在项目创建好之后,我们需要配置数据库连接信息。在项目的 `.env` 文件中,我们可以配置数据库的相关信息,如下所示: ``` # 数据库类型 DB_CONNECTION=mysql # 数据库地址 DB_HOST=127.0.0.1 # 数据库端口 DB_PORT=3306 # 数据库名 DB_DATABASE=oa # 数据库用户名 DB_USERNAME=root # 数据库密码 DB_PASSWORD= ``` 我们需要根据自己的实际情况来修改这些配置项。 4. 创建控制器和模型 在 ThinkPHP 中,我们可以通过创建控制器和模型来实现 OA 系统的功能。我们可以使用命令行工具来快速创建控制器和模型,具体命令如下: ``` # 创建控制器 php think make:controller Index # 创建模型 php think make:model User ``` 执行完上述命令后,会在项目中生成一个名为 Index 的控制器和一个名为 User 的模型。 5. 实现功能 在创建好控制器和模型之后,我们就可以开始实现 OA 系统的功能了。比如,我们可以实现员工信息的添加、修改、删除、查询等操作,部门信息的添加、修改、删除、查询等操作,职位信息的添加、修改、删除、查询等操作,薪资信息的添加、修改、删除、查询等操作等等。我们可以在控制器中编写处理逻辑,在模型中编写数据库操作。最后,我们可以使用视图来展示数据。 6. 测试系统 在实现完功能之后,我们需要对系统进行测试。我们可以使用浏览器或者 Postman 等工具来测试系统的功能是否正常。如果有问题,我们可以根据错误提示来进行调试和修复。 总之,使用 ThinkPHP 来开发 OA 系统是非常方便和实用的。我们可以根据自己的实际情况来定制系统的功能和界面,从而更好地管理公司的人力资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值