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是父类固定的 父类集合存放子类对象
原文地址:https://www.cnblogs.com/fly-book/p/9860611.html