當前位置:首頁 » 網路管理 » 如何刪除哈希表中的一個元素
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

如何刪除哈希表中的一個元素

發布時間: 2022-10-23 13:21:37

『壹』 redis中list和hash的基本命令和使用場景

 Redis的數據類型

Redis的數據類型共有五種:string,list,hash,set,zset;

String 字元串相對來說做平常,key-value,類似是hashmap的用法;

List 隊列,可以雙向的存值,設計時,也可以簡單用來當隊列模式;

Hash 字典,一個key 對應多個值;

Set 無序的集合;

Zset 有序的集合;

列表 list

Redis列表是簡單的字元串列表,按照插入順序排序。你可以添加一個元素導列表的頭部(左邊)或者尾部(右邊)

列表 list—— 基本命令

lpush

語法:lpush key value [value„]

作用:將一個或多個值 value 插入到列表 key 的表頭(最左邊),從左邊開始加入值,從左到右的順序依次插入到表頭

返回值:數字,新列表的長度

rpush

語法:rpush key value [value„]

作用:將一個或多個值 value 插入到列表 key 的表尾(最右邊),各個 value 值按從左到右 的順序依次插入到表尾

返回值:數字,新列表的長度

lrange

語法:lrange key start stop

作用:獲取列表 key 中指定區間內的元素,0 表示列表的第一個元素,以 1 表示列表的第二個元素;

start ,

stop 是列表的下標值,也可以負數的下標, -1 表示列表的最後一個元素, -2 表示列表的倒 數第二個元素,以此類推。

start ,stop 超出列表的范圍不會出現錯誤。

返回值:指定區間的列表

lindex

語法:lindex key index

作用:獲取列表 key 中下標為指定 index 的元素,列表元素不刪除,只是查詢。

0 表示列表的第一個元素,以 1 表示列表的第二個元素;

start ,

stop 是列表的下標值,也可以負數的下標, -1 表示列表的最後一個元素, -2 表示列表的倒數第二個元素,以此類推。

返回值:指定下標的元素;index 不在列表范圍,返回nil

llen

語法:llen key

作用:獲取列表 key 的長度 返回值:數值,列表的長度; key 不存在返回0

lrem

語法:lrem key count value

作用:根據參數count的值,移除列表中與參數value相等的元素,

count>0,從列表的左側向右開始移 除;

count<0從列表的尾部開始移除;

count=0 移除表中所有與value相等的值。

返回值:數值,移除的元素個數

lset

語法:lset key index value

作用:將列表 key 下標為 index 的元素的值設置為 value。

返回值:設置成功返回 ok ; key 不存在或者 index 超出范圍返回錯誤信息

linsert

語法:linsert key BEFORE(前)|AFTER(後) pivot value

作用:

將值value插入到列表key當中位於值pivot之前或之後的位置。

key不存在,pivot不在列表中, 不執行任何操作。

返回值:命令執行成功,返回新列表的長度。沒有找到 pivot 返回 -1, key 不存在返回 0。

RPOP key

移除列表的最後一個元素,返回值為移除的元素。

RPOPLPUSH source destination

移除列表的最後一個元素,並將該元素添加到另一個列表並返回

LPOP key

移除列表的第一個元素,返回值為移除的元素。

使用場景

1. 消息隊列

隊列模式的情況下,可以使用,左進右出的原則,但不建議使用,因為現在市面上有很多成熟的消息中間件,沒有必要造輪子;

2.排行榜

某一段時間統計數據的排行榜可以放在list裡面,需要分頁的話,也可以使用lrange start stop實現;

3. list類型的lpush命令和lrange命令能實現最新列表的功能,每次通過lpush命令往列表裡插入新的元素,然後通過lrange命令讀取最新的元素列表,如朋友圈的點贊列表、評論列表。

