国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java編程基礎19——Map集合&斗地主案例

ygyooo / 1611人閱讀

摘要:使用默認隨機源對指定列表進行置換。將集合排序使用二分搜索法搜索指定列表,以獲得指定對象根據元素的自然順序,返回給定的最大元素。

1_Map集合概述和特點

A:Map接口概述

查看API可以知道:

將鍵映射到值的對象

一個映射不能包含重復的鍵

每個鍵最多只能映射到一個值

B:Map接口和Collection接口的不同

Map是雙列的,Collection是單列的

Map的鍵唯一,Collection的子體系Set的元素是唯一的

Map集合的數據結構只針對鍵有效,跟值無關;Collection集合的數據結構是針對元素有效

HashMap: 鍵是哈希算法

TreeMap: 鍵是二叉樹算法

問: Set集合底層依賴Map,還是Map集合底層依賴Set?

2_Map集合的功能概述

A:Map集合的功能概述

a:添加功能

V put(K key,V value):添加元素。

如果鍵是第一次存儲,就直接存儲元素,返回null

如果鍵不是第一次存在,就用值把以前的值替換掉,返回以前的值

b:刪除功能

void clear():移除所有的鍵值對元素

V remove(Object key):根據鍵刪除鍵值對元素,并把值返回

c:判斷功能

boolean containsKey(Object key):判斷集合是否包含指定的鍵

boolean containsValue(Object value):判斷集合是否包含指定的值

boolean isEmpty():判斷集合是否為空

d:獲取功能

Set> entrySet():

V get(Object key):根據鍵獲取值

Set keySet():獲取集合中所有鍵的集合

Collection values():獲取集合中所有值的集合

e:長度功能

int size():返回集合中的鍵值對的個數

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
public class Demo1_Map {
    public static void main(String[] args) {
//        demo1();
//        demo2();
        Map map = new HashMap<>();
        Integer i1 = map.put("張三", 23);
        Integer i2 = map.put("李四", 24);
        Integer i3 = map.put("王五", 25);
        
        Collection c = map.values();
        System.out.println(c);
        System.out.println(map.size());
    }

    private static void demo2() {
        Map map = new HashMap<>();
        map.put("張三", 23);
        map.put("李四", 24);
        map.put("王五", 25);
        
//        Integer value = map.remove("張三");            //根據鍵刪除鍵值對元素,并把值返回
//        System.out.println(value);
        System.out.println(map.containsKey("張三"));//判斷集合是否包含指定的鍵
        System.out.println(map.containsValue(23));    //判斷集合是否包含指定的值
        System.out.println(map);
    }

    private static void demo1() {
        Map map = new HashMap<>();
        Integer i1 = map.put("張三", 23);
        Integer i2 = map.put("李四", 24);
        Integer i3 = map.put("王五", 25);
        Integer i4 = map.put("張三", 26);            //相同的鍵不存儲,值覆蓋
        
        System.out.println(map);
        System.out.println(i1);
    }
}
3_Map集合的遍歷之鍵找值

A:鍵找值思路:

獲取所有鍵的集合
*Set keySet():獲取集合中所有鍵的集合

遍歷鍵的集合,獲取到每一個鍵

根據鍵找值
*V get(Object key):根據鍵獲取值

B:案例演示

Map集合的遍歷之鍵找值

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class Demo2_Iterator {
    public static void main(String[] args) {
        Map map = new HashMap<>();
        Integer i1 = map.put("張三", 23);
        Integer i2 = map.put("李四", 24);
        Integer i3 = map.put("王五", 25);
        
//        Integer i = map.get("張三");
//        System.out.println(i);//根據鍵獲取值
        
        //獲取所有的鍵
        Set keySet = map.keySet();        //獲取所有鍵的集合
        Iterator it = keySet.iterator();//獲取迭代器
        while(it.hasNext()) {
            String key = it.next();                //獲取每一個鍵
            Integer value = map.get(key);
            System.out.println(key + "..." + value);
        }
        
        //使用增強for循環遍歷
        for (String key : map.keySet()) {
            System.out.println(key + "..." + map.get(key));
        }
    }
}
4_Map集合的第二種迭代,根據鍵值對對象找鍵和值(雙列集合不能直接迭代)

A:鍵值對對象找鍵和值思路:(畫圖演示)

獲取所有鍵值對對象的集合

遍歷鍵值對對象的集合,獲取到每一個鍵值對對象

根據鍵值對對象找鍵和值

B:案例演示

