一、LinkedHashSet使用

1.1知识点:

HashSet怎么使用LinkedHashSet就怎么使用

1.2直接上代码,可以和前面的文章做对比

package com.qf.linkedhashset_class;import java.util.LinkedHashSet;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;public class Test01 {public static void main(String[] args) {/*** class LinkedHashSet extends HashSet* HashSet怎么使用,LinkedHashSet就怎么使用*///创建LinkedHashSet集合对象LinkedHashSet<String> set = new LinkedHashSet<>();//添加元素set.add("椎名空");set.add("李林俊");set.add("天使萌");set.add("佐佐木希");set.add("古川伊织");set.add("京香Julia");//将newSet1中所有的元素添加到set集合LinkedHashSet<String> newSet1 = new LinkedHashSet<>();Collections.addAll(newSet1, "aaa","bbb","ccc","ccc");//利用集合工具类对集合进行批量添加set.addAll(newSet1);//获取元素个数int size = set.size();System.out.println("获取元素个数:" + size);//清空集合中所有的元素//set.clear();System.out.println("判断集合中是否有指定元素:" + set.contains("天使萌"));//trueSystem.out.println("判断集合中是否有指定集合(判断包含关系):" + set.containsAll(newSet1));//trueSystem.out.println("判断集合中是否没有元素:" + set.isEmpty());//false (true-没有元素 false-有元素)//依据元素删除元素set.remove("上原亚衣");//去除交集set.removeAll(newSet1);//保留交集LinkedHashSet<String> newSet2 = new LinkedHashSet<>();Collections.addAll(newSet2, "佐佐木希","古川伊织","天使萌","天使萌");set.retainAll(newSet2);//将集合转换为数组Object[] array = newSet2.toArray();System.out.println(Arrays.toString(array));System.out.println("---------------");//遍历1 - foreachfor (String element : set) {System.out.println(element);}System.out.println("---------------");//遍历2 - IteratorIterator<String> it = set.iterator();while(it.hasNext()){//判断是否有下一个可迭代的元素String next = it.next();//返回下一个元素System.out.println(next);}}
}

1.3 LinkedHashSet特点

有序排序 + 去重

存储数据:
        1.获取对象的hash值
        2.通过hash值+散列算法获取到数组中的下标
        3.将元素添加到节点对象中(节点对象-双向链表)
取出数据:
        获取到第一个节点对象,再依次循环到下一个节点(有序的)

1.3.1 Node部分底层

package com.qf.linkedhashset_class;public class Node<E> {private E e;//元素private Node<E> prev;//上一个节点的地址private Node<E> next;//下一个节点的地址public Node() {}public Node(E e, Node<E> prev, Node<E> next) {this.e = e;this.prev = prev;this.next = next;}public E getE() {return e;}public void setE(E e) {this.e = e;}public Node<E> getPrev() {return prev;}public void setPrev(Node<E> prev) {this.prev = prev;}public Node<E> getNext() {return next;}public void setNext(Node<E> next) {this.next = next;}@Overridepublic String toString() {return e + "";}
}
package com.qf.linkedhashset_class;import java.util.LinkedHashSet;public class Test02 {public static void main(String[] args) {LinkedHashSet<String> set = new LinkedHashSet<>();set.add("椎名空");set.add("张三");set.add("天使萌");set.add("佐佐木希");set.add("古川伊织");set.add("京香Julia");set.add("京香Julia");for (String str : set) {System.out.println(str);}System.out.println("-------------");//稍微理解下双向链表//当前节点可以找到上一个节点,也可以找到下一个节点Node<String> node1 = new Node<>("椎名空", null, null);Node<String> node2 = new Node<>("张三", null, null);Node<String> node3 = new Node<>("天使萌", null, null);node1.setNext(node2);node2.setPrev(node1);node2.setNext(node3);node3.setPrev(node2);Node<String> first = node1;while(first != null){System.out.println(first);first = first.getNext();}}
}

1.4 TreeSet使用方法

其实TreeSet的使用和LinkedHashSet的使用大同小异

1.4.1TeeSet使用代码

package com.qf.treeset_class;import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.TreeSet;public class Test01 {public static void main(String[] args) {//创建TreeSet集合对象TreeSet<String> set = new TreeSet<>();//添加元素set.add("椎名空");set.add("李林俊");set.add("天使萌");set.add("佐佐木希");set.add("古川伊织");set.add("京香Julia");//将newSet1中所有的元素添加到set集合TreeSet<String> newSet1 = new TreeSet<>();Collections.addAll(newSet1, "aaa","bbb","ccc","ccc");//利用集合工具类对集合进行批量添加set.addAll(newSet1);//获取元素个数int size = set.size();System.out.println("获取元素个数:" + size);//清空集合中所有的元素//set.clear();System.out.println("判断集合中是否有指定元素:" + set.contains("天使萌"));//trueSystem.out.println("判断集合中是否有指定集合(判断包含关系):" + set.containsAll(newSet1));//trueSystem.out.println("判断集合中是否没有元素:" + set.isEmpty());//false (true-没有元素 false-有元素)//依据元素删除元素set.remove("上原亚衣");//去除交集set.removeAll(newSet1);//保留交集TreeSet<String> newSet2 = new TreeSet<>();Collections.addAll(newSet2, "佐佐木希","古川伊织","天使萌","天使萌");set.retainAll(newSet2);//将集合转换为数组Object[] array = newSet2.toArray();System.out.println(Arrays.toString(array));System.out.println("---------------");//遍历1 - foreachfor (String element : set) {System.out.println(element);}System.out.println("---------------");//遍历2 - IteratorIterator<String> it = set.iterator();while(it.hasNext()){//判断是否有下一个可迭代的元素String next = it.next();//返回下一个元素System.out.println(next);}}}

1.5 TreeSet自身特点

自然排序 - 根究不同的类型自动找到对应的排序规则

package com.qf.treeset_class;import java.util.TreeSet;public class Test02 {public static void main(String[] args) {//TreeSet存储String的排序方式:字典排序TreeSet<String> set1 = new TreeSet<>();set1.add("b");set1.add("d");set1.add("a");set1.add("c");set1.add("c");for (String element : set1) {System.out.println(element);}//TreeSet存储Integer的排序方式:数字升序TreeSet<Integer> set2 = new TreeSet<>();set2.add(5);set2.add(1);set2.add(3);set2.add(2);set2.add(4);set2.add(4);for (Integer element : set2) {System.out.println(element);}}
}

1.6 重点(内置比较器 - Comparable

1.创建一个学生类实现 Comparable 接口方法

2.实现排序规则(排序规则按照自己的需求写)

package com.qf.treeset_class;public class Student implements Comparable<Student>{private String name;private char sex;private int age;private String classId;private String id;public Student() {}public Student(String name, char sex, int age, String classId, String id) {this.name = name;this.sex = sex;this.age = age;this.classId = classId;this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getClassId() {return classId;}public void setClassId(String classId) {this.classId = classId;}public String getId() {return id;}public void setId(String id) {this.id = id;}@Overridepublic boolean equals(Object obj) {if(this == obj){return true;}if(obj instanceof Student){Student stu = (Student) obj;if(this.classId.equals(stu.classId) && this.id.equals(stu.id)){return true;}}return false;}@Overridepublic String toString() {return "Student [name=" + name + ", sex=" + sex + ", age=" + age + ", classId=" + classId + ", id=" + id + "]";}//排序规则:按照年龄排序@Overridepublic int compareTo(Student o) {return this.age - o.age;//this.age 是传进来的值 o.age 是上一个根节点的值}
}
package com.qf.treeset_class;import java.util.TreeSet;public class Test03 {public static void main(String[] args) {/*** 知识点:内置比较器 - Comparable*/TreeSet<Student> set = new TreeSet<>();set.add(new Student("天海翼", '女', 28, "2204", "001"));set.add(new Student("天使萌", '女', 21, "2204", "002"));set.add(new Student("水菜丽", '女', 25, "2204", "003"));set.add(new Student("佐佐木希", '女', 22, "2204", "004"));set.add(new Student("上原亚衣", '女', 27, "2204", "005"));set.add(new Student("濑亚美莉", '女', 18, "2204", "006"));set.add(new Student("深田咏美", '女', 23, "2204", "007"));set.add(new Student("泷泽萝拉", '女', 25, "2204", "008"));set.add(new Student("冲田杏梨", '女', 27, "2204", "009"));for (Student stu : set) {System.out.println(stu);}}
}

1.7外置比较器 - Comparator

1.7.1使用条件

当内置比较器不满足排序规则时使用外置比较器(使用匿名内部类)

package com.qf.treeset_class;import java.util.Comparator;
import java.util.TreeSet;public class Test04 {public static void main(String[] args) {/*** 知识点:外置比较器 - Comparator* * 应用场景:*           联合开发* * Comparable vs Comparator* 优先级别:Comparator > Comparable*/TreeSet<Student> set = new TreeSet<>(new Comparator<Student>() {//排序规则:按照名字长度排序,名字长度一致按照年龄排序@Overridepublic int compare(Student o1, Student o2) {if(o1.equals(o2)){return 0;}int nameLen1 = o1.getName().length();int nameLen2 = o2.getName().length();if(nameLen1 != nameLen2){return nameLen1 - nameLen2;}int age1 = o1.getAge();int age2 = o2.getAge();if(age1 != age2){return age1 - age2;}return 1;}});set.add(new Student("水菜丽", '女', 25, "2204", "003"));set.add(new Student("佐佐木希", '女', 22, "2204", "004"));set.add(new Student("天使萌", '女', 21, "2204", "002"));set.add(new Student("上原亚衣", '女', 27, "2204", "005"));set.add(new Student("濑亚美莉", '女', 18, "2204", "006"));set.add(new Student("天海翼", '女', 28, "2204", "001"));set.add(new Student("深田咏美", '女', 23, "2204", "007"));set.add(new Student("泷泽萝拉", '女', 25, "2204", "008"));set.add(new Student("冲田杏梨", '女', 27, "2204", "009"));set.add(new Student("冲田杏梨", '女', 27, "2204", "009"));for (Student stu : set) {System.out.println(stu);}}
}

1.8二叉树(图片来着网络)

二、HashMap

package com.qf.hashmap_class;import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;public class Test01 {public static void main(String[] args) {/*** 知识点:HashMap的使用* * 特点:无序 + key唯一(去重)*///创建HashMap对象HashMap<String, Integer> map = new HashMap<>();//添加数据Integer put1 = map.put("麻生希", 28);Integer put2 = map.put("椎名空", 23);Integer put3 = map.put("天使萌", 26);Integer put4 = map.put("水菜丽", 26);Integer put5 = map.put("爱田奈奈", 25);Integer put6 = map.put("小峰由衣", 29);System.out.println(put1);//nullSystem.out.println(put2);//nullSystem.out.println(put3);//nullSystem.out.println(put4);//nullSystem.out.println(put5);//nullSystem.out.println(put6);//null//将newMap集合添加到map集合中HashMap<String, Integer> newMap = new HashMap<>();newMap.put("aaa", 10);newMap.put("bbb", 20);newMap.put("ccc", 30);newMap.put("ccc", 40);map.putAll(newMap);//如果集合中有该key就获取对应的value值//如果集合中没有该key就添加数据Integer putIfAbsent = map.putIfAbsent("椎名空1", 25);System.out.println("putIfAbsent -- " + putIfAbsent);//替换数据 -- 返回被替换的值Integer put7 = map.put("小峰由衣", 30);System.out.println(put7);//29//根据Key替换数据 -- 返回被替换的值Integer replace1 = map.replace("小峰由衣", 31);System.out.println(replace1);//30//根据Key+Value替换数据boolean replace2 = map.replace("小峰由衣", 31, 32);System.out.println(replace2);//true//通过key获取到valueInteger integer1 = map.get("天使萌");System.out.println("通过key获取到value:" + integer1);//通过key获取到value,如果key不存在则返回默认值Integer integer2 = map.getOrDefault("天使萌111", 888);System.out.println("通过key获取到value,如果key不存在则返回默认值:" + integer2);//清空集合中的数据//map.clear();System.out.println("判断集合中是否包含某个key:" + map.containsKey("天使萌"));System.out.println("判断集合中是否包含某个value:" + map.containsValue(26));System.out.println("判断集合是否没有元素:" + map.isEmpty());//删除元素map.remove("椎名空1");//通过key删除映射关系map.remove("小峰由衣", 32);//通过key+value删除映射关系System.out.println("获取元素(映射关系)个数:" + map.size());//获取map中所有的value,返回一个Collection集合Collection<Integer> values = map.values();System.out.println(Arrays.toString(values.toArray()));System.out.println("-----------------");//遍历1 -- keySet()//遍历思路://  1.将map中所有的key获取出并存放在Set集合中//    2.遍历Set集合,依次取出key,再使用map.get(key)获取出对应的value值Set<String> keySet = map.keySet();for (String key : keySet) {Integer value = map.get(key);System.out.println(key + " -- " + value);}System.out.println("-----------------");//遍历2 -- entrySet()//遍历思路://    1.将map中所有的映射关系对象获取出并存放在Set集合中// 2.遍历Set集合,依次取出映射关系对象,映射关系对象中包含的key和value也就取出了Set<Entry<String, Integer>> entrySet = map.entrySet();for (Entry<String, Integer> entry : entrySet) {String key = entry.getKey();Integer value = entry.getValue();System.out.println(key + " -- " + value);}}
}

三、LinkedHashMap的使用

package com.qf.linkedhashmap_class;import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map.Entry;
import java.util.Set;public class Test01 {public static void main(String[] args) {/*** 知识点:LinkedHashMap的使用* * 特点:有序 + key唯一(去重)*///创建LinkedHashMap对象LinkedHashMap<String, Integer> map = new LinkedHashMap<>();//添加数据Integer put1 = map.put("麻生希", 28);Integer put2 = map.put("椎名空", 23);Integer put3 = map.put("天使萌", 26);Integer put4 = map.put("水菜丽", 26);Integer put5 = map.put("爱田奈奈", 25);Integer put6 = map.put("小峰由衣", 29);System.out.println(put1);//nullSystem.out.println(put2);//nullSystem.out.println(put3);//nullSystem.out.println(put4);//nullSystem.out.println(put5);//nullSystem.out.println(put6);//null//将newMap集合添加到map集合中LinkedHashMap<String, Integer> newMap = new LinkedHashMap<>();newMap.put("aaa", 10);newMap.put("bbb", 20);newMap.put("ccc", 30);newMap.put("ccc", 40);map.putAll(newMap);//如果集合中有该key就获取对应的value值//如果集合中没有该key就添加数据Integer putIfAbsent = map.putIfAbsent("椎名空1", 25);System.out.println("putIfAbsent -- " + putIfAbsent);//替换数据 -- 返回被替换的值Integer put7 = map.put("小峰由衣", 30);System.out.println(put7);//29//根据Key替换数据 -- 返回被替换的值Integer replace1 = map.replace("小峰由衣", 31);System.out.println(replace1);//30//根据Key+Value替换数据boolean replace2 = map.replace("小峰由衣", 31, 32);System.out.println(replace2);//true//通过key获取到valueInteger integer1 = map.get("天使萌");System.out.println("通过key获取到value:" + integer1);//通过key获取到value,如果key不存在则返回默认值Integer integer2 = map.getOrDefault("天使萌111", 888);System.out.println("通过key获取到value,如果key不存在则返回默认值:" + integer2);//清空集合中的数据//map.clear();System.out.println("判断集合中是否包含某个key:" + map.containsKey("天使萌"));System.out.println("判断集合中是否包含某个value:" + map.containsValue(26));System.out.println("判断集合是否没有元素:" + map.isEmpty());//删除元素map.remove("椎名空1");//通过key删除映射关系map.remove("小峰由衣", 32);//通过key+value删除映射关系System.out.println("获取元素(映射关系)个数:" + map.size());//获取map中所有的value,返回一个Collection集合Collection<Integer> values = map.values();System.out.println(Arrays.toString(values.toArray()));System.out.println("-----------------");//遍历1 -- keySet()//遍历思路://  1.将map中所有的key获取出并存放在Set集合中//    2.遍历Set集合,依次取出key,再使用map.get(key)获取出对应的value值Set<String> keySet = map.keySet();for (String key : keySet) {Integer value = map.get(key);System.out.println(key + " -- " + value);}System.out.println("-----------------");//遍历2 -- entrySet()//遍历思路://    1.将map中所有的映射关系对象获取出并存放在Set集合中// 2.遍历Set集合,依次取出映射关系对象,映射关系对象中包含的key和value也就取出了Set<Entry<String, Integer>> entrySet = map.entrySet();for (Entry<String, Integer> entry : entrySet) {String key = entry.getKey();Integer value = entry.getValue();System.out.println(key + " -- " + value);}}
}

四、Hashtable的使用

package com.qf.hashtable_class;import java.util.Arrays;
import java.util.Collection;
import java.util.Hashtable;
import java.util.Map.Entry;
import java.util.Set;public class Test01 {public static void main(String[] args) {/*** 知识点:Hashtable的使用* * 特点:无序 + key唯一(去重) + 线程安全的(加锁)* * 注意:Hashtable方法上加锁,效率低,弃用*///创建Hashtable对象Hashtable<String, Integer> map = new Hashtable<>();//添加数据Integer put1 = map.put("麻生希", 28);Integer put2 = map.put("椎名空", 23);Integer put3 = map.put("天使萌", 26);Integer put4 = map.put("水菜丽", 26);Integer put5 = map.put("爱田奈奈", 25);Integer put6 = map.put("小峰由衣", 29);System.out.println(put1);//nullSystem.out.println(put2);//nullSystem.out.println(put3);//nullSystem.out.println(put4);//nullSystem.out.println(put5);//nullSystem.out.println(put6);//null//将newMap集合添加到map集合中Hashtable<String, Integer> newMap = new Hashtable<>();newMap.put("aaa", 10);newMap.put("bbb", 20);newMap.put("ccc", 30);newMap.put("ccc", 40);map.putAll(newMap);//如果集合中有该key就获取对应的value值//如果集合中没有该key就添加数据Integer putIfAbsent = map.putIfAbsent("椎名空1", 25);System.out.println("putIfAbsent -- " + putIfAbsent);//替换数据 -- 返回被替换的值Integer put7 = map.put("小峰由衣", 30);System.out.println(put7);//29//根据Key替换数据 -- 返回被替换的值Integer replace1 = map.replace("小峰由衣", 31);System.out.println(replace1);//30//根据Key+Value替换数据boolean replace2 = map.replace("小峰由衣", 31, 32);System.out.println(replace2);//true//通过key获取到valueInteger integer1 = map.get("天使萌");System.out.println("通过key获取到value:" + integer1);//通过key获取到value,如果key不存在则返回默认值Integer integer2 = map.getOrDefault("天使萌111", 888);System.out.println("通过key获取到value,如果key不存在则返回默认值:" + integer2);//清空集合中的数据//map.clear();System.out.println("判断集合中是否包含某个key:" + map.containsKey("天使萌"));System.out.println("判断集合中是否包含某个value:" + map.containsValue(26));System.out.println("判断集合是否没有元素:" + map.isEmpty());//删除元素map.remove("椎名空1");//通过key删除映射关系map.remove("小峰由衣", 32);//通过key+value删除映射关系System.out.println("获取元素(映射关系)个数:" + map.size());//获取map中所有的value,返回一个Collection集合Collection<Integer> values = map.values();System.out.println(Arrays.toString(values.toArray()));System.out.println("-----------------");//遍历1 -- keySet()//遍历思路://  1.将map中所有的key获取出并存放在Set集合中//    2.遍历Set集合,依次取出key,再使用map.get(key)获取出对应的value值Set<String> keySet = map.keySet();for (String key : keySet) {Integer value = map.get(key);System.out.println(key + " -- " + value);}System.out.println("-----------------");//遍历2 -- entrySet()//遍历思路://    1.将map中所有的映射关系对象获取出并存放在Set集合中// 2.遍历Set集合,依次取出映射关系对象,映射关系对象中包含的key和value也就取出了Set<Entry<String, Integer>> entrySet = map.entrySet();for (Entry<String, Integer> entry : entrySet) {String key = entry.getKey();Integer value = entry.getValue();System.out.println(key + " -- " + value);}}
}

五、ConcurrentHashMap的使用

package com.qf.concurrenthashmap_class;import java.util.Arrays;
import java.util.Collection;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;public class Test01 {public static void main(String[] args) {/*** 知识点:ConcurrentHashMap的使用* * 特点:无序 + key唯一(去重) + 线程安全的(加锁)* * 注意:ConcurrentHashMap是局部加锁+CAS实现的线程安全,效率高*///创建ConcurrentHashMap对象ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();//添加数据Integer put1 = map.put("麻生希", 28);Integer put2 = map.put("椎名空", 23);Integer put3 = map.put("天使萌", 26);Integer put4 = map.put("水菜丽", 26);Integer put5 = map.put("爱田奈奈", 25);Integer put6 = map.put("小峰由衣", 29);System.out.println(put1);//nullSystem.out.println(put2);//nullSystem.out.println(put3);//nullSystem.out.println(put4);//nullSystem.out.println(put5);//nullSystem.out.println(put6);//null//将newMap集合添加到map集合中ConcurrentHashMap<String, Integer> newMap = new ConcurrentHashMap<>();newMap.put("aaa", 10);newMap.put("bbb", 20);newMap.put("ccc", 30);newMap.put("ccc", 40);map.putAll(newMap);//如果集合中有该key就获取对应的value值//如果集合中没有该key就添加数据Integer putIfAbsent = map.putIfAbsent("椎名空1", 25);System.out.println("putIfAbsent -- " + putIfAbsent);//替换数据 -- 返回被替换的值Integer put7 = map.put("小峰由衣", 30);System.out.println(put7);//29//根据Key替换数据 -- 返回被替换的值Integer replace1 = map.replace("小峰由衣", 31);System.out.println(replace1);//30//根据Key+Value替换数据boolean replace2 = map.replace("小峰由衣", 31, 32);System.out.println(replace2);//true//通过key获取到valueInteger integer1 = map.get("天使萌");System.out.println("通过key获取到value:" + integer1);//通过key获取到value,如果key不存在则返回默认值Integer integer2 = map.getOrDefault("天使萌111", 888);System.out.println("通过key获取到value,如果key不存在则返回默认值:" + integer2);//清空集合中的数据//map.clear();System.out.println("判断集合中是否包含某个key:" + map.containsKey("天使萌"));System.out.println("判断集合中是否包含某个value:" + map.containsValue(26));System.out.println("判断集合是否没有元素:" + map.isEmpty());//删除元素map.remove("椎名空1");//通过key删除映射关系map.remove("小峰由衣", 32);//通过key+value删除映射关系System.out.println("获取元素(映射关系)个数:" + map.size());//获取map中所有的value,返回一个Collection集合Collection<Integer> values = map.values();System.out.println(Arrays.toString(values.toArray()));System.out.println("-----------------");//遍历1 -- keySet()//遍历思路://   1.将map中所有的key获取出并存放在Set集合中//    2.遍历Set集合,依次取出key,再使用map.get(key)获取出对应的value值Set<String> keySet = map.keySet();for (String key : keySet) {Integer value = map.get(key);System.out.println(key + " -- " + value);}System.out.println("-----------------");//遍历2 -- entrySet()//遍历思路://    1.将map中所有的映射关系对象获取出并存放在Set集合中// 2.遍历Set集合,依次取出映射关系对象,映射关系对象中包含的key和value也就取出了Set<Entry<String, Integer>> entrySet = map.entrySet();for (Entry<String, Integer> entry : entrySet) {String key = entry.getKey();Integer value = entry.getValue();System.out.println(key + " -- " + value);}}
}

六、HashMap vs LinkedHashMap vs Hashtable vs ConcurrentHashMap

HashMap:无序 + key去重 + 线程不安全
LinkedHashMap:有序 + key去重 + 线程不安全
Hashtable:无序 + key去重 + 线程安全(方法加锁,效率低,弃用)
ConcurrentHashMap:无序 + key去重 + 线程安全(局部加锁+CAS,效率高)
存储nullKey nullValue
HashMap                 Ok
LinkedHashMap         OK
Hashtable             NO
ConcurrentHashMap     NO

七、TreeMap的使用

package com.qf.treemap_class;import java.util.Arrays;
import java.util.Collection;
import java.util.TreeMap;
import java.util.Map.Entry;
import java.util.Set;public class Test01 {public static void main(String[] args) {/*** 知识点:TreeMap的使用*///创建TreeMap对象TreeMap<String, Integer> map = new TreeMap<>();//添加数据Integer put1 = map.put("麻生希", 28);Integer put2 = map.put("椎名空", 23);Integer put3 = map.put("天使萌", 26);Integer put4 = map.put("水菜丽", 26);Integer put5 = map.put("爱田奈奈", 25);Integer put6 = map.put("小峰由衣", 29);System.out.println(put1);//nullSystem.out.println(put2);//nullSystem.out.println(put3);//nullSystem.out.println(put4);//nullSystem.out.println(put5);//nullSystem.out.println(put6);//null//将newMap集合添加到map集合中TreeMap<String, Integer> newMap = new TreeMap<>();newMap.put("aaa", 10);newMap.put("bbb", 20);newMap.put("ccc", 30);newMap.put("ccc", 40);map.putAll(newMap);//如果集合中有该key就获取对应的value值//如果集合中没有该key就添加数据Integer putIfAbsent = map.putIfAbsent("椎名空1", 25);System.out.println("putIfAbsent -- " + putIfAbsent);//替换数据 -- 返回被替换的值Integer put7 = map.put("小峰由衣", 30);System.out.println(put7);//29//根据Key替换数据 -- 返回被替换的值Integer replace1 = map.replace("小峰由衣", 31);System.out.println(replace1);//30//根据Key+Value替换数据boolean replace2 = map.replace("小峰由衣", 31, 32);System.out.println(replace2);//true//通过key获取到valueInteger integer1 = map.get("天使萌");System.out.println("通过key获取到value:" + integer1);//通过key获取到value,如果key不存在则返回默认值Integer integer2 = map.getOrDefault("天使萌111", 888);System.out.println("通过key获取到value,如果key不存在则返回默认值:" + integer2);//清空集合中的数据//map.clear();System.out.println("判断集合中是否包含某个key:" + map.containsKey("天使萌"));System.out.println("判断集合中是否包含某个value:" + map.containsValue(26));System.out.println("判断集合是否没有元素:" + map.isEmpty());//删除元素map.remove("椎名空1");//通过key删除映射关系map.remove("小峰由衣", 32);//通过key+value删除映射关系System.out.println("获取元素(映射关系)个数:" + map.size());//获取map中所有的value,返回一个Collection集合Collection<Integer> values = map.values();System.out.println(Arrays.toString(values.toArray()));System.out.println("-----------------");//遍历1 -- keySet()//遍历思路://   1.将map中所有的key获取出并存放在Set集合中//    2.遍历Set集合,依次取出key,再使用map.get(key)获取出对应的value值Set<String> keySet = map.keySet();for (String key : keySet) {Integer value = map.get(key);System.out.println(key + " -- " + value);}System.out.println("-----------------");//遍历2 -- entrySet()//遍历思路://    1.将map中所有的映射关系对象获取出并存放在Set集合中// 2.遍历Set集合,依次取出映射关系对象,映射关系对象中包含的key和value也就取出了Set<Entry<String, Integer>> entrySet = map.entrySet();for (Entry<String, Integer> entry : entrySet) {String key = entry.getKey();Integer value = entry.getValue();System.out.println(key + " -- " + value);}}
}

7.1TreeMap的特点

package com.qf.treemap_class;import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;public class Test02 {public static void main(String[] args) {/*** 知识点:TreeMap的特点* * 特点:针对于Key排序*/TreeMap<String, Integer> map = new TreeMap<>();map.put("c", 24);map.put("d", 28);map.put("a", 21);map.put("b", 23);map.put("b", 26);Set<Entry<String,Integer>> entrySet = map.entrySet();for (Entry<String, Integer> entry : entrySet) {String key = entry.getKey();Integer value = entry.getValue();System.out.println(key + " -- " + value);}}
}

7.3内置比较器

package com.qf.treemap_class;import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;import com.qf.treeset_class.Student;public class Test03 {public static void main(String[] args) {/*** 知识点:内置比较器*/TreeMap<Student, String> map = new TreeMap<>();map.put(new Student("水菜丽", '女', 25, "2204", "003"), "拍电影");map.put(new Student("佐佐木希", '女', 22, "2204", "004"), "吃马赛克");map.put(new Student("天使萌", '女', 21, "2204", "002"), "吹喇叭");map.put(new Student("上原亚衣", '女', 27, "2204", "005"), "骑马");map.put(new Student("濑亚美莉", '女', 18, "2204", "006"), "交朋友");map.put(new Student("天海翼", '女', 28, "2204", "001"), "按摩");map.put(new Student("深田咏美", '女', 23, "2204", "007"), "写代码");map.put(new Student("泷泽萝拉", '女', 25, "2204", "008"), "看书");map.put(new Student("冲田杏梨", '女', 27, "2204", "009"), "补课");Set<Entry<Student,String>> entrySet = map.entrySet();for (Entry<Student, String> entry : entrySet) {System.out.println(entry);}}
}

7.4外置比较器

package com.qf.treemap_class;import java.util.Map.Entry;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeMap;import com.qf.treeset_class.Student;public class Test04 {public static void main(String[] args) {/*** 知识点:外置比较器*/TreeMap<Student, String> map = new TreeMap<>(new Comparator<Student>() {//排序规则:按照名字长度排序,名字长度一致按照年龄排序@Overridepublic int compare(Student o1, Student o2) {if(o1.equals(o2)){return 0;}int nameLen1 = o1.getName().length();int nameLen2 = o2.getName().length();if(nameLen1 != nameLen2){return nameLen1 - nameLen2;}int age1 = o1.getAge();int age2 = o2.getAge();if(age1 != age2){return age1 - age2;}return 1;}});map.put(new Student("水菜丽", '女', 25, "2204", "003"), "拍电影");map.put(new Student("佐佐木希", '女', 22, "2204", "004"), "吃马赛克");map.put(new Student("天使萌", '女', 21, "2204", "002"), "吹喇叭");map.put(new Student("上原亚衣", '女', 27, "2204", "005"), "骑马");map.put(new Student("濑亚美莉", '女', 18, "2204", "006"), "交朋友");map.put(new Student("天海翼", '女', 28, "2204", "001"), "按摩");map.put(new Student("深田咏美", '女', 23, "2204", "007"), "写代码");map.put(new Student("泷泽萝拉", '女', 25, "2204", "008"), "看书");map.put(new Student("冲田杏梨", '女', 27, "2204", "009"), "补课");Set<Entry<Student,String>> entrySet = map.entrySet();for (Entry<Student, String> entry : entrySet) {System.out.println(entry);}}
}

八、Hashtable的使用(弃用,作为了解)

package com.qf.hashtable_class;import java.util.Arrays;
import java.util.Collection;
import java.util.Hashtable;
import java.util.Map.Entry;
import java.util.Set;public class Test01 {public static void main(String[] args) {/*** 知识点:Hashtable的使用* * 特点:无序 + key唯一(去重) + 线程安全的(加锁)* * 注意:Hashtable方法上加锁,效率低,弃用*///创建Hashtable对象Hashtable<String, Integer> map = new Hashtable<>();//添加数据Integer put1 = map.put("麻生希", 28);Integer put2 = map.put("椎名空", 23);Integer put3 = map.put("天使萌", 26);Integer put4 = map.put("水菜丽", 26);Integer put5 = map.put("爱田奈奈", 25);Integer put6 = map.put("小峰由衣", 29);System.out.println(put1);//nullSystem.out.println(put2);//nullSystem.out.println(put3);//nullSystem.out.println(put4);//nullSystem.out.println(put5);//nullSystem.out.println(put6);//null//将newMap集合添加到map集合中Hashtable<String, Integer> newMap = new Hashtable<>();newMap.put("aaa", 10);newMap.put("bbb", 20);newMap.put("ccc", 30);newMap.put("ccc", 40);map.putAll(newMap);//如果集合中有该key就获取对应的value值//如果集合中没有该key就添加数据Integer putIfAbsent = map.putIfAbsent("椎名空1", 25);System.out.println("putIfAbsent -- " + putIfAbsent);//替换数据 -- 返回被替换的值Integer put7 = map.put("小峰由衣", 30);System.out.println(put7);//29//根据Key替换数据 -- 返回被替换的值Integer replace1 = map.replace("小峰由衣", 31);System.out.println(replace1);//30//根据Key+Value替换数据boolean replace2 = map.replace("小峰由衣", 31, 32);System.out.println(replace2);//true//通过key获取到valueInteger integer1 = map.get("天使萌");System.out.println("通过key获取到value:" + integer1);//通过key获取到value,如果key不存在则返回默认值Integer integer2 = map.getOrDefault("天使萌111", 888);System.out.println("通过key获取到value,如果key不存在则返回默认值:" + integer2);//清空集合中的数据//map.clear();System.out.println("判断集合中是否包含某个key:" + map.containsKey("天使萌"));System.out.println("判断集合中是否包含某个value:" + map.containsValue(26));System.out.println("判断集合是否没有元素:" + map.isEmpty());//删除元素map.remove("椎名空1");//通过key删除映射关系map.remove("小峰由衣", 32);//通过key+value删除映射关系System.out.println("获取元素(映射关系)个数:" + map.size());//获取map中所有的value,返回一个Collection集合Collection<Integer> values = map.values();System.out.println(Arrays.toString(values.toArray()));System.out.println("-----------------");//遍历1 -- keySet()//遍历思路://  1.将map中所有的key获取出并存放在Set集合中//    2.遍历Set集合,依次取出key,再使用map.get(key)获取出对应的value值Set<String> keySet = map.keySet();for (String key : keySet) {Integer value = map.get(key);System.out.println(key + " -- " + value);}System.out.println("-----------------");//遍历2 -- entrySet()//遍历思路://    1.将map中所有的映射关系对象获取出并存放在Set集合中// 2.遍历Set集合,依次取出映射关系对象,映射关系对象中包含的key和value也就取出了Set<Entry<String, Integer>> entrySet = map.entrySet();for (Entry<String, Integer> entry : entrySet) {String key = entry.getKey();Integer value = entry.getValue();System.out.println(key + " -- " + value);}}
}

九、Properties

package com.qf.properties_class;import java.io.IOException;
import java.util.Properties;public class Test01 {public static void main(String[] args) throws IOException {/*** 知识点:Properties* 含义:配置文件类* * 注意:配置文件创建在src目录下*///创建配置文件对象Properties p = new Properties();//加载配置文件p.load(Test01.class.getClassLoader().getResourceAsStream("DBConfig.properties"));//获取配置文件中的数据String username = p.getProperty("username");String password = p.getProperty("password");System.out.println(username + " -- " + password);}
}

Java Set集合及Map集合详解相关推荐

  1. java集合框架的结构_集合框架(Collections Framework)详解及代码示例

    简介 集合和数组的区别: 数组存储基础数据类型,且每一个数组都只能存储一种数据类型的数据,空间不可变. 集合存储对象,一个集合中可以存储多种类型的对象.空间可变. 严格地说,集合是存储对象的引用,每个 ...

  2. 集合 (二) ----- Map集合详解

    相关文章: <集合 (一) ----- 集合的基本概念与Collection集合详解> <集合 (二) ----- Map集合详解> 文章目录 Map集合详解 一.Map集合基 ...

  3. java map中的entry_java中Map及Map.Entry详解(组图)

    java中Map及Map.Entry详解(组图) 08-22栏目:技术 TAG:map.entry map.entry Map是java中的接口,Map.Entry是Map的一个内部接口. copyr ...

  4. java+getactionmap_Struts2 使用OGNL遍历map方法详解

    一.Action中的代码:MapAction.java package com.zx.demo.action; import java.util.ArrayList; import java.util ...

  5. python清空集合_python集合删除多种方法详解

    这篇文章主要介绍了python集合删除多种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 删除指定的元素 A={'a','c','b','d ...

  6. mongodb创建集合命令db.createCollection详解

    mongodb创建集合命令db.createCollection详解 完整的命令如下: db.createCollection(name, {capped: <Boolean>, auto ...

  7. Java进阶(七)Set系列集合、Map集合体系

    七.Set系列集合.Map集合体系 需要学会什么? Set系列集合的特点:Set系列集合的特点和底层原理. 集合工具类Collections:快速的对集合进行元素的添加.排序等操作. 综合案例:把Co ...

  8. java对list中map集合中某个字段排序

    java对list中map集合中某个字段排序 适用于字符串排序,数字对比不可用,以下示例,当把sort的值改为74,66,142时排序不对看示例2 示例1 List<Map<String, ...

  9. java进阶开发-----Set集合、Map集合(接java集合)

    (一).Set系列集合 Set系列集合特点 无序:存取顺序不一致 不重复:可以去除重复 无索引:没有带索引的方法,所以不能使用普通for循环遍历,也不能通过索引来获取元素. Set集合实现类特点 Ha ...

  10. Java高级-Lambda 表达式、异常处理、集合、泛型、List集合、Map集合、Collections类

    目录 Lambda 表达式 Java Lambda 表达式的优缺点 异常处理 Exception 处理及常见异常 try catch语句 try catch finally语句 throws 声明异常 ...

最新文章

  1. CF 6 A. Triangle
  2. 4、CSS 高级语法
  3. 最新天猫面试题(含总结):线程池+并发编程+分布式设计+中间件
  4. stm32高级定时器 基础知识
  5. Java中的堆分配参数总结《对Java的分析总结》(二)
  6. MySQL令人咋舌的隐式转换
  7. 【hortonworks/registry】registry源码主类该怎么运行
  8. 集合类 collection接口 LinkedList
  9. 190109每日一句
  10. Python实现PDF转TXT
  11. 五子棋游戏开发六子棋游戏开发
  12. NexT 主题自定义侧边栏图标
  13. maria安装包mysql_mariadb安装
  14. 数据仓库--事实表和维度表
  15. 群晖存储服务器虚拟机,安装黑群晖DSM6.2.1完整教程(虚拟机VMWARE15)
  16. 无人机倾斜摄影技术在三维实景GIS的应用
  17. Gmail邮箱允许异地登录/客户端登录
  18. Ubuntu20.04 重装N卡驱动仍无法解决的问题的解决方法
  19. [Swift]LeetCode1088. 易混淆数 II | Confusing Number II
  20. P4717-[模板]快速莫比乌斯/沃尔什变换(FMT/FWT)

热门文章

  1. EasyPOI之导出Excel复杂模板
  2. 创建office一直转圈_Microsoft Office 2019 VL for Mac(office系列全套装)
  3. 烽火HG680-R-MSO9280-河南电信_湖北联通免费刷机固件及说明
  4. 拨号保护,网络电话,保护隐私,匿名通话
  5. 12306排队是什么意思_12306火车网上订票排队是什么意思
  6. USB转串口驱动安装失败解决方法
  7. Python学习之Python入门知识(一)
  8. 一些有趣、奇葩、实用的网站
  9. c4d如何把文字贴在物体表面_C4D在简模上整体和局部贴贴图的方法
  10. MAXWELL软件的初步使用