但是,並不是所有的最新列表都能用list類型實現,因為對於頻繁更新的列表,list類型的分頁可能導致列表元素重復或漏掉,舉個例子,當前列表裡由表頭到表尾依次有(E,D,C,B,A)五個元素,每頁獲取3個元素,用戶第一次獲取到(E,D,C)三個元素,然後表頭新增了一個元素F,列表變成了(F,E,D,C,B,A),此時用戶取第二頁拿到(C,B,A),元素C重復了。只有不需要分頁(比如每次都只取列表的前5個元素)或者更新頻率低(比如每天凌晨更新一次)的列表才適合用list類型實現

哈希類型hash

redis hash是一個 string 類型的 field 和 value 的映射表,hash特別適合用於存儲對象,每個 hash 可以存儲 232 - 1鍵值對(40多億);

哈希類型 hash—— 基本命令

hset /hget /hmset /hmget /hgetall /hkeys /hvals /hexists

hset

語法:hset hash 表的key field value

作用:將哈希表 key 中的域 field 的值設為value ,如果 key 不存在,則新建 hash 表,執行賦值,如果有 field ,則覆蓋值。

返回值: ①如果 field 是 hash 表中新field,且設置值成功,返回 1 ②如果 field 已經存在,舊值覆蓋新值,返回0

hget

語法:hget key field

作用:獲取哈希表 key 中給定域 field 的值

返回值:field 域的值,如果 key 不存在或者 field 不存在返回nil

hmset

語法:hmset key field value [field value„]

說明:同時將多個field-value(域-值)設置到哈希表key中,此命令會覆蓋已經存在的field, hash表key不存在,創建空的hash表,執行hmset.

返回值:設置成功返回ok, 如果失敗返回一個錯誤

hmget

語法:hmget key field [field„]

作用:獲取哈希表key中一個或多個給定域的值

返回值:返回和field順序對應的值,如果field不存在,返回nil

hgetall

語法:hgetall key

作用:獲取哈希表key中所有的域和值

返回值:以列表形式返回hash中域和域的值 ,key不存在,返回空hash

hdel

語法:hdel key field [field„]

作用:刪除哈希表 key 中的一個或多個指定域 field,不存在 field 直接忽略

返回值:成功刪除的 field 的數量

hkeys

語法:hkeys key

作用:查看哈希表 key 中的所有 field 域

返回值:包含所有 field 的列表,key 不存在返回空列表

hvals

語法:hvals key

作用:返回哈希表中所有域的值 返回值:包含哈希表所有域值的列表,key 不存在返回空列表

hexists

語法:hexists key field

作用:查看哈希表 key 中,給定域 field 是否存在

返回值:如果 field 存在,返回 1, 其他返回0

使用場景

1、購物車

以用戶id為key,商品id為field,商品數量為value,恰好構成了購物車的3個要素,如下圖所示。

2、hash還是比較適合存儲對象(key field value)或者是字典表(type,key,vlaue),剛好符合對象的要素,但string + json也可以存儲,兩則比較有什麼區別?

 String  + json    Hash

效率很  高           高

容量      低           低

靈活性  低           高

序列化  簡單       復雜

『貳』 c語言中哈希表刪除數據怎麼處理

鏈地址直接刪除結點,開地址將那個位置置一個刪除標記

『叄』 哈希表 c++ 刪除

typedef struct //定義哈希表的結構
{int elem[MAXSIZE]; //數據元素體
HAVEORNOT elemflag[MAXSIZE]; //元素狀態標志,沒有記錄、有記錄、有過記錄但已被刪除
int count; //哈希表中當前元素的個數
}HashTable;

BOOL DeleteHash(HashTable &H,Record e)
{//在查找成功時刪除待刪元素e,並返回True,否則返回False
int p;
if(!SearchHash(H,e.keynum,p)) //表中不存在待刪元素
return False;
else
{H.elemflag[p]=DELKEY; //設置標志為DELKEY,表明該元素已被刪除
H.count--; //哈希表當前長度減一
return True;
}
}