Map集合的遍歷之鍵值對對象找鍵和值

Set> entrySet() 返回此映射中包含的映射關系的Set視圖

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class Demo3_Iterator {    
    public static void main(String[] args) {
        Map map = new HashMap<>();
        map.put("張三", 23);
        map.put("李四", 24);
        map.put("王五", 25);
        map.put("趙六", 26);
        //Map.Entry說明Entry是Map的內部接口,將鍵和值封裝成了Entry對象,并存儲在Set集合中
        Set> entrySet = map.entrySet();
        //獲取每一個對象
        Iterator> it = entrySet.iterator();
        while(it.hasNext()) {
            //獲取每一個Entry對象
            Map.Entry en = it.next();    //父類引用指向子類對象
            //Entry en = it.next();    //直接獲取的是子類對象
            String key = en.getKey();                    //根據鍵值對對象獲取鍵
            Integer value = en.getValue();                //根據鍵值對對象獲取值
            System.out.println(key + "..."  + value);
        }
        
        //使用增強for循環迭代
        for (Map.Entry en : map.entrySet()) {
            System.out.println(en.getKey() + "..." + en.getValue());
        }
    }
}
interface Inter {
    interface Inter2 {
        public void show();
    }
}

class Demo implements Inter.Inter2 {

    @Override
    public void show() {
    }    
}
5_HashMap集合鍵是Student值是String的案例

A:案例演示

HashMap集合鍵是Student值是String的案例

import java.util.HashMap;
import net.allidea.bean.StudentMap;
public class Demo5_HashMap {
    //鍵是學生對象,代表每一個學生
    //值是String,代表學生籍貫
    public static void main(String[] args) {
        HashMap hm = new HashMap<>();
        hm.put(new StudentMap("張三", 23), "北京");
        hm.put(new StudentMap("張三", 23), "上海");
        hm.put(new StudentMap("李四", 24), "武漢");
        hm.put(new StudentMap("王五", 25), "天津");
        System.out.println(hm);
    }
}
package net.allidea.bean;
public class StudentMap {
    private String name;
    private int age;
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + age;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        StudentMap other = (StudentMap) obj;
        if (age != other.age)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }
    public StudentMap() {
        super();
        
    }
    public StudentMap(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "StudentMap [name=" + name + ", age=" + age + "]";
    }
}
6_LinkedHashMap的概述和使用

A:案例演示

LinkedHashMap的特點

底層是鏈表實現的可以保證怎么存就怎么取

import java.util.LinkedHashMap;
public class Demo6_LinkedHashMap {
    public static void main(String[] args) {
        LinkedHashMap lhm = new LinkedHashMap<>();
        lhm.put("張三",23);
        lhm.put("趙六",26);
        lhm.put("李四",24);
        lhm.put("王五",25);    
        System.out.println(lhm);
    }
}
7_TreeMap集合鍵是Student值是String的案例)

A:案例演示

TreeMap集合鍵是Student值是String的案例

import java.util.Comparator;
import java.util.TreeMap;
import net.allidea.bean.StudentMap;
public class Demo7_TreeMap {
    public static void main(String[] args) {
//        demo1();
        TreeMap tm = new TreeMap<>(new Comparator() {

            @Override
            public int compare(StudentMap s1, StudentMap s2) {
                int num = s1.getName().compareTo(s2.getName());        //按照姓名比較        
                return num == 0 ? s1.getAge() - s2.getAge() : num;
            }
        });
        tm.put(new StudentMap("張三", 23), "北京");
        tm.put(new StudentMap("趙六", 26), "深圳");    
        tm.put(new StudentMap("王五", 25), "廣州");
        tm.put(new StudentMap("李四", 24), "上海");
        
        System.out.println(tm);
    }

    private static void demo1() {
        TreeMap tm = new TreeMap<>();
        tm.put(new StudentMap("張三", 23), "北京");
        tm.put(new StudentMap("李四", 24), "上海");
        tm.put(new StudentMap("王五", 25), "廣州");
        tm.put(new StudentMap("趙六", 26), "深圳");    
        
        System.out.println(tm);
    }
}
public class StudentMap implements Comparable{
    private String name;
    private int age;
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + age;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        StudentMap other = (StudentMap) obj;
        if (age != other.age)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }
    public StudentMap() {
        super();
        
    }
    public StudentMap(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "StudentMap [name=" + name + ", age=" + age + "]";
    }
    @Override
    public int compareTo(StudentMap o) {
        int num = this.age - o.age;                //以年齡為主要條件
        return num == 0 ? this.name.compareTo(o.name) : num;
    }
}
8_統計字符串中每個字符出現的次數

