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

Java常用集合之Set和Map的用法詳解

 更新時間:2022年07月06日 08:45:12   作者:愚生淺末  
這篇文章將通過一些示例為大家詳細介紹一下Java常用集合中Set和Map的用法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

常用Set集合

Set集合的特點

? Set接口下的集合都會有以下特點

  • 不能存儲重復(fù)元素
  • 沒有索引

HashSet

HashSet集合的特點

  • 底層數(shù)據(jù)結(jié)構(gòu)是哈希表
  • 存儲元素的順序和遍歷獲取出來的順序可能不一致
  • 沒有索引
  • 集合中不能存儲重復(fù)元素

創(chuàng)建對象

HashSet<元素數(shù)據(jù)類型> set = new HashSet<>();

public static void main(String[] args) {
    HashSet<String> set = new HashSet<>();
}

常用方法

方法解釋
boolean add(E e)添加元素,如果元素添加不成功 返回值代表是否添加成功
boolean remove(Object o)刪除元素 ,返回值代表刪除元素是否成功
boolean contains(Object o)判斷元素是否存在
int size()獲取集合的大小
 public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        //添加元素
        boolean f = set.add("愚");
        set.add("生");
        set.add("淺");
        set.add("末");
        System.out.println(f);
    }

我們打斷點調(diào)試一下:

可以看到愚生淺末四個字符已經(jīng)裝入set,且f為true證明添加成功。

我們再試試刪除:

public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        //添加元素
        set.add("愚");
        set.add("生");
        set.add("淺");
        set.add("末");
        boolean f = set.remove("生");
    }

可以看到set已經(jīng)沒有生了,且f為true代表刪除成功。

判斷是否存在:

 public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        //添加元素
        set.add("愚");
        set.add("生");
        set.add("淺");
        set.add("末");
        boolean f = set.contains("末");
    }

末是存在于set的,所以返回值為true。

獲取集合的大小:

 public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        //添加元素
        set.add("愚");
        set.add("生");
        set.add("淺");
        set.add("末");
         //獲取集合的大小
        int size = set.size();

添加了愚生淺末四個字符,所以可以得到size是4.

遍歷

1.轉(zhuǎn)換為數(shù)組遍歷

 public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        set.add("愚");
        set.add("生");
        set.add("淺");
        set.add("末");
        String[] strings = set.toArray(new String[0]);
        for (int i = 0; i < strings.length; i++) {
            System.out.println(strings[i]);
        }
    }

結(jié)果:

前面說過:存儲元素的順序和遍歷獲取出來的順序可能不一致。

2.使用迭代器遍歷

    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        set.add("愚");
        set.add("生");
        set.add("淺");
        set.add("末");
        Iterator<String> it = set.iterator();
        while (it.hasNext()){
            String s = it.next();
            System.out.println(s);
        }
    }

結(jié)果:

3.foreach遍歷

 public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        set.add("愚");
        set.add("生");
        set.add("淺");
        set.add("末");
        for (String s : set) {
            System.out.println(s);
        }
    }

結(jié)果:

常用Map集合

Map集合的概述

Map接口是雙列集合的頂層接口,下面是Map接口的定義

interface Map<K,V> K:鍵的類型;V:值的類型

? 存儲的數(shù)據(jù)必須包含key和value。

? key和value在Map集合中是一一對應(yīng)的關(guān)系。一個key對應(yīng)一個value。

? key在map集合中是不會重復(fù)的。

HashMap

HashMap集合的特點

  • 底層數(shù)據(jù)結(jié)構(gòu)是哈希表
  • 存儲元素的順序和遍歷獲取出來的順序可能不一致
  • key不會重復(fù)

創(chuàng)建對象

HashMap<key的數(shù)據(jù)類型,value的數(shù)據(jù)類型> map = new HashMap<>();

例如:

    public static void main(String[] args) {
        HashMap<String,String> map = new HashMap<>();
        HashMap<String,Integer> map = new HashMap<>();
    }

常用方法

方法解釋
V put(K key, V value)添加元素,如果key不存在就添加,如果key
V get(Object key)根據(jù)key獲取對應(yīng)的value值返回。如果key不存在就返回null
V remove(Object key)根據(jù)key刪除map中對應(yīng)的鍵值對。并且把刪除的value返回
boolean containsKey(Object key)判斷key是否存在
int size()集合中鍵值對的對數(shù)
void clear()清空集合中的所有鍵值對
    public static void main(String[] args) {
        HashMap<String,String> map = new HashMap<>();
//        map.put()
        //添加元素
        map.put("name", "愷龍");
        map.put("age", "20");
        String v = map.put("name", "愚生淺末");//將原來的愷龍?zhí)鎿Q為愚生淺末
        String name = map.get("name");//獲取名字:愷龍
        String age = map.get("age");//獲取age:20
        //刪除元素
        String delV = map.remove("age");//返回值為20
        //判斷key是否存在
        if(map.containsKey("name")){
            String agea = map.get("name");//null
            System.out.println(agea.length());
        }
        //size
        int size = map.size();
        map.clear();
    }

遍歷

1.使用entrySet遍歷

map集合的entrySet方法可以獲取一個Set集合,集合中存放的是Entry對象,一個Entry對象相當于一個鍵值對。我們可以遍歷set集合拿到Entry對象,然后獲取出里面的鍵和值。

使用迭代器遍歷entrySet

    public static void main(String[] args) {
        HashMap<String,String> map = new HashMap<>();
        map.put("name","愷龍");
        map.put("age","20");
        Set<Map.Entry<String, String>> entries = map.entrySet();
        //使用迭代器遍歷entrySet
        Iterator<Map.Entry<String, String>> it = entries.iterator();
        while (it.hasNext()){
            Map.Entry<String, String> entry = it.next();
            System.out.println(entry.getKey()+"="+entry.getValue());
        }
    }

