黑马程序员--集合知识点总结(二)_measlist函数_wxgxxzj的博客-程序员秘密

技术标签: 集合  



——- android培训java培训、期待与您交流! ———-

Map接口

Map接口概念:

Map并没有继承Collection接口,可用于保存具有映射关系的数据,其提供的是key到value的映射。因此,Map集合中保存这两组值,一组用于保存key,另一组用于保存value,key和value都可以是任何引用数据类型。
注意:Map集合中的key不允许重复,每一个key只能映射一个value。

Map和Collection的区别:

Collection一次存一个元素;Map一次存一对元素。
Collection是单列集合;Map是双列集合。
Map中的存储的一对元素:一个是键,一个是值,键与值之间有对应(映射)关系。

Map

|——Hashtable:是线程同步的,不允许存储null键和null值,底层是哈希表数据结构。

|——HashMap:线程是不同步的,允许存储null值好null值,底层是哈希表数据结构,替代了Hashtable。

|——TreeMap:底层是二叉树结构,可以对map集合中的键进行指定顺序的排序。

Map中常用的方法:

//一对一模式
package MapDemo;

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

public class MapDemo {

    public static void main(String args[]){
        //demo1();
        //demo2();
        //demo3();
        demo4();
    }

    public static void demo1(){
        HashMap hm = new HashMap();
        hm.put("01", "java1");  //将指定的值与此映射中的指定键关联
        hm.put("02", "java2");
        hm.put("03", "java3");
        hm.put("04", "java4");
        hm.put("05", "java5");

        //hm.clear();      //从此映射中移除所有映射关系。

        sop(hm.size());  //返回此映射中的键-值映射关系数。

        sop(hm.values());  //返回此映射中包含的值的 Collection 视图。
    }

    public static void demo2(){
        HashMap hm = new HashMap();
        hm.put("01", "java1");  //将指定的值与此映射中的指定键关联
        hm.put("02", "java2");
        hm.put("03", "java3");
        hm.put("04", "java4");
        hm.put("05", "java5");

        Collection coll = hm.values();  //取出Map集合中的value值第一种方法

        Iterator it = coll.iterator();
        while(it.hasNext()){
            sop(it.next());
        }
    }

    public static void demo3(){
        HashMap hm = new HashMap();
        hm.put("01", "java1");  //将指定的值与此映射中的指定键关联
        hm.put("02", "java2");
        hm.put("03", "java3");
        hm.put("04", "java4");
        hm.put("05", "java5");

        Set keySet = hm.keySet();  //取出Map集合中的value值第二种方法

        Iterator it = keySet.iterator();
        while(it.hasNext()){
            String key = (String) it.next();
            String value = (String) hm.get(key);
            sop(value);
        }
    }

    public static void demo4(){
        HashMap hm = new HashMap();
        hm.put("01", "java1");  //将指定的值与此映射中的指定键关联
        hm.put("02", "java2");
        hm.put("03", "java3");
        hm.put("04", "java4");
        hm.put("05", "java5");

        Set me = hm.entrySet();      //取出Map集合中的value值第四种方法
        Iterator it = me.iterator();
        while(it.hasNext()){
            Map.Entry i = (Entry) it.next();
            String key = (String) i.getKey();
            String value = (String) i.getValue();
            sop(key+"………………"+value);
        }
    }

    public static void sop(Object obj){
        System.out.println(obj);
    }

}
//一对多模式
package MapDemo2;

import java.awt.List;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class MapDemo2 {
    

    public static void main(String[] args) {
        HashMap sdxx = new HashMap();

        ArrayList yiban = new ArrayList();
        ArrayList erban = new ArrayList();

        yiban.add(new Student("01","zhangsan"));
        yiban.add(new Student("02","lisi"));

        erban.add(new Student("01","zhaoliu"));
        erban.add(new Student("02","wangwu"));

        sdxx.put("key1", yiban);
        sdxx.put("key2", erban);

        Set keySet = sdxx.keySet();

        Iterator it = keySet.iterator();
        while(it.hasNext()){
            getInfo((ArrayList) sdxx.get(it.next()));
        }

    }

    public static void getInfo(ArrayList list){
        Iterator it = list.iterator();
        while(it.hasNext()){
            sop(it.next());
        }
    }

    public static void sop(Object obj){
        System.out.println(obj);
    }

}

class Student{
    String num;
    String name;
    public Student(String num,String name){
        this.num = num;
        this.name=name;
    }
    public String toString(){
        return num+"------"+name;
    }
}

HashMap和Hashtable的区别

public static void main(String[] args) {
        /*HashMap和Hashtable的区别?
         * 1.HashMap和Hashtable都是哈希算法
         * 
         * 2.HashMap是jdk。1.2版本出来的,线程不安全,效率快;
         *    Hashtable是jdk1.0版本出来的,线程安全,效率低
         *    
         *  3.HashMap中键,值都可以为null
         *    Hasheable中键和值不能为null*/

        HashMap<String,String> hm = new HashMap<>();
        hm.put("abc", null);
        hm.put(null, "abc");
        System.out.println(hm);//{null=abc, abc=null}

        Hashtable<String,String> ht = new Hashtable<>();
        ht.put("abc", null);
        ht.put(null, "abc");
        System.out.println(ht);// java.lang.NullPointerException
    }