A:案例演示

需求:統計字符串中每個字符出現的次數

import java.util.HashMap;
public class Demo8_test1 {
    public static void main(String[] args) {
        //1.定義一個字符串
        String s = "aaaaabbbbbcccccc";
        //2.將字符串轉換為字符數組
        char[] arr = s.toCharArray();
        //3.定義雙列集合,存儲字符串中字符以及字符出現的次數
        HashMap hm = new HashMap<>();
        //4.遍歷字符數組獲取每一個字符,并將字符存儲在雙列集合中
        for (char c : arr) {
            //5.做判斷,如果集合不包括這個鍵,就將該字符當做鍵,值為1存儲,如果集合中包含這個鍵,就將值加1存儲
            /*if(hm.containsKey(c)) {                //如果不包含這個鍵
                hm.put(c, 1);
            }else {
                hm.put(c, hm.get(c) + 1);
            }*/
            hm.put(c, !hm.containsKey(c) ? 1 : hm.get(c) + 1);
        }
        //6.打印雙列結合獲取字符出現的次數
        for (Character key : hm.keySet()) {            //hm.keySet()代表所有鍵的集合
            System.out.println(key + "=" + hm.get(key));//hm.get(ket)根據鍵獲取值
        }
    }
}
9_集合嵌套之HashMap嵌套HashMap

A:案例演示

集合嵌套之HashMap嵌套HashMap

需求: javaSE有A班和B班,定義成雙列集合,鍵是學生對象,值是學生的歸屬地,為了便于管理,把a和b期都歸屬JavaSE這個大的集合中.

import java.util.HashMap;
import net.allidea.bean.StudentMap;
public class Demo9_HashMapHashMap {
    public static void main(String[] args) {
        HashMap hmA = new HashMap<>();
        hmA.put(new StudentMap("張三", 23), "北京");
        hmA.put(new StudentMap("李四", 24), "北京");
        hmA.put(new StudentMap("王五", 25), "上海");
        hmA.put(new StudentMap("趙六", 26), "杭州");
        
        HashMap hmB = new HashMap<>();
        hmB.put(new StudentMap("唐三", 32), "北京");
        hmB.put(new StudentMap("悟空", 15), "北京");
        hmB.put(new StudentMap("悟能", 10), "上海");
        hmB.put(new StudentMap("悟凈", 20), "杭州");
        
        HashMap, String> hm = new HashMap<>();
        hm.put(hmA, "班級A");
        hm.put(hmB, "班級B");
        
        //遍歷雙列結合
        for (HashMap h : hm.keySet()) {            //hm.keySet()代表的是雙列集合中鍵的集合
            String value = hm.get(h);                            //get(h)根據鍵對象獲取值對象
            //遍歷鍵的雙列集合對象
            for (StudentMap key : h.keySet()) {                    //h.keySet()獲取集合中所有的學生鍵對象
                String value2 = h.get(key);
                System.out.println(key + "..." + value2 + "..." + value);
            }        
        }
    }
}
10_HashMap和Hashtable的區別)

A:共同點:

底層都是哈希算法,都是雙列集合

B:區別

1.Hashtable是JDK1.0版本出現的,是線程安全的,效率低; HashMap是JDK1.2版本出現的,是線程不安全的,效率高

2.Hashtable不可以存儲null鍵和null值; HashMap可以存儲null鍵和null值(目的是為了讓后續代碼可以繼續執行)

C:案例演示

HashMap和Hashtable的區別

    public static void main(String[] args) {
        HashMap hm = new HashMap<>();
        hm.put(null, 23);
        hm.put("李四", null);
        System.out.println(hm);
        
        Hashtable ht = new Hashtable<>();
        ht.put(null, 23);
        ht.put("李四", null);
        System.out.println(ht);
    }
11_Collections工具類的概述和常見方法講解

A:Collections類概述

針對集合操作 的工具類

B:Collections成員方法
public static void sort(List list) 根據元素的自然順序 對指定列表按升序進行排序。
public static int binarySearch(List list,T key) 使用二分搜索法搜索指定列表,以獲得指定對象
public static T max(Collection coll) 根據元素的自然順序,返回給定 collection 的最大元素。
public static void reverse(List list) 反轉指定列表中元素的順序。
public static void shuffle(List list) 使用默認隨機源對指定列表進行置換。

