關聯邏輯關係資料的儲存方式

2022-02-26 08:29:43 字數 1322 閱讀 8312

map作為一種容器,最大的價值就是它可以儲存key-value對,這樣就能方便我們快速查詢對應的值(這就是關聯邏輯關係資料)。但是,如果我們不僅僅是想要儲存物件間的這種邏輯聯絡,還想要通過它們的這種對應關係,做更多的操作,比如說,我們每個學生,都有對應的學號,當初儲存的時候並沒有對學號進行排序,而且它們也確實是沒有任何規律可言,我們想要的是學號能夠按照自然順序排序的學生名單,那麼,我們一開始應該怎樣儲存呢?現在我這裡有兩種解決方案,其中就是封裝學生這個物件,這個物件裡面封裝了學生名和學號這兩個資料,然後將它儲存在乙個物件list中,就能利用list的相應方法進行操作。另一種就是我們的map儲存,雖然它的確是方便我們查詢,但是如果想要根據key來進行排序,先要取出key,這樣的動作,老實說,很麻煩,先上乙個普通的版本:

set keys =map.keyset();

if (keys != null)

}

我們可以看到,這裡使用了乙個方法,就是keyset(),這個方法能對映出key的set檢視,而且我們對這個set進行的任何操作都會直接影響到原來的key,所以使用時必須注意。它支援元素的移除,通過iterator.remove、set.remove、removeall、retainall 和 clear 操作,從該對映中移除相應的對映關係。它不支援 add 或 addall 操作。 因為對這個對映的操作都會影響到原有的key,所以,我們如果確實需要進行刪除,我們更多時候是將其變成乙個陣列,像是這樣:string keyset = map.keyset().toarray(new string[0]); 這樣我們的移除操作就不會影響到原來的key了。這種處理方式是我們必須時刻謹記的,任何對容器直接的操作都是具有危險的,我們要尋找間接層來進行操作。

我們注意到,上面這種方法只是將key對映出來而已,所以我們還是需要使用到get()方法。但是,如果是entryset()就不需要,因為它對映出來的就是包含key-value的collection檢視。

set entries =map.entryset();

if (entries != null

) }

它的使用依然是需要通過iterator,但是這次我們必須將它強制轉型為map.entry,這個其實就是相當於乙個封裝了key-value的物件,並且這個物件可以使用getkey(),getvalue()取出對應的key和value,而且我們的操作更多了,因為它是乙個物件,方法更多。從效率上看,後面一種速度更快,而且使用起來更加方便,所以,後者是個首選。但是,就算是這種更加方便的方法,其實也是利用第一種方法,就是封裝物件的方法,所以如果單單只是儲存這種關係並且進行少量的操作,我們可以選擇封裝物件這個方法,但是如果我們需要經常根據key值來查詢大量的資料,就得使用map了。

效率與公平的邏輯關係

抽象談論效率與公平的文章,浩如煙海。我們需要的,是結合中國改革開放的實踐,把二者關係做具體的,歷史的說明。理論上的真問題,必須結合實際中的真問題,才能具有實際意義。效率與公平的關係,是經濟發展與社會進步之間的基本關係。所謂效率,主要指經濟微觀層面,企業以最小投入獲得最大產出 但經濟效率也可擴大到產業...

linux 指令碼 邏輯關係的寫法及區別

今天總結一下linux shell中邏輯關機表達方式。邏輯與的表達 1 if a a xx b 2 if a xx b 邏輯或的表達 1 if a o xx b 2 if a xx b a o 更常用語表示式的連線 expression1 a expression2 expression1 o ex...

關聯式資料庫設計 函式依賴 邏輯蘊含

函式依賴 屬性集 決定屬性集 則稱有函式依賴 to 邏輯蘊含 f能推出 原不直觀存在於 函式依賴集f 中的函式依賴 to 則成 to 被函式依賴集f邏輯蘊含 函式依賴的閉包 f f f 由關係模式r直觀得到的函式依賴f所推出的所有隱含的或未隱含的 直觀的 函式依賴的集合 舉例 f中有 則函式閉包f ...