使用集合的技巧:
看到Array就是数组结构,有角标,查询速度很快。
看到link就是链表结构:增删速度快,而且有特有方法。addFirst; addLast; removeFirst(); removeLast(); getFirst();getLast();
看到hash就是哈希表,就要想要哈希值,就要想到唯一性,就要想到存入到该结构的中的元素必须覆盖hashCode,equals方法。
看到tree就是二叉树,就要想到排序,就想要用到比较。
比较的两种方式:
一个是Comparable:覆盖compareTo方法;
一个是Comparator:覆盖compare方法。
LinkedHashSet,LinkedHashMap:这两个集合可以保证哈希表有存入顺序和取出顺序一致,保证哈希表有序。

集合什么时候用?
当存储的是一个元素时,就用Collection。当存储对象之间存在着映射关系时,就使用Map集合。

保证唯一,就用Set。不保证唯一,就用List。

Collections:它的出现给集合操作提供了更多的功能。这个类不需要创建对象,内部提供的都是静态方法。

Collections类常用的方法:

public class DemoCollections {
    

    /*
     * Collections和Collection的区别是
     * Collection是集合的跟接口
     * Collections是集合的工具类,,其中方法都是静态的可以直接Collections.调用其中的方法
     * 
     *  public static <T> void sort(List<T> list)
        public static <T> int binarySearch(List<?> list,T key)
        public static <T> T max(Collection<?> coll)
        public static void reverse(List<?> list)
        public static void shuffle(List<?> list)*/
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("c");
        list.add("a");
        list.add("d");
        list.add("x");
        list.add("e");
        Collections.sort(list);
        System.out.println(list);//[a, c, d, e, x]sort 对集合中的方法进行排序

        int index = Collections.binarySearch(list, "e");
        System.out.println(index);//3 利用二分查找法对指定元素的索引

        String s = Collections.max(list);
        System.out.println(s);//x 找集合中最大的

        Collections.replaceAll(list, "x", "w");//替换集合中所有的指定元素
        System.out.println(list);//[a, c, d, e, w]

        Collections.reverse(list);
        System.out.println(list);//[w, e, d, c, a]将集合中的所用元素反转

        Collections.shuffle(list);
        System.out.println(list);//[w, a, d, e, c]使用默认随机源对集合中元素进行置换,此方法可用于模拟发牌
    }

}

Arrays:用于操作数组对象的工具类,里面都是静态方法。

Arrays工具类的asList()方法的使用

package cn.itcast.vector;

import java.util.Arrays;
import java.util.List;

public class DemoAsList {
    
    public static void main(String[] args) {
        //int[] arr = {11,22,22,33,44};
        //List<int[]> li = Arrays.asList(arr);
        //System.out.println(li);//此处输出是[[[email protected]]因为此方法把整个数组当成一个对象,
                                //与下面的字符串比较,所以aslist不能转基本数据类型,只能转化引用数据类型

        //基本数据类型可以用Integer进行转换
        Integer[] arr2 = {
   11,22,22,33,44};//Integer可以自动装箱,他把每一个数当成一个对象装箱
        List<Integer> li2 = Arrays.asList(arr2);
        System.out.println(li2);
        //String[] arr = {"44","55","66","77"};
        //List<String>list=Arrays.asList(arr);//调用Array中的aslist方法
        //System.out.println(list);

    }

}

Collection 和 Collections的区别:

Collections是个java.util下的类,是针对集合类的一个工具类,提供一系列静态方法,实现对集合的查找、排序、替换、线程安全化(将非同步的集合转换成同步的)等操作。
Collection是个java.util下的接口,它是各种集合结构的父接口,继承于它的接口主要有Set和List,提供了关于集合的一些操作,如插入、删除、判断一个元素是否其成员、遍历等。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wxgxxzj/article/details/45485055

智能推荐

汽车底盘线控与动力学域控制技术_轮胎力观测_SAUTOMOTIVE的博客-程序员秘密

本文由李亮,王翔宇,程硕,陈翔,黄超,平先尧,魏凌涛联合创作摘要汽车动力学及其线控技术是汽车底盘设计中的难题,一直是学界研究的热点。汽车的智能化发展也对底盘线控执行技术提出了更高、更迫切的性能要求。该文介绍了汽车动力学与底盘线控技术的最新进展:针对汽车动力学及控制技术,介绍了动力学建模分析、动力学状态观测以及动力学稳定性控制策略的发展历程及研究现状;针对底盘线控执行技术,概述了面向智能驾驶的线控制动、线控转向、线控驱动发展历程及研究现状;针对汽车底盘集成控制技术,提出了底盘动力学域控制的概念,

