Map集合的功能概述

  • 添加功能

* V put(K key,V value):添加元素。
            * 如果键是第一次存储,就直接存储元素,返回null
            * 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值

  • 删除功能

* void clear():移除所有的键值对元素
        * V remove(Object key):根据键删除键值对元素,并把值返回

  • 判断功能

* boolean containsKey(Object key):判断集合是否包含指定的键
        * boolean containsValue(Object value):判断集合是否包含指定的值
        * boolean isEmpty():判断集合是否为空

  • 获取功能

* Set<Map.Entry<K,V>> entrySet():
        * V get(Object key):根据键获取值
        * Set<K> keySet():获取集合中所有键的集合
        * Collection<V> values():获取集合中所有值的集合

  • 长度功能

* int size():返回集合中的键值对的个数

import java.util.Collection;
import java.util.HashMap;
import java.util.Map; public class Demo1_Map { public static void main(String[] args) {
/* Map接口:
* 将键映射到值的对象
* 一个映射不能包含重复的键
* 每个键最多只能映射到一个值
Map接口和Collection接口的不同
* Map是双列的,Collection是单列的
* Map的键唯一,Collection的子体系Set是唯一的
* Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构 是针对元素有效*/
Map<String, Integer> map = new HashMap<>();
Integer i1 = map.put("张三", 23);
Integer i2 = map.put("李四", 24);
Integer i3 = map.put("赵武", 21);
Integer i4 = map.put("张三", 24); /* System.out.println(map);//{赵武=21, 李四=24, 张三=24} System.out.println(i1);//null
System.out.println(i2);//null
System.out.println(i3);//null
// System.out.println(i4);//23 //相同的键不存储,值覆盖,返回被覆盖的值 Integer value = map.remove("张三"); //根据键删除元素,返回键对应的值
System.err.println(value);//24
System.out.println(map);//{赵武=21, 李四=24} System.out.println(map.containsKey("李四"));//true
System.out.println(map.containsValue(21));//true
*/
Collection<Integer> collection = map.values();//获取所有的值
System.out.println(collection);//[21, 24, 24]
System.out.println(map.size());//3 //返回集合中键值得个数 } }

Map遍历:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import javax.swing.text.html.parser.Entity; public class Demo2_Iterator { public static void main(String[] args) {
//遍历Map
Map<String, Integer> map = new HashMap<>();
Integer i1 = map.put("张三", 23);
Integer i2 = map.put("李四", 24);
Integer i3 = map.put("赵武", 21);
Integer i4 = map.put("张三", 24); /* Set<String> keySet = map.keySet(); //获取所有的键集合
Iterator<String> iterator = keySet.iterator();
while(iterator.hasNext()) {
String key = iterator.next();
Integer value = map.get(key);
System.out.println(key+"="+value);
}*/ //使用增强for
/* for(String key:map.keySet()) {
System.out.println(key+"="+map.get(key));
}*/ // //使用Map.Entry
// //Entry是Map的内部接口
// //将键和值封装成Entry对象,并存储在Set集合中
// Set<Map.Entry<String, Integer>> entries = map.entrySet();
// Iterator<Map.Entry<String, Integer>> iterator = entries.iterator();
// while (iterator.hasNext()) {
// Map.Entry<String,Integer> entry = iterator.next();//父类引用指向子 类对象
// String key = entry.getKey();
// Integer value = entry.getValue();
// System.out.println(key+"="+value);
// } //改for
//Entry是Map.Entry的子类对象
for(Entry<String, Integer> entry:map.entrySet()) {
System.out.println(entry.getKey()+"="+entry.getValue());
}
} }
HashMap存储:
import java.util.HashMap;

import com.fly.bean.Student;

public class Demo3_HashMap {

    public static void main(String[] args) {
// HashMap存储
//Student需要重写hashCode(),equals()方法
HashMap<Student, String> hMap = new HashMap<>();
hMap.put(new Student("张三",19),"aa");
hMap.put(new Student("李四",19),"cc");
hMap.put(new Student("王五",19),"dd");
hMap.put(new Student("张三",19),"bb"); System.out.println(hMap);
} }

LinkedHashMap:

import java.util.LinkedHashMap;

public class Demo4_LinkedHashMap {

    public static void main(String[] args) {
LinkedHashMap<String, Integer> lHashMap = new LinkedHashMap<>();
lHashMap.put("b", 11);
lHashMap.put("a", 22);
lHashMap.put("d", 44);
lHashMap.put("c", 33); System.out.println(lHashMap);//{b=11, a=22, d=44, c=33}
} }

TreeMap:

import java.util.TreeMap;

import com.fly.bean.Student;

public class Demo5_TreeMap {
public static void main(String[] args) {
TreeMap<Student, String> tMap = new TreeMap<>();
tMap.put(new Student("张三",13), "aa");
tMap.put(new Student("张三",13), "bb");
tMap.put(new Student("李四",12), "cc");
tMap.put(new Student("王五",15), "dd"); System.out.println(tMap);//{Student [name=李四, age=12]=cc, Student [name= 张三, age=13]=bb, Student [name=王五, age=15]=dd} //Student需实现Comparable接口,重写的部分
/* public class Student implements Comparable<Student> {
@Override
public int compareTo(Student o) {
int num = this.age - o.age;
return num==0 ? this.name.compareTo(o.name) : num;
}
}
*/ }
}

练习:统计字符串中每个字符出现的次数

import java.util.HashMap;

public class Test1 {

    public static void main(String[] args) {
// 统计字符串中每个字符出现的次数
String s = "aaabbbbccccc";
char[] arr = s.toCharArray();//将字符串转换为字符数组
// 定义双列集合,存储字符串中字符以及字符出现的次数
HashMap<Character, Integer> hMap = new HashMap<>();
for (char c : arr) {
//有就加1,没有置为1
hMap.put(c, hMap.containsKey(c) ? hMap.get(c)+1 : 1);
}
for (Character key : hMap.keySet()) {
System.out.println(key+"="+hMap.get(key));
} } }

集合嵌套之HashMap嵌套HashMap:

import java.util.HashMap;

import com.fly.bean.Student;

public class Demo6_HashMap2 {

    public static void main(String[] args) {
// 集合嵌套之HashMap嵌套HashMap
HashMap<Student, String> hMap1 = new HashMap<>();
hMap1.put(new Student("a",12),"bj");
hMap1.put(new Student("b",13),"sh");
hMap1.put(new Student("c",15),"gd");
hMap1.put(new Student("d",12),"sz"); HashMap<Student, String> hMap2 = new HashMap<>();
hMap2.put(new Student("e",12),"bj");
hMap2.put(new Student("f",13),"sh");
hMap2.put(new Student("g",15),"gd");
hMap2.put(new Student("h",12),"sz"); HashMap<HashMap<Student, String>, String> hashMap = new HashMap<>();
hashMap.put(hMap1, "1101");
hashMap.put(hMap2, "1102"); for (HashMap<Student, String> sk : hashMap.keySet()) {
System.out.println(hashMap.get(sk));
for (Student key : sk.keySet()) {
System.out.println(key+"="+sk.get(key));
}
}
} }

HashMap和Hashtable的区别:
(面试常考)

import java.util.HashMap;
import java.util.Hashtable; public class Demo7_Hashtable { public static void main(String[] args) {
/* HashMap和Hashtable的区别
Hashtable是JDK1.0版本出现的,是线程安全的,效率低,HashMap是JDK1.2版本 出现的,是线程不安全的,效率高
Hashtable不可以存储null键和null值,HashMap可以存储null键和null值*/
HashMap<String, Integer> hashMap = new HashMap<>();
hashMap.put(null, null);
System.out.println(hashMap);//{null=null} Hashtable<String, Integer> hashtable = new Hashtable<>();
// hashtable.put(null, 1);
// hashtable.put("a", null);
// System.out.println(hashtable);//NullPointerException } }

Collections类概述:
针对集合操作 的工具类

  • Collections成员方法

public static <T> void sort(List<T> list) 排序
        public static <T> int binarySearch(List<?> list,T key) 二分查找 找不到返回-

的插入点-1
        public static <T> T max(Collection<?> coll) 根据默认排序结果获取集合中的最

大值
        public static void reverse(List<?> list) 反转
        public static void shuffle(List<?> list) 随机置换

泛型固定下边界与泛型固定上边界:

  • ? super E  ,  E是子类 ?是父类   把子类对象拿出来放到父类的比较器中
  • ? extends E , 泛型固定上边界 ?是任意子类,E是父类固定的 父类集合存放子类对象

10 HashMap,Map.Entry,LinkedHashMap,TreeMap,Hashtable,Collections类的更多相关文章

  1. hashMap 底层原理+LinkedHashMap 底层原理+常见面试题

    1.源码 java1.7    hashMap 底层实现是数组+链表 java1.8 对上面进行优化  数组+链表+红黑树 2.hashmap  是怎么保存数据的. 在hashmap 中有这样一个结构 ...

  2. Map集合、HashMap集合、LinkedHashMap集合、Hashtable集合、Collections工具类和模拟斗地主洗牌和发牌

    1.Map集合概述和特点 * A:Map接口概述  * 查看API可以知道:          * 将键映射到值的对象          * 一个映射不能包含重复的键          * 每个键最多 ...

  3. Map,Hashmap,LinkedHashMap,Hashtable,TreeMap

    java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap. Map主要用于存储健值对, ...

  4. map,set,list等集合解析以及HashMap,LinkedHashMap,TreeMap等该选谁的的区别

    前言: 今天在整理一些资料时,想起了map,set,list等集合,于是就做些笔记,提供给大家学习参考以及自己日后回顾. Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允 ...

  5. HashMap Hashtable LinkedHashMap TreeMap

    // Map<String, String> map = new HashMap<String, String>(); // bb aa cc Map<String, S ...

  6. Java从入门到放弃18---Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法

    Java从入门到放弃18—Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法01 Map集合Map集合处理键值映射关系的数据为了方便 ...

  7. java中HashMap,LinkedHashMap,TreeMap,HashTable的区别

    java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap Map主要用于存储健值对,根 ...

  8. HashMap 、LinkedHashMap、HashTable、TreeMap 和 Properties 的区别

    HashMap 1.线程不安全: 2.允许null value 和 null key: 3.访问效率比较高: 4.Java1.2引进的Map接口的一个实现: 5.轻量级: 6.根据键的HashCode ...

  9. Map接口,Map.Entry,hashMap类,TreeMap类,WeakHashMap。

    Collection接口之前接触过,每次保存的对象是一个对象,但是在map中保存的是一对对象,是以key->value形式保存的. 定义: public interface Map<K,V ...

随机推荐

  1. 根据文字返回Label高度

    NSString分类 @implementation NSString (stringSize) //计算文字显示的所需要的size -(CGSize)sizeWithFont:(UIFont *)f ...

  2. WPF DragDrop事件元素跟随

    前一段时间项目里面要实现一个鼠标拖动一个元素到另外一个元素上面并且赋值的功能,由于要在surface上运行,拖动的时候手指会挡住系统默认的拖动图标,导致用户意识不到自己是不是在拖动着东西,所以要解决这 ...

  3. oracle 导入导出数据

    Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中.利用 ...

  4. ClassLoader(摘录)

    Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程. 在加载阶段,java虚拟机需要完成以下 ...

  5. UESTC_韩爷的情书 2015 UESTC Training for Graph Theory&lt;Problem H&gt;

    H - 韩爷的情书 Time Limit: 6000/2000MS (Java/Others)     Memory Limit: 262144/262144KB (Java/Others) Subm ...

  6. 关于类似于自动填充搜索框的DEMO

    接了个单子,客户要求左边输入时,右边自动到数据库查出对应内容,如果是单个INPUT还好,这个是动态增加INPUT,不过都是一样,关键是思路 这里遇到最郁闷的问题,就是我用的JQ1.9 以前用的JQ1. ...

  7. BZOJ 1621: [Usaco2008 Open]Roads Around The Farm分岔路口

    题目 1621: [Usaco2008 Open]Roads Around The Farm分岔路口 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 56 ...

  8. git的使用及常用命令

    一,GIT是什么? git是目前世界上最先进的分布式版本控制系统 Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在 ...

  9. java第一课,java基础

    Java:                是1991年SUN公司的James Gosling等人开发名称为Oak的语言,希望用于控制嵌入在有线电视交换盒,PDA等的微处理器.java.是面向互联网的语 ...

  10. 201521123082 《Java程序设计》第11周学习总结

    201521123082 <Java程序设计>第11周学习总结 标签(空格分隔):java 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. Answe ...