BOOL SearchHash(HashTable H,int k,int &p)
{//在開放定址哈希表H中查找關鍵字為k的數據元素,若查找成功,以p指示
//待查數據元素在表中的位置,並返回True;否則,以p指示插入位置,並
//返回False
int p1;
p1=p=Hash(k); //求得哈希地址
while(H.elemflag[p]==HAVEKEY&&k!=H.elem[p])
//該位置中填有記錄並且關鍵字不相等
{p++; //沖突處理方法:線性探測再散列
if(p>=MAXSIZE) p=p%MAXSIZE; //循環搜索
if(p==p1) return False; //整個表已搜索完,沒有找到待查元素
}
if(k==H.elem[p]&&H.elemflag[p]==HAVEKEY) //查找成功,p指示待查元素位置
return True;
else return False; //查找不成功
}

『肆』 用語言簡要描述hash表的查找插入刪除某個元素

hash表的每個位置都會預留空間(即使沒有元素),插入/刪除直接就是把元素放在相應位置/從相應位置移除。

『伍』 java HashSet 刪除元素問題

s.remove(i-1);
改為
s.remove((short)(i-1));
i-1是int型,要轉成short

『陸』 怎麼刪除HashMap的一個鍵值

取所有的鍵:
HashMap hm = new HashMap();
hm.put("A_thlsd,,", "01");
hm.put("b_adhd", "02");
hm.put("c_decteln", "03");
hm.put("d_apple", "04");
hm.put("e_blue", "05");
hm.put("ff_drag", "06");
hm.put("g_cellention", "07");
Set set = hm.keySet();

Object[] obj=set.toArray();
Arrays.sort(obj);
for(int i=0;i<obj.length;i++){
System.out.println(obj[i]);
}

取所有的鍵值:

HashMap hm = new HashMap();
hm.put("A_thlsd,,", "01");
hm.put("b_adhd", "02");
hm.put("c_decteln", "03");
hm.put("d_apple", "04");
hm.put("e_blue", "05");
hm.put("ff_drag", "06");
hm.put("g_cellention", "07");
Set set = hm.entrySet();

Object[] obj=set.toArray();
//Arrays.sort(obj);
for(int i=0;i<obj.length;i++){
System.out.println(obj[i]);
}
這個方法不好

【xiyao】:
1.
Set set = map.keySet();
Iterator it = set.iterator();
if(it.hasNext()){
Object j = it.next();
System.out.println(j);
System.out.println(map.get(j)) ;
}
2.
Set set = map.entrySet();
Iterator it = set.iterator();
if(it.hasNext()){
Map.Entry me = (Map.Entry) it.next();
System.out.println(me.getKey());
System.out.println(me.getValue());
}

【xiyao】:
哦 暈了 IF換WHILE

【weiqiyiji】:
Set set = map.entrySet();
Iterator it = set.iterator();
if(it.hasNext()){
Map.Entry me = (Map.Entry) it.next();
System.out.println(me.getKey()+"="+me.getValue());

『柒』 HashMap怎麼刪除數據

package love.fs;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;public class HashMapTest { public static void main(String args[]) { HashMap hm = new HashMap(); hm.put("a", 2); hm.put("aa", 22); hm.put("aaa", 222); hm.put("aaaa", 222); hm.put("b", 3); hm.put("bb", 33); hm.put("bbb", 333); hm.put("bbbb", 3333); Iterator<?> it = hm.entrySet().iterator(); System.out.println("這里的內容是關於HashMap的遍歷,可見並不是有序存儲的"); while(it.hasNext()) { Map.Entry me = (Map.Entry)it.next(); System.out.print(me.getKey() + ": "); System.out.println(me.getValue()); } System.out.println("下面進行對HashMap的刪除"); Iterator<?> it1 = hm.entrySet().iterator(); while(it.hasNext()) { Map.Entry me = (Map.Entry)it.next(); System.out.println(me.getKey()+":"); if(me.getKey().equals("aa")) { System.out.println("已找到值"); { hm.remove(me.getKey()); } } } }}這就是所有代碼了,呵呵,希望能找到問題所在,哈哈

『捌』 怎麼刪除hash

你是想刪除整個key吧,而不是某個key里邊的單個或多個域,刪除整個key可以用del key這個命令,如果是在程序里寫的話就用$redis->del($key); 希望能幫到你