最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java集合框架詳解

 更新時間:2017年01月09日 09:29:38   作者:java135  
本文主要介紹了java集合框架的相關(guān)知識。具有一定的參考價值,下面跟著小編一起來看下吧

1.java集合框架概述

java SE包含了由一組類和接口組成的java集合框架(java Collection Framework,簡稱JCF),其主要功能是用來將存儲的數(shù)據(jù)以某種結(jié)構(gòu)組織,并以特定的方式來訪問這些數(shù)據(jù),其目標(biāo)是提供一個處理對象集合的通用框架,減少程序員處理不同對象集合時的編碼量。 

集合類中的一些區(qū)別,除了它們是否支持重復(fù)元素操作外,還包括元素是否有順序,以及是否允許添加null元素。java集合框架中根據(jù)這三個區(qū)別,將對象的存儲方式分為三種類型,分別是: 

  1. Set(集):對象容器中的對象沒有順序,且不能重復(fù)。 
  2. List(列表):對象容器中的對象按照索引順序排序,而且可以有重復(fù)的對象。 
  3. Map(映射):對象容器中的元素包含一對“鍵對象-值對象”映射,其中鍵對象不能重復(fù),值對象可以重復(fù)。

為支持對象的排序和遍歷訪問操作,java集合框架中又提供了幾個接口: 

  1. 接口SortedSet為Set類型容器提供拍戲功能。  
  2. 接口SortedMap為Map類型容器提供對鍵對象的排序。 
  3. 接口Comparable和comparator用來實(shí)現(xiàn)集合中對象的排序。 

2.Collection接口和Iterator接口

Collection接口中定義了Collection對象共有的一些基本方法

方法  描述
int size() 返回當(dāng)前集合中包含的元素個數(shù) 
isEmpyt() 判斷集合中是否含有元素
boolean contains(Objact o) 判斷集合中是否含有某一指定元素
add(Objact o) 向集合中添加某一個元素
remove(Objact o) 從集合中刪除某一元素
Iterator iterator() 返回一個遍歷器,用來訪問集合中的各個元素

Iterator接口是一種用于遍歷集合的接口。

Iterator接口中的方法
方法 描述
hasNext() 如果集合中還有更多元素,該方法返回true
next() 返回集合中的下一個元素
remove() 刪除Iterator返回的最后一個元素

1.List接口 

List接口繼承自Collection接口,它有如下特點(diǎn): 

  1. List中的元素是有順序的。 
  2. List通常允許重復(fù)元素。 
  3. List的實(shí)現(xiàn)類通常支持null元素。 
  4. 可以通過索引訪問List對象容器中的元素。    

List接口最常用的實(shí)現(xiàn)類是ArrayList類和LinkedList類。

1).ArrayList 

程序?qū)嵗?nbsp;

package lei;
  import java.util.ArrayList;
  import java.util.List;
  public class Test {
    public static void main(String[] args) {     
      List list = new ArrayList<>();
      list.add(1);
      list.add("zhangsan");
      list.add(false);
      list.add('a');
      list.add(0, "lisi");
      list.add(1);
      list.remove(1);
      list.remove(2);
      list.set(0, "wangwu");
      for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i));
      }
    }
  }

Object類定義的equals()方法只有在傳遞給該方法的對象與調(diào)用該方法的對象是同一對象的時候,才會返回true??梢酝ㄟ^重寫equals()方法來把具有相同狀態(tài)的兩個對象被看做是同一對象。

2).LinkedList 

方法 描述
void addFirst 在鏈表開頭添加一個對象
void addLast 在鏈表末尾添加一個對象
getFirst() 返回鏈表中的第一個元素
getLast() 返回鏈表中的最后一個元素
removeFirst() 刪除鏈表中的第一個元素
removeLast() 刪除鏈表中的最后一個元素

程序?qū)嵗?/p>

package lei;
  import java.util.LinkedList;
  import java.util.List;
  public class Test2 {
      public static void main(String[] args) {
       LinkedList l=new LinkedList<>();
      l.add("zhangsan");
      l.add("lisi");
      l.addFirst(1);
      l.addLast(4);
      System.out.println(l.getFirst());
      System.out.println(l.getLast());
      l.removeFirst();
      l.removeLast();
      for (int i = 0; i < l.size(); i++) {
        System.out.println(l.get(i));  
      }  
    }
  }

LinkedList與ArrayList的選擇

如果列表需要快速存取,但不經(jīng)常進(jìn)行元素的插入和刪除操作,那么選擇ArrayList會好一些;如果需要對;列表進(jìn)行頻繁的插入和刪除操作,那么就應(yīng)該選擇LinkedList。

2.set接口 

