首页 > 数据库 >Redis中set和list的区别有哪些

Redis中set和list的区别有哪些

时间:2022-08-22 22:37:06浏览次数:59  
标签:Set list ArrayList 元素 Redis 插入 set List

list和set的区别:

1、List和Set都是接口继承于Collection接口。

2、最大的不同就是List是可以重复的。而Set是不能重复的。(注意:元素虽然无放入顺序,但是元素在set 中的位置是有该元素的3、HashCode决定的,其位置其实是固定的)

3、List接口有三个实现类:LinkedList,ArrayList,Vector ,Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet

4、List适合经常追加数据,插入,删除数据。但随机取数效率比较低。

5、Set适合经常地随机储存,插入,删除。但是在遍历时效率比较低。

Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List)。Map同样对每个元素保存一份,但这是基于"键"的,Map也有内置的排序,因而不关心元素添加的顺序。如果添加元素的顺序对你很重要,应该使用 LinkedHashSet或者LinkedHashMap.

总结:List有顺序有重复没有排序,set无重复有排序,map的key也和set一样。如果想跟List一样需要有插入元素的顺序,请使用LinkedHashSet或者LinkedHashMap。

List的功能方法

实际上有两种List: 一种是基本的ArrayList,其优点在于随机访问元素,另一种是更强大的LinkedList,它并不是为快速随机访问设计的,而是具有一套更通用的方法。

List : 次序是List最重要的特点:它保证维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(这只推荐LinkedList使用。)一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和移除元素。

ArrayList : 由数组实现的List。允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历ArrayList,而不是用来插入和移除元素。因为那比LinkedList开销要大很多。

LinkedList : 对顺序访问进行了优化,向List中间插入与删除的开销并不大。随机访问则相对较慢。(使用ArrayList代替。)还具有下列方法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 这些方法 (没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。

For example:

ArrayList与迭代器的使用

        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            list.add(i);
        }
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()) {
            int i = iterator.next();
            System.out.println("iterator==" + i);
        }
        for(Integer i: list) {
            System.out.println("i=="+ i);
        }
        ListIterator<Integer> listIterator = list.listIterator();
        while (listIterator.hasNext()) {
            int  j = listIterator.next();
            System.err.println("listIterator==" + j);
        }

Set的功能方法

Set : 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。

HashSet : 为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。

TreeSet : 保存次序的Set, 底层为树结构。使用它可以从Set中提取有序的序列。

LinkedHashSet : 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。

标签:Set,list,ArrayList,元素,Redis,插入,set,List
From: https://www.cnblogs.com/taoxw/p/16614485.html

相关文章

  • C#之List、Queue、Stack使用EnsureCapacity方法预设数组大小
    简介 List、Queue和Stack集合中的EnsureCapacity方法预设数组大小。为什么以及何时使用EnsureCapacity方法这里我们将首先了解为什么需要使用这种方法以及何时使......
  • 如何查看redis使用那个配置文件启动
      [root@cdc-henan-cdhworker02redis]#/usr/local/redis/bin/redis-cli-h192.168.1.50-atest123-p6379Warning:Usingapasswordwith'-a'or'-u'option......
  • java将list转为逗号隔开字符串
    1.只要不为空,就在后面添加逗号,最后再用subString()函数截取,去掉最后一位的逗号List<String>test=newArrayList<>();StringtestStrings="";test.add("test1");test......
  • Redis持久化
    Redis持久化redis是一个内存数据库当redis服务器重启获取电脑重启数据回丢失我们可以将redis内存中的数据持久化保存到硬盘的文件中redis持久化机制:RDB:默认方式不......
  • Redis命令操作_常用命令和Redis持久化
    通用命令keys*查询所有的键typekey:获取键对应的value的类型delkey:删除指定的keyclear:清除窗口所有内容127.0.0.1:6379>keys*(emptylistorset)127.0.0.1:......
  • 面经-LinkedList与ArrayList比较
    ArrayList:1.基于数组,需要连续内存2.随机访问快(根据下标访问)。(按照内容查询时ArrayList与LinkedList速率基本相同)3.尾部插入、删除性能好,其他部分插入、删除都会移动数据......
  • k8s statefulset创建有状态服务
    创建pv            yaml挂载使用     storageclass动态挂载, storageclassName为nfs-storageclass   ......
  • docker快速搭建redis集群
    采用三台主节点Docker部署,均采用默认端口,每台机器一台redis,可以视情况自行修改#清理环境,所有节点执行!注意会删除数据rm-rf/opt/redis/clustermkdir-p/opt/redi......
  • Centos修改时区失败,Failed to set time zone: Failed to set time zone: Is a directo
    今日研发反馈有台测试机时区不对,但是无法修改,登录后发现修改报错,提示Failedtosettimezone:Failedtosettimezone:Isadirectory谷歌百度居然没有相同的报错,最......
  • Jedis操作hash和Jedis操作list
    Jedis操作hash/***hash*/@Testpublicvoidtest3(){//1.获取连接Jedisjedis=newJedis();//如果使用空参构造,默认值"localhost",6379端口//存......