這篇文章給大家分享的是有關(guān)redis中set和list的區(qū)別是什么的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。
創(chuàng)新互聯(lián)建站于2013年開(kāi)始,先為榆陽(yáng)等服務(wù)建站,榆陽(yáng)等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為榆陽(yáng)企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
list和set的區(qū)別:
1、List和Set都是接口繼承于Collection接口。
2、最大的不同就是List是可以重復(fù)的。而Set是不能重復(fù)的。(注意:元素雖然無(wú)放入順序,但是元素在set 中的位置是有該元素的3、HashCode決定的,其位置其實(shí)是固定的)
3、List接口有三個(gè)實(shí)現(xiàn)類:LinkedList,ArrayList,Vector ,Set接口有兩個(gè)實(shí)現(xiàn)類:HashSet(底層由HashMap實(shí)現(xiàn)),LinkedHashSet
4、List適合經(jīng)常追加數(shù)據(jù),插入,刪除數(shù)據(jù)。但隨機(jī)取數(shù)效率比較低。
5、Set適合經(jīng)常地隨機(jī)儲(chǔ)存,插入,刪除。但是在遍歷時(shí)效率比較低。
Set對(duì)每個(gè)對(duì)象只接受一次,并使用自己內(nèi)部的排序方法(通常,你只關(guān)心某個(gè)元素是否屬于Set,而不關(guān)心它的順序--否則應(yīng)該使用List)。Map同樣對(duì)每個(gè)元素保存一份,但這是基于"鍵"的,Map也有內(nèi)置的排序,因而不關(guān)心元素添加的順序。如果添加元素的順序?qū)δ愫苤匾?,?yīng)該使用 LinkedHashSet或者LinkedHashMap.
總結(jié):List有順序有重復(fù)沒(méi)有排序,set無(wú)重復(fù)有排序,map的key也和set一樣。如果想跟List一樣需要有插入元素的順序,請(qǐng)使用LinkedHashSet或者LinkedHashMap。
List的功能方法
實(shí)際上有兩種List: 一種是基本的ArrayList,其優(yōu)點(diǎn)在于隨機(jī)訪問(wèn)元素,另一種是更強(qiáng)大的LinkedList,它并不是為快速隨機(jī)訪問(wèn)設(shè)計(jì)的,而是具有一套更通用的方法。
List : 次序是List最重要的特點(diǎn):它保證維護(hù)元素特定的順序。List為Collection添加了許多方法,使得能夠向List中間插入與移除元素(這只推薦LinkedList使用。)一個(gè)List可以生成ListIterator,使用它可以從兩個(gè)方向遍歷List,也可以從List中間插入和移除元素。
ArrayList : 由數(shù)組實(shí)現(xiàn)的List。允許對(duì)元素進(jìn)行快速隨機(jī)訪問(wèn),但是向List中間插入與移除元素的速度很慢。ListIterator只應(yīng)該用來(lái)由后向前遍歷ArrayList,而不是用來(lái)插入和移除元素。因?yàn)槟潜萀inkedList開(kāi)銷要大很多。
LinkedList : 對(duì)順序訪問(wèn)進(jìn)行了優(yōu)化,向List中間插入與刪除的開(kāi)銷并不大。隨機(jī)訪問(wèn)則相對(duì)較慢。(使用ArrayList代替。)還具有下列方法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 這些方法 (沒(méi)有在任何接口或基類中定義過(guò))使得LinkedList可以當(dāng)作堆棧、隊(duì)列和雙向隊(duì)列使用。
For example:
ArrayList與迭代器的使用
Listlist = new ArrayList<>(); for (int i = 0; i < 10; i++) { list.add(i); } Iterator 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 listIterator = list.listIterator(); while (listIterator.hasNext()) { int j = listIterator.next(); System.err.println("listIterator==" + j); }
Set的功能方法
Set : 存入Set的每個(gè)元素都必須是唯一的,因?yàn)镾et不保存重復(fù)元素。加入Set的元素必須定義equals()方法以確保對(duì)象的唯一性。Set與Collection有完全一樣的接口。Set接口不保證維護(hù)元素的次序。
HashSet : 為快速查找設(shè)計(jì)的Set。存入HashSet的對(duì)象必須定義hashCode()。
TreeSet : 保存次序的Set, 底層為樹(shù)結(jié)構(gòu)。使用它可以從Set中提取有序的序列。
LinkedHashSet : 具有HashSet的查詢速度,且內(nèi)部使用鏈表維護(hù)元素的順序(插入的次序)。于是在使用迭代器遍歷Set時(shí),結(jié)果會(huì)按元素插入的次序顯示。
感謝各位的閱讀!關(guān)于redis中set和list的區(qū)別是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!