您好,欢迎访问一九零五行业门户网

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时,结果会按元素插入的次序显示。
更多redis相关知识,请访问redis使用教程栏目!
以上就是redis中set和list区别有哪些的详细内容。
其它类似信息

推荐信息