SpringBoot(审计) 统计接口调用次数及成功率_weixin_30412013的博客-程序员秘密

介绍:  很多时候会需要提供一些统计记录的,比如某个服务一个月的被调用量、接口的调用次数、成功调用次数等等。优点:  使用AOP+Hendler对业务逻辑代码无侵入,完全解耦。通过spring boot自带的健康检查接口(/health)方便、安全。注意:  数据没有被持久化,只保存在内存中,重启后数据将被重置。可按需自己实现代码:  AOP:在AOP中调用Handl...

uniapp的plus获取数据_uniapp plus_苏格拉的底的博客-程序员秘密

获取设备的平台,Android还是iosswitch ( plus.os.name ) { case "Android": // Android平台: plus.android.* break; case "iOS": // iOS平台: plus.ios.* break; default: // 其它平台 break; }switch (uni.getSystemInfoSync().platform) { case 'android': .

PHP解决中文乱码问题_php报错 § é ¤_泰 戈 尔的博客-程序员秘密

初学PHP,在汉字页面间传输和转换的时候,遇到了中文乱码问题。 究其原因乱码无外乎以下几种情况: 1、html页本身的乱码问题, 解决方法:纯html页使用<meta http-equiv="Content-type=text/html;charset=utf-8"/>2、php页面本身存在乱码,解决方法:header("Content-type=text/html;charset=utf-8

ReactJS简单介绍_react推荐书籍_Tiger_Dang的博客-程序员秘密

1.什么是ReactJS简单来说:React是一个使用JavaScript创建用户界面的代码库。与编写用户界面常见的方式不同,React将每个UI元素视为一个抑制的状态机。它并不是类似于AngularJS这样的“框架”。React应用并不需要遵守MVC模型。React能够帮助你创建快速的用户界面,处理复杂的交互,而无需编写大量糟糕的代码。React 框架本身作为 MVC 当中的 V 存在, 提供

HDOJ 1012_wnjason的博客-程序员秘密

题目大意:根据题中给出的

随便推点

集合(五)——LinkedHashMap源码解析以及WeakHashMap、TreeMap的特点_中都的博客-程序员秘密

目录一、LinkedHashMap二、WeakHashMap三、TreeMap一、LinkedHashMap1、继承关系:2、基本属性:HashMap有的它都有,还多了两个:header:标记指针,用来遍历accessOrder:顺序性:true:访问有序 false:插入有序 默认:false插入有序3、构造函数和HashMap差不多,调用父类构造函数;4、LinkedHa...

为什么阿里巴巴开发规约不建议在for循环中使用"+"进行字符串拼接_阿里开发规范拼接字符串_laoli&laowang的博客-程序员秘密

字符串拼接字符串拼接是我们在Java代码中比较经常要做的事情,就是把多个字符串拼接到一起。我们都知道,String是Java中一个不可变的类,所以他一旦被实例化就无法被修改。不可变类的实例一旦创建,其成员变量的值就不能被修改。这样设计有很多好处,比如可以缓存hashcode、使用更加便利以及更加安全等。但是,既然字符串是不可变的,那么字符串拼接又是怎么回事呢?字符串不变性与字...

ELK安装部署搭建_elk部署_大母0的博客-程序员秘密

一、ELKStack简介 -- 日志分析管理(都是Java架构 -- 需要JDK底层)什么是ELK?通俗来讲,ELK是由Elasticsearch、Logstash、Kibana 三个开源软件组成的一个组合体,这三个软件当中,每个软件用于完成不同的功能,ELK又称ELKstack,官网Free and Open Search: The Creators of Elasticsearch, ELK &amp; Kibana | Elastic.1、Elasticsearchelastics..

Android性能优化之GPU过度绘制与图形渲染优化_调试gpu过度绘制有啥用_暴打小女孩的博客-程序员秘密

Android之GPU过度绘制与图形渲染优化写在前面的话本文主要对过度绘制和图形渲染做一个概念性的描述,和简单的优化措施。 如果你已对过度绘制有过一些了解,那么你应该明白,仅是简单的层级优化对过度绘制的改善是很小的。所以,这时候你可以参考这篇文章:另外如果你还想知道一些关于View优化原理,可以参考这篇文章:1. 概念 GPU过度绘制:      是指在一个像素点上绘制多次(超过一次)。举

Java程序员面试大厂的技术标准,你达到要求了吗?_chengxuyuan9527的博客-程序员秘密

今天整理了一篇Java程序员面试大厂的技术标准,看看你还差多少?文末福利BATJava 程序员的技术标准阿里巴巴扎实的计算机专业基础,包括算法和数据结构,操作系统,计算机网络,计算机体系结构,数据库等 具有扎实的Java编程基础,理解IO、多线程等基础框架 熟练使用Linux系统的常用命令及shell有一定了解 精通多线程编程,熟悉分布式,缓存,消息队列等机制;熟悉JVM,包括内存模型、类加载机制以及性能优化 精通spring mvc、orm框架(ibatis或hiber

推荐文章

热门文章

相关标签