結(jié)果:

使用foreach遍歷entrySet

    public static void main(String[] args) {
        HashMap<String,String> map = new HashMap<>();
        map.put("name","愷龍");
        map.put("age","20");
        Set<Map.Entry<String, String>> entries = map.entrySet();
        //使用foreach遍歷entrySet
        for (Map.Entry<String, String> entry : entries) {
            System.out.println(entry.getKey()+"="+entry.getValue());
        }
    }

結(jié)果:

2.使用keySet遍歷

map集合的keySet方法可以獲取一個Set集合,集合中存放的是所有的key。我們可以遍歷set集合拿到key對象,然后通過key獲取對應(yīng)的value。

    public static void main(String[] args) {
        HashMap<String,String> map = new HashMap<>();
        map.put("name","愷龍");
        map.put("age","20");
        Set<String> keys = map.keySet();
        for (String key : keys) {
            System.out.println(key+"="+map.get(key));
        }
    }

結(jié)果:

HashMap的key去重原理

?HashMap在添加元素的時候會判斷集合中是否有key和本次存入的key相同。判斷的時候主要是通過hashCode方法和equals方法來進行判斷的。hashCode相同,并且equals判斷也相同就會認為是同一個key。

?所以如果我們要存儲到HashMap中的key是一個自定義的類型。就需要根據(jù)情況判斷下是否需要重寫下hashCode方法和equals方法。重寫的時候使用IDEA的提示即可。

public class Student {
    private int age;
    private String name;
    public String getName(){
        return name = this.name;
    }
    public void setName(String name){
        this.name = name;
    }
    public int getAge(){
        return age = this.age;
    }
    public void setAge(int age){
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age &&
                Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(age, name);
    }
}

注意:HashSet存儲數(shù)據(jù)其實也是使用了HashMap。所以如果往HashSet中存儲自定義對象也要看情況是否需要重寫hashCode方法和equals方法。

以上就是Java常用集合之Set和Map的用法詳解的詳細內(nèi)容,更多關(guān)于Java Set Map集合的資料請關(guān)注腳本之家其它相關(guān)文章

相關(guān)文章

  • IntelliJ IDEA2023中運行Spring Boot找不到VM options進行端口的修改的問題解決

    IntelliJ IDEA2023中運行Spring Boot找不到VM options進

    這篇文章主要介紹了IntelliJ IDEA2023中運行Spring Boot找不到VM options進行端口的修改的問題解決,本文通過圖文并茂的形式給大家介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • java實現(xiàn)簡單三子棋游戲

    java實現(xiàn)簡單三子棋游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單三子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • SpringSecurity自定義登錄成功處理

    SpringSecurity自定義登錄成功處理

    這篇文章主要為大家詳細介紹了SpringSecurity自定義登錄成功處理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • SpringBoot項目接入Nacos的實現(xiàn)步驟

    SpringBoot項目接入Nacos的實現(xiàn)步驟

    SpringBoot項目使用nacos作為配置中心和服務(wù)注冊中心,同時兼容dubbo的注冊中心。 本Demo項目使用的SpringBoot版本是2.3.9.RELEASE
    2021-05-05
  • Java?Runnable和Thread實現(xiàn)多線程哪個更好你知道嗎

    Java?Runnable和Thread實現(xiàn)多線程哪個更好你知道嗎

    這篇文章主要為大家詳細介紹了Java?Runnable和Thread實現(xiàn)多線程哪個更好,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>
    2022-03-03
  • MyBatis-Plus中最簡單的查詢操作教程(Lambda)

    MyBatis-Plus中最簡單的查詢操作教程(Lambda)

    這篇文章主要給大家介紹了關(guān)于MyBatis-Plus中最簡單的查詢操作的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-03-03
  • Tomcat調(diào)優(yōu)詳解

    Tomcat調(diào)優(yōu)詳解

    這篇文章主要介紹了Tomcat調(diào)優(yōu)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Java 通過JDBC連接Mysql數(shù)據(jù)庫

    Java 通過JDBC連接Mysql數(shù)據(jù)庫

    本文給大家詳細介紹了java如何使用JDBC連接Mysql的方法以及驅(qū)動包的安裝,最后給大家附上了java通過JDBC連接其他各種數(shù)據(jù)庫的方法,有需要的小伙伴可以參考下。
    2015-11-11
  • java基礎(chǔ)知識I/O流使用詳解

    java基礎(chǔ)知識I/O流使用詳解

    編程語言的I/O類庫中常常使用流這個抽象的概念,它代表任何有能力產(chǎn)生數(shù)據(jù)的數(shù)據(jù)源對象或時有能力接收數(shù)據(jù)的接收端對象,本文為大家介紹Java中I/O系統(tǒng)基礎(chǔ)知識
    2014-01-01
  • SpringBoot AOP方式實現(xiàn)多數(shù)據(jù)源切換的方法

    SpringBoot AOP方式實現(xiàn)多數(shù)據(jù)源切換的方法

    本篇文章主要介紹了SpringBoot AOP方式實現(xiàn)多數(shù)據(jù)源切換的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03

最新評論

曲麻莱县| 苗栗县| 兰州市| 寻乌县| 酉阳| 康乐县| 乐都县| 隆德县| 保山市| 临沧市| 竹溪县| 启东市| 鱼台县| 合山市| 北宁市| 温泉县| 会泽县| 新建县| 宁蒗| 丰宁| 乡城县| 天台县| 西盟| 梁山县| 两当县| 将乐县| 沭阳县| 晋江市| 宿州市| 溆浦县| 宜兴市| 淄博市| 确山县| 内黄县| 枣阳市| 樟树市| 孟津县| 正蓝旗| 东乡| 客服| 古丈县|