黑马学习笔记--双例集合(Map)

来源:互联网 发布:索多玛120天 知乎 编辑:程序博客网 时间:2024/06/11 13:21

Map概述

双列集合是每个元素都有键与值两部分组成的集合,记录的是键值对对应关系。即通过键可以找到值。
- Map集合的特点:如是否可重复,是否有序仅作用在键上,如HashMap集合的键不得重复,值可以重复。
- 常用子类:
- 最常用的双列集合是Map下的子类HashMap。
- Hashtable也是Map集合的一种已被HashMap取代。

“` JAVA
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

/*
* Map:双列集合,每个元素分为键与值两部分,是一个键值得对应关系.我们经常使用键找值
*
* 最常用的Map集合是HashMap:键是唯一的且无序
*
* 用法:
*
*/
public class Demo01Test_Map {
public static void main(String[] args) {

            //创建集合对象            HashMap<String, String> map = new HashMap<String, String>();            //向集合中添加元素            map.put("姓名", "Jack");            map.put("性别", "男");            map.put("年龄", "18");            map.put("分数", "18");            //可以通过键获取值            String value = map.get("姓名");            System.out.println(value);        }

}

# Map基本使用- **A:Map(HashMap)的使用:**- 创建对象时加入两个泛型。Map<k,v>  - key - 此映射所维护的键的类型  - value - 映射值的类型- **B:常用方法:**- public V put(K key,V value)     //加入元素,则新值会覆盖掉旧值- public V get(Object key)      //根据键找值``` java/* * Map:双列集合,每个元素分为键与值两部分,是一个键值得对应关系.我们经常使用键找值 * * 最常用的Map集合是HashMap:键是唯一的且无序 * * 用法: *      创建对象时,要分别制定键的泛型与值的泛型 * *      Map(HashMap)的使用:创建对象时加入两个泛型。 *      Map<k,v> *      key - 此映射所维护的键的类型 *      value - 映射值的类型 * *      常用方法: *          public V put(K key,V value)//加入元素,则新值会覆盖掉旧值 *          public V get(Object key)    //根据键找值 *          public Set<K> keySet()      //返回所有键的集合 *          public Collection<V> values()   //返回所有值的集合 * */public class Demo01Test_Map {    public static void main(String[] args) {        //创建集合对象        HashMap<String, String> map = new HashMap<String, String>();        //向集合中添加元素        map.put("及时雨", "宋江");        map.put("玉麒麟", "卢俊义");        map.put("智多星", "高俅");        map.put("智多星", "吴用");        System.out.println(map);        //可以通过键获取值        String name = map.get("及时雨");        System.out.println(name);        String name2 = map.get("母夜叉");        System.out.println(name2);    }}<div class="se-preview-section-delimiter"></div>

Map集合遍历方式

第一种

思路: 通过keySet()方法获取所有键的集合 => 遍历键的集合,获取到每一个键 => 根据键找值

/* * Map:双列集合,每个元素分为键与值两部分,是一个键值得对应关系.我们经常使用键找值 * * 最常用的Map集合是HashMap:键是唯一的且无序 * * 用法: *      创建对象时,要分别制定键的泛型与值的泛型 * *      Map(HashMap)的使用:创建对象时加入两个泛型。 *      Map<k,v> *      key - 此映射所维护的键的类型 *      value - 映射值的类型 * *      常用方法: *          public V put(K key,V value)//加入元素,则新值会覆盖掉旧值 *          public V get(Object key)    //根据键找值 *          public Set<K> keySet()      //返回所有键的集合 *          public Collection<V> values()   //返回所有值的集合 *       Map没有迭代器方法,最常用的遍历方法:先获取所有键的集合,迭代该集合,依次获取每一个键.通过键找值. */public class Demo01Test_Map {    public static void main(String[] args) {        //创建集合对象        HashMap<String, String> map = new HashMap<String, String>();        //向集合中添加元素        map.put("及时雨", "宋江");        map.put("玉麒麟", "卢俊义");        map.put("智多星", "高俅");        map.put("智多星", "吴用");//返回所有键的集合        Set<String> keySet = map.keySet();        System.out.println(keySet);        //返回所有值得集合        Collection<String> values = map.values();        System.out.println(values);        //map集合的常用遍历        Set<String> keySet2 = map.keySet();        System.out.println("==========================");        //迭代所有键的Set集合,依次获取每一个键        Iterator<String> iterator = keySet2.iterator();        while(iterator.hasNext()) {            String thisKey = iterator.next();            //通过键找值,记住这里使用map集合通过键找值            String thisValue = map.get(thisKey);            System.out.println(thisKey+"="+thisValue);        }    }}<div class="se-preview-section-delimiter"></div>

第二种

思路: 通过entrySet()方法获取所有键值对对象的集合 => 遍历键值对对象的集合,获取到每一个键值对对象 => 根据键值对对象找键和值

/* * Map集合的第二种遍历方式: * *  Set<Map.Entry<K,V>>  entrySet()    方法用于返回某个集合所有的键值对对象。 *  Entry将键值对对应关系封装成了对象。 可以从一个Entry对象中中获取一个键值对的键与值。 * *  Map.Entry是一个嵌套类 * * Entry中的方法如下: * K getKey()       获取键 * V getValue()     获取值 */public class Demo02Entry {        public static void main(String[] args) {            //创建集合对象            HashMap<String, String> map = new HashMap<String, String>();            //向集合中添加元素            map.put("及时雨", "宋江");            map.put("玉麒麟", "卢俊义");            map.put("智多星", "吴用");            //获取集合中所有的键值对对象的Set集合            Set<Entry<String,String>> entrySet = map.entrySet();            //迭代集合,依次获取每一个键值对对象            for(Entry<String,String> thisEntry: entrySet) {                //通过键值对对象获取键                String key = thisEntry.getKey();                //通过键值对对象获取值                String value = thisEntry.getValue();                System.out.println(key+":"+value);            }        }        }<div class="se-preview-section-delimiter"></div>

LinkedHashMap

import java.util.LinkedHashMap;import java.util.Set;/* * LinkedHashMap: *          Linked链表结构,保证元素有顺序 *          Hash结构保证元素唯一 *          以上约束对键起作用 */public class Demo03LinkedHashMap {    public static void main(String[] args) {        //创建集合对象        LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();        //向集合中添加元素        map.put("近平", "丽媛");        map.put("路人甲", "路人乙");        map.put("Jack", "Rose");        map.put("Jack", "Lily");        //观察集合元素        System.out.println(map);        //遍历集合        //获取所有键的集合        Set<String> keys = map.keySet();        //迭代所有键的集合        for(String thisKey: keys) {            //通过键找值            String thisValue = map.get(thisKey);            //打印信息            System.out.println(thisKey+":"+thisValue);        }    }}<div class="se-preview-section-delimiter"></div>

集合相关其他

可变参数

Collections中有一个方法可以一次加入多个元素
public static boolean addAll(Collection

Arrays的toString方法与Object的toString方法

mport java.util.ArrayList;import java.util.Arrays;/* * Arrays:数组工具类,包含了许多数组工具方法 * public static String toString(Xxx[] a)           //返回字符串内容,该方法不是重写的Object类中的toString方法,而是自己又定义的toString方法 * * Object:toString方法 * System.out.println方法在打印时,会调用被打印者的toString方法 */public class Demo03Arrays_toString {    public static void main(String[] args) {        //如果自定义类型,不想在打印变量时打印出对象地址,而希望打印出对象属性值,则可以重写该类的toString方法        Person p = new Person("Jack",16);        System.out.println(p);        ArrayList<Person> list = new ArrayList<Person>();        list.add(new Person("Jack",12));        list.add(new Person("Rose",19));        System.out.println(list);        int[] arr = {2,45,666,55};        System.out.println(arr);        //Arrays的toString方法:看到某个数组中的内容        String ArrayInner = Arrays.toString(arr);        System.out.println(ArrayInner);    }}

数组转集合

  • 数组转集合使用的是,Arrays类中的asList方法.方法签名:public static <T> List<T> asList(T... a)

  • 解释:

        静态方法,直接类名.方式调用        方法的形参是可变参数类型,可变参数本质也是数组,传入实际数组,将该数组转成集合返回
  • 注意:
    数组转成集合之后,该集合不支持添加或者删除操作,否则会抛出UnsupportedOperationException异常
import java.util.Arrays;import java.util.List;/* * 数组转集合 * * Arrays: *  public static <T> List<T> asList(T... a)                //数组转集合 * * UnsupportedOperationException:不支持的添加或者删除操作 */public class Demo04Arrays_asList {    public static void main(String[] args) {        List<String> newList = Arrays.asList("Jack","Rose","Trump");        System.out.println(newList);        //使用asList转成的集合,不能添加或者删除元素,该方法返回的集合长度不能改变!所以,22行运行报错.        newList.add("Obama");        System.out.println(newList);    }}

集合转数组

  • 集合ArrayList转数组使用的是,ArrayList中的toArray()方法。
  • 该方法是重载的方法:
    public Object[] toArray()        public <T> T[] toArray(T[] a)
import java.util.ArrayList;import java.util.Arrays;import java.util.List;/* * 集合转数组: *      集合ArrayList转为数组的方法为ArrayList的以下两个方法: *      public Object[] toArray()                           //集合转数组 *      public <T> T[] toArray(T[] a) */public class Demo05ArrayList_toArray {    public static void main(String[] args) {        List<Integer> list = new ArrayList<Integer>();        list.add(2);        list.add(7);        list.add(6);        list.add(10);        list.add(9);        //调用方法,将集合转为Object类型数组        Object[] objArr = list.toArray();        System.out.println(Arrays.toString(objArr));        Integer i = (Integer) objArr[0];        //如果使用元素类型Integer的特有方法,则必须先强转成Integer,否则intValue方法不能使用,比较麻烦        System.out.println(i.intValue());        System.out.println("=======================");        //调用方法,将集合转为带类型的数组        Integer[] intArr = new Integer[2];        Integer[] returnArr = list.toArray(intArr);        //如果参数数组足够放下集合中所有元素,就放入参数数组中,返回参数数组        //如果参数数组无法放下集合中所有元素,则参数数组只起到确定类型作用,方法逻辑会自动创建新数组存储集合内容,并返回.        System.out.println(Arrays.toString(intArr));        System.out.println(Arrays.toString(returnArr));        //带泛型后,元素类型直接就是集合中的元素类型,避免了强转的问题        Integer integer = returnArr[0];        System.out.println(integer.intValue());    }}
0 0
原创粉丝点击