當前位置:首頁 » 編程語言 » javamaplist

javamaplist

發布時間: 2023-03-13 09:55:01

java List和Map的問題

確實如題主所說。具體原因應該是數據結構上的問題。查閱HashMap底層原理的相關資料後,大家都說地天花亂墜我也看不懂。看下來我認為吧,HashMap的每一個key,它綁定了它對應value的地址,只要key保持不變,那麼指針位置也就不會改變。地址不變,在任意地方將value的值進行改變,那麼所有get(key)出來的值就跟著改變了。

利用HashMap的這個特性,可以在類和類之間設計變數池,將多個類之間共享的變數放到同一個HashMap中,類與類之間的方法調用參數使用這個變數池,這樣只要變數池裡某個變數的值在一個類中發生了改變,其他類再get這個變數時也能拿到改變後的值了。

㈡ java中list和map的區別

List中的對象按照索引位置排序,可以有重復對象,允許按照對象在集合中的索引位置檢索對象,如通過list.get(i)方式來獲得List集合中的元素。
Map中的每一個元素包含一個鍵對象和值對象,它們成對出現。鍵對象不能重復,值對象可以重復。

㈢ Java集合中List和 Map區別

一個是存儲單列數據的集合,,另外一個是存儲鍵和值這樣的雙列數的集合,List中存儲的數據是有順序的,並且允許重復。。。Map中存儲的數據是沒有順序的,其鍵是不能重復的,它的值是可以有重復的。。。

List繼承Collection介面,,Map不繼承Collection介面。

㈣ java list 與map有什麼區別

List:是存儲單列數據的集合,存儲的數據是有序並且是可以重復的


Map:存儲雙列數據的集合,通過鍵值對存儲數據,存儲 的數據是無序的,Key值不能重復,value值可以重復key和value是一一對應的

Collection介面

Collection是Java中最基本的集合介面。它描述了一組有關集合操作的方法。

  • int Size(); //集合大小

  • boolean isEmpty(); //是否為空

  • boolean contains(Object o); //是否包含某個對象

  • Iterator<E> iterator(); //返回一個迭代對象,用來遍歷集合中的元素

  • Object[] toArray(); //將集合中的元素以數組形式然後返回

  • <T> T[] toArray(T[] a); //上一個方法的泛型形式

  • boolean add(E e); //將對象e添加進集合,添加成功則返回true

  • boolean remove(Object o); //移除某個元素

  • boolean containsAll(Collection<?> c); //傳入一個集合c,如果c中的元素都存在,則返回true

  • boolean addAll(Collection<? extends E> c); //將集合c中的元素全部添加進本集合

  • boolean removeAll(Collection<?> c); //本集合減去c集合中的元素

  • boolean retainAll(Collection<?> c); //取本集合和c集合的交集

  • void clear(); //清空集合

  • boolean equals(Object o); //判斷相等

  • int hashCode(); //獲取集合當前的hash值

  • Set介面

    Set介面直接繼承自Collection介面,並且方法介面上也一模一樣。Set對添加的元素有一些要求,其不允許出現重復的元素,並且元素之間沒有次序。這相當於一個不允許重復的離散的集合。因此,添加進Set的元素類型需要定義equals方法。若是使用自定義的類,則應該重寫equals方法來確保實現自己需要的功能。

    Set介面主要實現了兩個類:HashSet,TreeSet。

    HashSet是按照哈希來存取元素的,因此速度較快。HashSet繼承自抽象類AbstractSet,然後實現了Set、Cloneable、Serializable介面。
    TreeSet也是繼承自AbstractSet,不過不同的是其實現的是NavigableSet介面。而NavigableSet繼承自SortedSet。SortedSet是一個有序的集合。其添加的元素必須實現了Comparable介面,因為其在添加一個元素的時候需要進行排序。NavigableSet則提供了更多的有關元素次序的方法。


  • LinkedHashSet也是Set的一個實現。和HashSet類似,只不過內部用鏈表來維護,按照元素插入次序來保存。

    List介面

    List介面也是繼承自Collection。與Set不同的是,List可以存儲重復的元素。主要有兩種實現:ArrayList和LinkedList。
    ArrayList沒有什麼好說的,就像傳統的數組一樣,有著很快的隨機存取速度,但是插入刪除的速度就很慢。
    LinkedList則與ArrayList恰恰相反,因為用鏈表來保存數據,所以插入刪除元素的速度很快,但是訪問數據的速度就不如ArrayList了。

    Map介面

    Map(映射)是一個存儲鍵值對的容器介面。每一個元素包含一個key對象和value對象,且元素不允許重復。
    Map介面的實現有以下幾個:
    HashMap是最常用的一個實現。HashMap使用hash映射來存取數據,這個速度是相當快,是O(1)的速度。其容量capacity,和負載因子load factor可以在一開始設定。當元素個數達到capacity*load factor的時候,就會進行擴容。
    LinkedHashMap和HashMap類似,只不過內部用鏈表來維護次序。因此遍歷時候的順序是其插入順序。
    TreeMap是基於紅黑樹的Map,插入的數據被有次序保存,並且有很高的效率。因此在遍歷輸出的時候可以得到排序的數據。但是這要求插入的數據實現了comparable介面。

    總結

  • Collection、Set、List和Map都是介面,不能被實例化。

  • Set和List都繼承自Collection,而Map則和Collection沒什麼關系。

  • Set和List的區別在於Set不能重復,而List可以重復。

  • Map和Set與List的區別在於,Map是存取鍵值對,而另外兩個則是保存一個元素。

希望對您有所幫助!~

㈤ java的List<Map>用法

//存放所有學生信息
List<Map<String,Object>> listStudentInfo=new ArrayList<Map<String,Object>>();
//定義學生1的一些屬性

Map<String,Object> stu1=new HashMap<String, Object>();
stu1.put("sId", 111);//學號
stu1.put("sName", "張三");//姓名
stu1.put("sSex", "男");//性別
listStudentInfo.add(stu1);

//定義學生2的一些屬性
Map<String,Object> stu2=new HashMap<String, Object>();
stu2.put("sId", 112);//學號
stu2.put("sName", "李四");//姓名
stu2.put("sSex", "女");//性別
listStudentInfo.add(stu2);
//得到所有學生信息
for( Map<String,Object> stu:listStudentInfo)
{
System.out.println("學號:"+stu.get("sId")+" 姓名:"+stu.get("sName")+" 性別:"+stu.get("sSex"));
}

熱點內容
動態規劃01背包演算法 發布:2024-11-05 22:17:40 瀏覽:849
nasm編譯器如何安裝 發布:2024-11-05 22:01:13 瀏覽:180
登錄密碼在微信的哪裡 發布:2024-11-05 22:00:29 瀏覽:739
c防止反編譯工具 發布:2024-11-05 21:56:14 瀏覽:247
安卓虛擬機怎麼用 發布:2024-11-05 21:52:48 瀏覽:344
php時間搜索 發布:2024-11-05 20:58:36 瀏覽:479
燕山大學編譯原理期末考試題 發布:2024-11-05 20:13:54 瀏覽:528
華為電腦出現臨時伺服器 發布:2024-11-05 20:05:08 瀏覽:408
斗戰神免費挖礦腳本 發布:2024-11-05 19:53:25 瀏覽:665
網吧伺服器分別是什麼 發布:2024-11-05 19:45:32 瀏覽:392