import java.util.ArrayList;
import java.util.Collections;
public class Demo1_Collections {
    public static void main(String[] args) {
        ArrayList list = new ArrayList<>();
        list.add("a");
        list.add("c");
        list.add("d");
        list.add("e");
        Collections.sort(list);            //將集合排序
        System.out.println(Collections.binarySearch(list, "e"));//使用二分搜索法搜索指定列表,以獲得指定對象
        System.out.println(Collections.max(list));    //根據元素的自然順序,返回給定 collection 的最大元素。
        Collections.reverse(list);                    //反轉集合
        Collections.shuffle(list);                    //隨機置換,洗牌
        System.out.println(list);                    
    }
}
12_模擬斗地主洗牌和發牌

A:案例演示

模擬斗地主洗牌和發牌,牌沒有排序

import java.util.ArrayList;
import java.util.Collections;
public class Demo2_test {
    public static void main(String[] args) {
        //1.定義一副撲克牌
        String[] num = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
        String[] color = {"紅桃","黑桃","方片","梅花"};
        ArrayList poker = new ArrayList<>();
        //拼接花色和數字
        for(String s1 : color) {
            for(String s2 : num) {
                poker.add(s1.concat(s2));            //concat鏈接兩個字符串
            }
        }
        poker.add("小王");
        poker.add("大王");
        //2.洗牌
        Collections.shuffle(poker);
        //3.發牌
        ArrayList dushen = new ArrayList<>();
        ArrayList dusheng = new ArrayList<>();
        ArrayList duxia = new ArrayList<>();
        ArrayList dipai = new ArrayList<>();
        
        for (int i = 0; i < poker.size(); i++) {
            if(i >= poker.size() - 3) {
                dipai.add(poker.get(i));                    //將三張底牌存儲在底牌集合中
            } else if(i % 3 == 0) {
                dushen.add(poker.get(i));
            } else if(i % 3 == 1) {
                dusheng.add(poker.get(i));
            } else{
                duxia.add(poker.get(i));
            }
        }
        //4.看牌
        System.out.println(dushen);
        System.out.println(dusheng);
        System.out.println(duxia);
        System.out.println(dipai);
    }
}
14_模擬斗地主洗牌和發牌并對牌進行排序的代碼實現

A:畫圖演示

畫圖說明排序原理

B:案例演示

模擬斗地主洗牌和發牌并對牌進行排序的代碼實現

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
public class Demo3_test {
    public static void main(String[] args) {
        //1.定義一副撲克牌
        String[] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        String[] color = {"紅桃","黑桃","方片","梅花"};
        HashMap hm = new HashMap<>();                //存儲索引和撲克牌
        ArrayList list = new ArrayList<>();                //存儲索引
        int index = 0;
        
        //拼接撲克牌并將索引和撲克牌存儲在hm中
        for (String s1 : num) {                            //獲取數字
            for(String s2 : color) {                    //獲取顏色
                hm.put(index, s2.concat(s1));
                list.add(index);                        //將索引0-51添加到list集合中
                index++;
            }
        }
        //將小王添加到雙列集合中
        hm.put(index, "小王");
        list.add(index);                        //將索引52添加到list集合中
        index++;
        hm.put(index, "大王");
        list.add(index);                        //將索引53添加到list集合中
        //洗牌
        Collections.shuffle(list);
        //發牌
        TreeSet dushen = new TreeSet<>();
        TreeSet dusheng = new TreeSet<>();
        TreeSet duxia = new TreeSet<>();
        TreeSet dipai = new TreeSet<>();
        
        for(int i = 0; i < list.size(); i++) {
            if(i >= list.size() - 3) {
                dipai.add(list.get(i));                //將三張底牌存儲在底牌集合中
            }else if(i % 3 == 0) {
                dushen.add(list.get(i));
            }else if(i % 3 == 1) {
                dusheng.add(list.get(i));
            }else{
                duxia.add(list.get(i));
            }
        }
        
        //看牌
        lookPoker(hm, dushen, "賭神");
        lookPoker(hm, dusheng, "賭圣");
        lookPoker(hm, duxia, "賭俠");
        lookPoker(hm, dipai, "底牌");
        
    }
    //返回值類型void,參數列表HashMap、TreeSet、String name
    public static void lookPoker(HashMap hm,TreeSet ts , String name) {
        System.out.print(name + "的牌是:");
        for(Integer i : ts) {                        //i代表雙列集合中的每一個鍵
            System.out.print(hm.get(i) + "    ");
        }
        System.out.println();
    }
}
15_集合框架(泛型固定下邊界)