set接口繼承自Collectiion接口,同時也繼承了Collection接口的全部方法。set接口有以下特點(diǎn):

  1. Set類型容器中不能包含重復(fù)元素。當(dāng)加入一個元素到容器中時,要比較元素的內(nèi)容是否存在重復(fù)的,所以加入Set類型對象容器的對象必須重寫equals()方法。 
  2. 元素能能有順序,也可能沒有順序。 
  3. 因?yàn)樵乜赡軟]有順序,所以不能基于下標(biāo)訪問Set中費(fèi)元素。 

實(shí)現(xiàn)Set接口最常用的是HashSet類和TreeSet類。

1).Hashset

Hashset類是基于哈希算法的Set接口實(shí)現(xiàn),它主要有如下幾個特點(diǎn): 

  1. 當(dāng)遍歷Hashset時,其中的元素是沒有順序的。 
  2. Hashset中不允許出現(xiàn)重復(fù)元素。這里的重復(fù)元素是指有相同的哈希碼,并且用equals()方法進(jìn)行比較時,返回true的兩個對象。 
  3. 允許包含null元素。

如果我們編寫的類重新定義了equals方法,那么這個類也必須重新定義hashCode()方法,并且保證當(dāng)兩個對象用equals方法比較結(jié)果為true時,這兩個對象的hashCode()方法的返回值相等。 

程序?qū)嵗?/p>

package lei;
  import java.util.HashSet;
  import java.util.Set;
  public class Test4 {
      public static void main(String[] args) {
      Set<String> set=new HashSet<String>();
      set.add("zhangsan");
      set.add("lisi");
      for(String s:set){
        System.out.println(s);
      }
    }
  }

2).TreeSet

TreeSet類不僅實(shí)現(xiàn)類Set接口,還實(shí)現(xiàn)了SortedSet接口,從而保證集合中的對象按照一定的順序排序。當(dāng)向TreeSet集合中添加一個對象時,會把它插入到有序的對象序列中,但是這種排序并不是按照對象添加的順序排序,而是按照一定的算法來排序。 

TreeSet使用元素的自然順序?qū)υ剡M(jìn)行排序,或者根據(jù)創(chuàng)建Set時提供的Comparator進(jìn)行排序。TreeSet支持自然排序和自定義排序兩種排序方式。

3.Map接口

Map(映射)接口是java集合框架中不同于Collection接口的另一個重要接口,它對應(yīng)的是在一種從鍵(Key)到值(Value)的對應(yīng)關(guān)系的集合。Map類型的對象容器里面保存著兩組對象,一組對象用于保存Map里的Key,另外一組用于保存Value。Key和Value可以升級任何引用類型的數(shù)據(jù)。Key不能重復(fù),但是Value可以重復(fù)。

1).HashMap  

HashMap是基于哈希算法的Map接口的實(shí)現(xiàn)。HashMap將它的鍵保存在哈希表中進(jìn)行維護(hù),鍵是唯一的。但是,HashMap并不保證鍵以特定順序排列,特別是不保證順序永久不變。 

HashMap類實(shí)現(xiàn)了Map接口,從而具有Map接口的所有方法。

package day1228;
  import java.util.*;
  public class HashMapDemo {
    public static void main(String[] args) {
      // 創(chuàng)建一個新的HashMap
      Map<String, String> map = new HashMap<String, String>();
      map.put("a1", "xiao");
      map.put("b2", "xiaol");
      map.put("a4", "xiaosd");
      map.put("b1", "12a");
      map.put("a3", "1");
      // 使用iterator遍歷 鍵和值
      System.out.println("之前的Map值是:");
      Set<String> keys = map.keySet();
      for (Iterator<String> i = keys.iterator(); i.hasNext();) {
        String key = i.next();
        String value = map.get(key);
        System.out.println(key + "=" + value);
      }
      // 刪除鍵為"a4"的值
      System.out.println("\n刪除鍵值為a4的元素");
      map.remove("a4");
      // //使用iterator遍歷 鍵和值
      System.out.println("\n之后的Map值:");
      keys = map.keySet();
      for (Iterator<String> i = keys.iterator(); i.hasNext();) {
        String key = i.next();
        String value = map.get(key);
        System.out.println(key + "=" + value);
      }
    }
  }

2).TreeMap

TreeMap類是基于紅黑樹算法的Map接口實(shí)現(xiàn)。TreeMap中鍵的存放方式與TreeSet相似,它將鍵存放在樹中,鍵的順序按照自然順序或者自定義順序兩種方式排列。 

程序?qū)嵗?/p>

