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

java集合框架詳解

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

1.java集合框架概述

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

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

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

為支持對(duì)象的排序和遍歷訪問(wèn)操作,java集合框架中又提供了幾個(gè)接口: 

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

2.Collection接口和Iterator接口

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

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

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

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

1.List接口 

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

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

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()方法只有在傳遞給該方法的對(duì)象與調(diào)用該方法的對(duì)象是同一對(duì)象的時(shí)候,才會(huì)返回true??梢酝ㄟ^(guò)重寫(xiě)equals()方法來(lái)把具有相同狀態(tài)的兩個(gè)對(duì)象被看做是同一對(duì)象。

2).LinkedList 

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

程序?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會(huì)好一些;如果需要對(duì);列表進(jìn)行頻繁的插入和刪除操作,那么就應(yīng)該選擇LinkedList。

2.set接口 

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

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

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

1).Hashset

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

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

如果我們編寫(xiě)的類重新定義了equals方法,那么這個(gè)類也必須重新定義hashCode()方法,并且保證當(dāng)兩個(gè)對(duì)象用equals方法比較結(jié)果為true時(shí),這兩個(gè)對(duì)象的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接口,從而保證集合中的對(duì)象按照一定的順序排序。當(dāng)向TreeSet集合中添加一個(gè)對(duì)象時(shí),會(huì)把它插入到有序的對(duì)象序列中,但是這種排序并不是按照對(duì)象添加的順序排序,而是按照一定的算法來(lái)排序。 

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

3.Map接口

Map(映射)接口是java集合框架中不同于Collection接口的另一個(gè)重要接口,它對(duì)應(yīng)的是在一種從鍵(Key)到值(Value)的對(duì)應(yīng)關(guān)系的集合。Map類型的對(duì)象容器里面保存著兩組對(duì)象,一組對(duì)象用于保存Map里的Key,另外一組用于保存Value。Key和Value可以升級(jí)任何引用類型的數(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)建一個(gè)新的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類是基于紅黑樹(shù)算法的Map接口實(shí)現(xiàn)。TreeMap中鍵的存放方式與TreeSet相似,它將鍵存放在樹(shù)中,鍵的順序按照自然順序或者自定義順序兩種方式排列。 

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

package day1228;
  import java.util.*;
  public class TreeMapDemo {
    public static void main(String[] args) {
      //創(chuàng)建一個(gè)新的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);
      }
    }
  }

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

    IDEA中springboot提示java:找不到符號(hào)符號(hào):變量log問(wèn)題

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

    SpringMVC中的HandlerMappingIntrospector工具類詳解

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

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

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

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

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

    淺析Java中的Caffeine緩存源碼

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

最新評(píng)論

乌鲁木齐县| 榕江县| 屏边| 织金县| 衢州市| 崇阳县| 罗甸县| 丹阳市| 连江县| 广元市| 萍乡市| 漯河市| 庆阳市| 芦山县| 金昌市| 鄂温| 色达县| 晋州市| 集安市| 郧西县| 锦州市| 汤原县| 临朐县| 同仁县| 隆尧县| 汝阳县| 拜城县| 鄂尔多斯市| 茌平县| 贵南县| 汝州市| 仁化县| 恩平市| 宝山区| 册亨县| 拜泉县| 温泉县| 巴南区| 永善县| 双牌县| 苍山县|