? super E

public class Demo4_Genric {
    public static void main(String[] args) {
        TreeSet ts1 = new TreeSet<>(new CompareByAge());
        ts1.add(new StudentMap("張三", 23));
        ts1.add(new StudentMap("李四", 14));
        ts1.add(new StudentMap("王五", 23));
        ts1.add(new StudentMap("趙六", 33));
        
        TreeSet ts2 = new TreeSet<>(new CompareByAge());
        ts2.add(new Student("張三", 23));
        ts2.add(new Student("李四", 14));
        ts2.add(new Student("王五", 23));
        ts2.add(new Student("趙六", 33));
        
        System.out.println(ts2);
    }
}

class CompareByAge implements Comparator {
    @Override
    public int compare(StudentMap s1, StudentMap s2) {
        int num = s1.getAge() - s2.getAge();
        return num == 0 ? s1.getName().compareTo(s2.getName()) : num;
    }
}
16_集合總結

Collection

List(存取有序,有索引,可以重復)

ArrayList

底層是數組實現的,線程不安全,查找和修改快,增和刪比較慢

LinkedList

底層是鏈表實現的,線程不安全,增和刪比較快,查找和修改比較慢

Vector

底層是數組實現的,線程安全的,無論增刪改查都慢

如果查找和修改多,用ArrayList

如果增和刪多,用LinkedList

如果都多,用ArrayList

Set(存取無序,無索引,不可以重復)

HashSet

底層是哈希算法實現

LinkedHashSet

底層是鏈表實現,但是也是可以保證元素唯一,和HashSet原理一樣

TreeSet

底層是二叉樹算法實現

一般在開發的時候不需要對存儲的元素排序,所以在開發的時候大多用HashSet,HashSet的效率比較高

TreeSet在面試的時候比較多,問你有幾種排序方式,和幾種排序方式的區別

Map

HashMap

底層是哈希算法,針對鍵

LinkedHashMap

底層是鏈表,針對鍵

TreeMap

底層是二叉樹算法,針對鍵

開發中用HashMap比較多

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77228.html

相關文章

  • 1、Map接口 2、模擬地主洗牌發牌

    摘要:中的集合稱為單列集合,中的集合稱為雙列集合。洗牌通過數字完成洗牌發牌發牌將每個人以及底牌設計為將最后張牌直接存放于底牌,剩余牌通過對取模依次發牌。存放的過程中要求數字大小與斗地主規則的大小對應。 01Map集合概述 A:Map集合概述: 我們通過查看Map接口描述,發現Map接口下的集合與Collection接口下的集合,它們存儲數據的形式不同 ? a:Collection中的集...

    付倫 評論0 收藏0
  • Java集合框架——Map接口

    摘要:第三階段常見對象的學習集合框架集合在實際需求中,我們常常會遇到這樣的問題,在諸多的數據中,通過其編號來尋找某一些信息,從而進行查看或者修改,例如通過學號查詢學生信息。面試題和的區別是單列集合的頂層接口,有子接口和。 第三階段 JAVA常見對象的學習 集合框架——Map集合 showImg(https://segmentfault.com/img/remote/1460000019683...

    princekin 評論0 收藏0
  • Java編程基礎34——JDBC&amp;DBUtil

    摘要:不用自己來創建,而是通過池來獲取對象使用完后,調用的方法也不會真的關閉,而是把歸還給池連接池技術可以完成對象的再次利用接口為數據庫連接池提供了公共的接口各個廠商需要讓自己的連接池實現這個接口。 1.DButils工具類的介紹個三個核心類 A: 概述 DBUtils是java編程中的數據庫操作實用工具,小巧簡單實用。 DBUtils封裝了對JDBC的操作,簡化了JDBC操作,可以少...

    svtter 評論0 收藏0
  • map集合的學習

    摘要:提供了專門的集合類用來存放這種對象關系的對象,即接口。中的集合,元素是成對存在的理解為夫妻。中的集合稱為單列集合,中的集合稱為雙列集合。根據指定的鍵,在集合中獲取對應的值。 day04 【Map】 主要內容 Map集合 教學目標 [ ] 能夠說出Map集合特點 [ ] 使用Map集合添加方法保存數據 [ ] 使用鍵找值的方式遍歷Map集合 [ ] 使用鍵值對的方式遍歷Map集合 [ ...

    peixn 評論0 收藏0

發表評論

0條評論

ygyooo

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<