package day1228;
  import java.util.*;
  public class TreeMapDemo {
    public static void main(String[] args) {
      //創(chuàng)建一個新的TreeMap
      Map<Integer, String> map = new TreeMap<Integer, String>();
      map.put(1, "one");
      map.put(2, "two");
      map.put(3, "three");
      map.put(4, "four");
      map.put(5, "five");
      //使用iterator顯示鍵和值
      System.out.println("之前的map值為:");
      Set<Integer> keys=map.keySet();
      for(Object key:keys){
        String value=map.get(key);
        System.out.println(key+"="+value);
      }
      //刪除鍵為3的值
      System.out.println("\n刪除鍵值為3的元素");
      map.remove(3);
      //使用iterator顯示鍵和值
      System.out.println("\n之后的值Map為:");
      for(Object key:keys){
        String value=map.get(key);
        System.out.println(key+"="+value);
      }
    }
  }

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • 詳解Java多線程與并發(fā)

    詳解Java多線程與并發(fā)

    多線程是一個進(jìn)程在執(zhí)行過程中產(chǎn)生多個更小的程序單元,這些更小的單元稱為線程,這些線程可以同時存在,同時運(yùn)行,一個進(jìn)程可能包含多個同時執(zhí)行的線程。多線程是實(shí)現(xiàn)并發(fā)機(jī)制的一種有效手段。進(jìn)程和線程一樣,都是實(shí)現(xiàn)并發(fā)的一個基本單位。
    2021-06-06
  • SpringMVC方法返回值多種情況代碼實(shí)例

    SpringMVC方法返回值多種情況代碼實(shí)例

    這篇文章主要介紹了SpringMVC方法返回值多種情況代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • 簡單易用的Spring?Boot郵件發(fā)送demo

    簡單易用的Spring?Boot郵件發(fā)送demo

    本文將介紹如何使用Spring?Boot發(fā)送郵件,我們將演示如何配置SMTP郵件服務(wù)器,創(chuàng)建一個郵件模板,以及如何使用JavaMailSender發(fā)送郵件,我們還將介紹如何測試我們的郵件發(fā)送代碼
    2023-12-12
  • Java構(gòu)造方法實(shí)例詳解(動力節(jié)點(diǎn)java學(xué)院整理)

    Java構(gòu)造方法實(shí)例詳解(動力節(jié)點(diǎn)java學(xué)院整理)

    其實(shí)java構(gòu)造方法很簡單,下面通過示例給大家分享java構(gòu)造方法,非常不錯,具有參考借鑒價值,需要的朋友參考下
    2017-04-04
  • java 詳解類加載器的雙親委派及打破雙親委派

    java 詳解類加載器的雙親委派及打破雙親委派

    這篇文章主要介紹了java 詳解類加載器的雙親委派及打破雙親委派的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • IDEA中springboot提示java:找不到符號符號:變量log問題

    IDEA中springboot提示java:找不到符號符號:變量log問題

    這篇文章主要介紹了IDEA中springboot提示java:找不到符號符號:變量log問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • SpringMVC中的HandlerMappingIntrospector工具類詳解

    SpringMVC中的HandlerMappingIntrospector工具類詳解

    這篇文章主要介紹了SpringMVC中的HandlerMappingIntrospector工具類詳解,這是一個Spring MVC助手類,用于集合應(yīng)用所配置的HandlerMapping(url pattern和請求處理handler之間的映射)表,用于獲取針對某個請求的如下信息,需要的朋友可以參考下
    2023-12-12
  • Java二叉樹的遍歷思想及核心代碼實(shí)現(xiàn)

    Java二叉樹的遍歷思想及核心代碼實(shí)現(xiàn)

    今天小編就為大家分享一篇關(guān)于Java二叉樹的遍歷思想及核心代碼實(shí)現(xiàn),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java方法參數(shù)傳遞機(jī)制原理解析

    Java方法參數(shù)傳遞機(jī)制原理解析

    這篇文章主要介紹了Java方法參數(shù)傳遞機(jī)制原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • 淺析Java中的Caffeine緩存源碼

    淺析Java中的Caffeine緩存源碼

    這篇文章主要介紹了淺析Java中的Caffeine緩存源碼,Caffeine是一個Java開發(fā)的高性能緩存庫,它提供了一種簡單而強(qiáng)大的方式來管理內(nèi)存中的緩存數(shù)據(jù),Caffeine的設(shè)計(jì)目標(biāo)是提供快速、高效的緩存訪問,同時保持簡單易用的API,本文針對其部分源碼做出解析,需要的朋友可以參考下
    2023-10-10

最新評論

丹巴县| 广元市| 林周县| 察雅县| 县级市| 乐都县| 广东省| 芒康县| 余姚市| 四会市| 洛阳市| 四子王旗| 延庆县| 阿拉善右旗| 会昌县| 峡江县| 渭源县| 蕉岭县| 建宁县| 博罗县| 额敏县| 诸城市| 区。| 广宁县| 麻江县| 仪征市| 原阳县| 台东市| 武宣县| 铁岭县| 宿迁市| 金塔县| 绍兴县| 中西区| 宁武县| 冕宁县| 台东市| 新津县| 米林县| 都安| 都匀市|