国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java集合(List、Set)

2019-11-07 23:45:19
字體:
來源:轉載
供稿:網友

java中的集合(Collection)有三類,一類是List,再有一類是Set,還有Map。

一、Set

Set表示數學意義上的集合,集合內的元素是不可重復的,主要有兩個實現類,hashSet和TreeSet,因為TreeSet實現了SortedSet接口,所以TreeSet是有序的。

HashSet和TreeSet的區別?

1、TreeSet是二叉樹實現的,已經自動排序,不允許存null值 2、HashSet是哈希表實現的,是無序的,能且僅能存放一個null值 3、HashSet是以hashCode作為每個對象的唯一標識

二、List

list又稱有序的Collection。他按對象進入的順序保存對象,所以它能對列表中的每個元素的插入和刪除為進行精確的控制。同時,它可以保存重復的對象。

ArrayList和LinkedList的區別?

1.ArrayList是實現了基于動態數組的數據結構,LinkedList基于鏈表的數據結構。 2.對于隨機訪問get和set,ArrayList覺得優于LinkedList,因為LinkedList要移動指針。 3.對于新增和刪除操作add和remove,LinedList比較占優勢,因為ArrayList要移動數據。 4、ArrayList是線程不安全的

三、Map

Map提供了一個從鍵映射到值的數據結構、它用于保存鍵值對,其中值可以重復,但是鍵是唯一的,不能重復。常用到的有hashMap、TreeMap、LinkedMap。

hashMap、TreeMap、LinkedMap之間的區別?

HashMap是基于散列表實現的,采用對象的HashCode可以進行快速查詢。LinkedHashMap采用列表來維護內部的順序,TreeMap基于紅黑樹的數據結構來實現的,內部元素是按需排序的。

PS:hashcode的作用

那么這里就有一個比較嚴重的問題了:要想保證元素不重復,可兩個元素是否重復應該依據什么來判斷呢? 這就是Object.equals方法了。但是,如果每增加一個元素就檢查一次,那么當元素很多時,后添加到集合中的元素比較的次數就非常多了。 也就是說,如果集合中現在已經有1000個元素,那么第1001個元素加入集合時,它就要調用1000次equals方法。這顯然會大大降低效率。 于是,Java采用了哈希表的原理。哈希(Hash)實際上是個人名,由于他提出一哈希算法的概念,所以就以他的名字命名了。 哈希算法也稱為散列算法,是將數據依特定算法直接指定到一個地址上。初學者可以這樣理解,hashCode方法實際上返回的就是對象存儲的物理地址(實際可能并不是)。

這樣一來,當集合要添加新的元素時,先調用這個元素的hashCode方法,就一下子能定位到它應該放置的物理位置上。 如果這個位置上沒有元素,它就可以直接存儲在這個位置上,不用再進行任何比較了;如果這個位置上已經有元素了, 就調用它的equals方法與新元素進行比較,相同的話就不存了,不相同就散列其它的地址。 所以這里存在一個沖突解決的問題。這樣一來實際調用equals方法的次數就大大降低了,幾乎只需要一兩次。 所以,Java對于eqauls方法和hashCode方法是這樣規定的: 1、如果兩個對象相同,那么它們的hashCode值一定要相同; 2、如果兩個對象的hashCode相同,它們并不一定相同(上面說的對象相同指的是用eqauls方法比較。) 你當然可以不按要求去做了,但你會發現,相同的對象可以出現在Set集合中。同時,增加新元素的效率會大大下降。 hashcode這個方法是用來鑒定2個對象是否相等的。 那你會說,不是還有equals這個方法嗎? 不錯,這2個方法都是用來判斷2個對象是否相等的。但是他們是有區別的。 一般來講,equals這個方法是給用戶調用的,如果你想判斷2個對象是否相等,你可以重寫equals方法,然后在代碼中調用,就可以判斷他們是否相等 了。簡單來講,equals方法主要是用來判斷從表面上看或者從內容上看,2個對象是不是相等。

2、==和eqauls的區別

“==”比較的是值【變量(棧)內存中存放的對象的(堆)內存地址】 equal用于比較兩個對象的值是否相同【不是比地址】

【特別注意】Object類中的equals方法和“==”是一樣的,沒有區別,而String類,Integer類等等一些類,是重寫了equals方法,才使得equals和“==不同”,所以,當自己創建類時,自動繼承了Object的equals方法,要想實現不同的等于比較,必須重寫equals方法。

“==”比”equal”運行速度快,因為”==”只是比較引用.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 手游| 双城市| 陕西省| 瑞丽市| 汾阳市| 四子王旗| 红安县| 许昌市| 宝坻区| 连云港市| 南木林县| 鸡泽县| 上饶县| 临泉县| 集贤县| 隆尧县| 理塘县| 怀仁县| 定边县| 辉南县| 葵青区| 永兴县| 奉新县| 页游| 东海县| 日喀则市| 宜阳县| 贵州省| 冕宁县| 饶平县| 凤冈县| 太仓市| 阜新市| 卓资县| 额尔古纳市| 高雄市| 金山区| 永顺县| 浦北县| 綦江县| 长治县|