HashSet与TreeSet HashSet 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 import java.util.HashSet;import java.util.Set;public class HashSetTest01 { public static void main (String[] args) { Set<String> strs = new HashSet <>(); strs.add("hello3" ); strs.add("hello4" ); strs.add("hello1" ); strs.add("hello2" ); strs.add("hello3" ); strs.add("hello3" ); strs.add("hello3" ); strs.add("hello3" ); for (String s : strs){ System.out.println(s); } } }
TreeSet TreeSet集合存储元素特点: 1、无序不可重复的,但是存储的元素可以自动按照大小顺序排序 ! 称为:可排序集合。
2、无序:这里的无序指的是存进去的顺序和取出来的顺序不同。并且没有下标 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 import java.util.Set;import java.util.TreeSet;public class TreeSetTest01 { public static void main (String[] args) { Set<String> strs = new TreeSet <>(); strs.add("A" ); strs.add("B" ); strs.add("Z" ); strs.add("Y" ); strs.add("Z" ); strs.add("K" ); strs.add("M" ); for (String s : strs){ System.out.println(s); } } }
Map接口中常用方法 java.util.Map接口中常用的方法:
1、Map和Collection没有继承关系。
2、Map集合以key和value的方式存储数据:键值对 key和value都是引用数据类型。 key和value都是存储对象的内存地址。 key起到主导的地位,value是key的一个附属品。
3、Map接口中常用方法:
V put(K key, V value) 向Map集合中添加键值对
V get(Object key) 通过key获取value
void clear() 清空Map集合
boolean containsKey(Object key) 判断Map中是否包含某个key
boolean containsValue(Object value) 判断Map中是否包含某个value
boolean isEmpty() 判断Map集合中元素个数是否为0
V remove(Object key) 通过key删除键值对
int size() 获取Map集合中键值对的个数。
Collection <V> values() 获取Map集合 中所有的value,返回一个Collection
Set<K> keySet() 获取Map集合所有的key(所有的键是一个set集合)
Set<Map.Entry<K,V>> entrySet() 将Map集合转换成Set集合
假设现在有一个Map集合,如下所示: map1集合对象 key value
1 zhangsan 2 lisi 3 wangwu 4 zhaoliu
Set set = map1.entrySet();
set集合对象 1=zhangsan 【注意:Map集合通过entrySet()方法转换成的这个Set集合,Set集合中元素的类型是 Map.Entry<K,V>】 2=lisi 【Map.Entry和String一样,都是一种类型的名字,只不过:Map.Entry是静态内部类,是Map中的静态内部类】 3=wangwu 4=zhaoliu —> 这个东西是个什么?Map.Entry
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 import java.util.Collection;import java.util.HashMap;import java.util.Map; public class MapTest01 { public static void main (String[] args) { Map<Integer, String> map = new HashMap <>(); map.put(1 , "zhangsan" ); map.put(2 , "lisi" ); map.put(3 , "wangwu" ); map.put(4 , "zhaoliu" ); String value = map.get(2 ); System.out.println(value); System.out.println("键值对的数量:" + map.size()); map.remove(2 ); System.out.println("键值对的数量:" + map.size()); System.out.println(map.containsKey(new Integer (4 ))); System.out.println(map.containsValue(new String ("wangwu" ))); Collection<String> values = map.values(); for (String s : values){ System.out.println(s); } map.clear(); System.out.println("键值对的数量:" + map.size()); System.out.println(map.isEmpty()); } }
Map集合的遍历方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;public class MapTest02 { public static void main (String[] args) { Map<Integer, String> map = new HashMap <>(); map.put(1 , "zhangsan" ); map.put(2 , "lisi" ); map.put(3 , "wangwu" ); map.put(4 , "zhaoliu" ); Set<Integer> keys = map.keySet(); for (Integer key : keys){ System.out.println(key + "=" + map.get(key)); } Set<Map.Entry<Integer,String>> set = map.entrySet(); for (Map.Entry<Integer,String> node : set){ System.out.println(node.getKey() + "--->" + node.getValue()); } } }
HashMap HashMap集合 HashMap集合: 1、HashMap集合底层是哈希表/散列表的数据结构。
2、哈希表是一个怎样的数据结构呢? 哈希表是一个数组和单向链表的结合体。 数组:在查询方面效率很高,随机增删方面效率很低。 单向链表:在随机增删方面效率较高,在查询方面效率很低。 哈希表将以上的两种数据结构融合在一起,充分发挥它们各自的优点。
3、HashMap集合底层的源代码:
1 2 3 4 5 6 7 8 9 10 11 public class HashMap { Node<K,V>[] table;static class Node <K,V> {final int hash; final K key; V value; Node<K,V> next; } }
哈希表/散列表:一维数组,这个数组中每一个元素是一个单向链表。(数组和链表的结合体。)
4、最主要掌握的是: map.put(k,v) v = map.get(k) 以上这两个方法的实现原理,是必须掌握的。
5、HashMap集合的key部分特点: 无序,不可重复。 为什么无序? 因为不一定挂到哪个单向链表上。 不可重复是怎么保证的? equals方法来保证HashMap集合的key不可重复。 如果key重复了,value会覆盖。
放在HashMap集合key部分的元素其实就是放到HashSet集合中了。 所以HashSet集合中的元素也需要同时重写hashCode()+equals()方法。
6、哈希表HashMap使用不当时无法发挥性能! 假设将所有的hashCode()方法返回值固定为某个值,那么会导致底层哈希表变成了纯单向链表。这种情况我们成为:散列分布不均匀。 什么是散列分布均匀? 假设有100个元素,10个单向链表,那么每个单向链表上有10个节点,这是最好的,是散列分布均匀的。 假设将所有的hashCode()方法返回值都设定为不一样的值,可以吗,有什么问题? 不行,因为这样的话导致底层哈希表就成为一维数组了,没有链表的概念了。也是散列分布不均匀。散列分布均匀需要你重写hashCode()方法时有一定的技巧。
7、重点:放在HashMap集合key部分的元素,以及放在HashSet集合中的元素,需要同时重写hashCode和equals方法 。
8、HashMap集合的默认初始化容量是16,默认加载因子是0.75 这个默认加载因子是当HashMap集合底层数组的容量达到75%的时候,数组开始扩容。
重点,记住:HashMap集合初始化容量必须是2的倍数 ,这也是官方推荐的, 这是因为达到散列均匀,为了提高HashMap集合的存取效率,所必须的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 import java.util.HashMap;import java.util.Map;import java.util.Set; public class HashMapTest01 { public static void main (String[] args) { Map<Integer,String> map = new HashMap <>(); map.put(1111 , "zhangsan" ); map.put(6666 , "lisi" ); map.put(7777 , "wangwu" ); map.put(2222 , "zhaoliu" ); map.put(2222 , "king" ); System.out.println(map.size()); Set<Map.Entry<Integer,String>> set = map.entrySet(); for (Map.Entry<Integer,String> entry : set){ System.out.println(entry.getKey() + "=" + entry.getValue()); } } }
同时重写hashCode和equals 1、向Map集合中存,以及从Map集合中取,都是先调用key的hashCode方法,然后再调用equals方法! equals方法有可能调用,也有可能不调用。 拿put(k,v)举例,什么时候equals不会调用? k.hashCode()方法返回哈希值, 哈希值经过哈希算法转换成数组下标。 数组下标位置上如果是null,equals不需要执行。 拿get(k)举例,什么时候equals不会调用? k.hashCode()方法返回哈希值, 哈希值经过哈希算法转换成数组下标。 数组下标位置上如果是null,equals不需要执行。
2、注意:如果一个类的equals方法重写了,那么hashCode()方法必须重写。 并且equals方法返回如果是true,hashCode()方法返回的值必须一样。 equals方法返回true表示两个对象相同,在同一个单向链表上比较。 那么对于同一个单向链表上的节点来说,他们的哈希值都是相同的。 所以hashCode()方法的返回值也应该相同。
3、hashCode()方法和equals()方法不用研究了,直接使用IDEA工具生成,但是这两个方法需要同时生成。
4、终极结论:放在HashMap集合key部分的,以及放在HashSet集合中的元素,需要同时重写hashCode方法和equals方法。
5、对于哈希表数据结构来说: 如果o1和o2的hash值相同,一定是放到同一个单向链表上。 当然如果o1和o2的hash值不同,但由于哈希算法执行结束之后转换的数组下标可能相同,此时会发生“哈希碰撞”。
Student.java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 import java.util.Objects;public class Student { private String name; public Student () { } public Student (String name) { this .name = name; } public String getName () { return name; } public void setName (String name) { this .name = name; } @Override public boolean equals (Object o) { if (this == o) return true ; if (o == null || getClass() != o.getClass()) return false ; Student student = (Student) o; return Objects.equals(name, student.name); } @Override public int hashCode () { return Objects.hash(name); } }
HashMapTest02.java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 import java.util.HashSet;import java.util.Set;public class HashMapTest02 { public static void main (String[] args) { Student s1 = new Student ("zhangsan" ); Student s2 = new Student ("zhangsan" ); System.out.println(s1.equals(s2)); System.out.println("s1的hashCode=" + s1.hashCode()); System.out.println("s2的hashCode=" + s2.hashCode()); Set<Student> students = new HashSet <>(); students.add(s1); students.add(s2); System.out.println(students.size()); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 import java.util.HashMap;import java.util.Map;public class HashMapTest03 { public static void main (String[] args) { Map map = new HashMap (); map.put(null , null ); System.out.println(map.size()); map.put(null , 100 ); System.out.println(map.size()); System.out.println(map.get(null )); } }
HashTable Hashtable的key可以为null吗? Hashtable的key和value都是不能为null的。 HashMap集合的key和value都是可以为null的。
Hashtable方法都带有synchronized:线程安全的。 线程安全有其它的方案,这个Hashtable对线程的处理导致效率较低,使用较少了。
Hashtable和HashMap一样,底层都是哈希表数据结构。 Hashtable的初始化容量是11,默认加载因子是:0.75f Hashtable的扩容是:原容量 * 2 + 1
HashMap和Hashtable的区别。 HashMap: 初始化容量16,扩容2倍。 非线程安全 key和value可以为null。
Hashtable 初始化容量11,扩容2倍+1 线程安全 key和value都不能是null。
Properties类的常用两个方法 setProperty getProperty 目前只需要掌握Properties属性类对象的相关方法即可。 Properties是一个Map集合,继承Hashtable,Properties的key和value都是String类型。 Properties被称为属性类对象。 Properties是线程安全的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 import java.util.Properties;public class PropertiesTest01 { public static void main (String[] args) { Properties pro = new Properties (); pro.setProperty("url" , "jdbc:mysql://localhost:3306/bjpowernode" ); pro.setProperty("driver" ,"com.mysql.jdbc.Driver" ); pro.setProperty("username" , "root" ); pro.setProperty("password" , "123" ); String url = pro.getProperty("url" ); String driver = pro.getProperty("driver" ); String username = pro.getProperty("username" ); String password = pro.getProperty("password" ); System.out.println(url); System.out.println(driver); System.out.println(username); System.out.println(password); } }
TreeSet 1、TreeSet集合底层实际上是一个TreeMap 2、TreeMap集合底层是一个二叉树。 3、放到TreeSet集合中的元素,等同于放到TreeMap集合key部分了。 4、TreeSet集合中的元素:无序不可重复,但是可以按照元素的大小顺序自动排序。 称为:可排序集合。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 import java.util.TreeSet;public class TreeSetTest02 { public static void main (String[] args) { TreeSet<String> ts = new TreeSet <>(); ts.add("zhangsan" ); ts.add("lisi" ); ts.add("wangwu" ); ts.add("zhangsi" ); ts.add("wangliu" ); for (String s : ts){ System.out.println(s); } TreeSet<Integer> ts2 = new TreeSet <>(); ts2.add(100 ); ts2.add(200 ); ts2.add(900 ); ts2.add(800 ); ts2.add(600 ); ts2.add(10 ); for (Integer elt : ts2){ System.out.println(elt); } } }
对自定义的类型来说,TreeSet可以排序吗? 以下程序中对于Person类型来说,无法排序 。因为没有指定Person对象之间的比较规则。 谁大谁小并没有说明啊。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 public class TreeSetTest03 { public static void main (String[] args) { Person p1 = new Person (32 ); Person p2 = new Person (20 ); Person p3 = new Person (30 ); Person p4 = new Person (25 ); TreeSet<Person> persons = new TreeSet <>(); persons.add(p1); persons.add(p2); persons.add(p3); persons.add(p4); for (Person p : persons){ System.out.println(p); } } }class Person { int age; public Person (int age) { this .age = age; } public String toString () { return "Person[age=" +age+"]" ; } }
以下程序运行的时候出现了这个异常: java.lang.ClassCastException: class com.bjpowernode.javase.collection.Person cannot be cast to class java.lang.Comparable 出现这个异常的原因是: Person类没有实现java.lang.Comparable接口 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 import java.util.TreeSet;public class TreeSetTest04 { public static void main (String[] args) { Customer c1 = new Customer (32 ); Customer c2 = new Customer (20 ); Customer c3 = new Customer (30 ); Customer c4 = new Customer (25 ); TreeSet<Customer> customers = new TreeSet <>(); customers.add(c1); customers.add(c2); customers.add(c3); customers.add(c4); for (Customer c : customers){ System.out.println(c); } } }class Customer implements Comparable <Customer>{ int age; public Customer (int age) { this .age = age; } @Override public int compareTo (Customer c) { return c.age - this .age; } public String toString () { return "Customer[age=" +age+"]" ; } }
比较规则的写法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 import java.util.TreeSet;public class TreeSetTest05 { public static void main (String[] args) { TreeSet<Vip> vips = new TreeSet <>(); vips.add(new Vip ("zhangsi" , 20 )); vips.add(new Vip ("zhangsan" , 20 )); vips.add(new Vip ("king" , 18 )); vips.add(new Vip ("soft" , 17 )); for (Vip vip : vips){ System.out.println(vip); } } }class Vip implements Comparable <Vip>{ String name; int age; public Vip (String name, int age) { this .name = name; this .age = age; } @Override public String toString () { return "Vip{" + "name='" + name + '\'' + ", age=" + age + '}' ; } @Override public int compareTo (Vip v) { if (this .age == v.age){ return this .name.compareTo(v.name); } else { return this .age - v.age; } } }
实现比较器接口 TreeSet集合中元素可排序的第二种方式:使用比较器的方式。 最终的结论: 放到TreeSet或者TreeMap集合key部分的元素要想做到排序,包括两种方式: 第一种:放在集合中的元素实现java.lang.Comparable接口。 第二种:在构造TreeSet或者TreeMap集合的时候给它传一个比较器对象。 Comparable和Comparator怎么选择呢? 当比较规则不会发生改变的时候,或者说当比较规则只有1个的时候,建议实现Comparable接口。 如果比较规则有多个,并且需要多个比较规则之间频繁切换,建议使用Comparator接口。 Comparator接口的设计符合OCP原则。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 import java.util.Comparator;import java.util.TreeSet;public class TreeSetTest06 { public static void main (String[] args) { TreeSet<WuGui> wuGuis = new TreeSet <>(new Comparator <WuGui>() { @Override public int compare (WuGui o1, WuGui o2) { return o1.age - o2.age; } }); wuGuis.add(new WuGui (1000 )); wuGuis.add(new WuGui (800 )); wuGuis.add(new WuGui (810 )); for (WuGui wuGui : wuGuis){ System.out.println(wuGui); } } }class WuGui { int age; public WuGui (int age) { this .age = age; } @Override public String toString () { return "小乌龟[" + "age=" + age + ']' ; } }
自平衡二叉树
Collections工具类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 import java.util.*;public class CollectionsTest { public static void main (String[] args) { List<String> list = new ArrayList <>(); Collections.synchronizedList(list); list.add("abf" ); list.add("abx" ); list.add("abc" ); list.add("abe" ); Collections.sort(list); for (String s : list){ System.out.println(s); } List<WuGui2> wuGuis = new ArrayList <>(); wuGuis.add(new WuGui2 (1000 )); wuGuis.add(new WuGui2 (8000 )); wuGuis.add(new WuGui2 (500 )); Collections.sort(wuGuis); for (WuGui2 wg : wuGuis){ System.out.println(wg); } Set<String> set = new HashSet <>(); set.add("king" ); set.add("kingsoft" ); set.add("king2" ); set.add("king1" ); List<String> myList = new ArrayList <>(set); Collections.sort(myList); for (String s : myList) { System.out.println(s); } } }class WuGui2 implements Comparable <WuGui2>{ int age; public WuGui2 (int age) { this .age = age; } @Override public int compareTo (WuGui2 o) { return this .age - o.age; } @Override public String toString () { return "WuGui2{" + "age=" + age + '}' ; } }
集合总结 ArrayList 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 import java.util.ArrayList;import java.util.Iterator;import java.util.LinkedList;public class ArrayListTest { public static void main (String[] args) { LinkedList<String> list = new LinkedList <>(); list.add("zhangsan" ); list.add("lisi" ); list.add("wangwu" ); String firstElt = list.get(0 ); System.out.println(firstElt); for (int i = 0 ; i < list.size(); i++){ String elt = list.get(i); System.out.println(elt); } Iterator<String> it = list.iterator(); while (it.hasNext()){ System.out.println(it.next()); } for (String s : list){ System.out.println(s); } } }
HashSet 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 import java.util.HashSet;import java.util.Iterator;import java.util.Objects;import java.util.Set;public class HashSetTest { public static void main (String[] args) { HashSet<String> set = new HashSet <>(); set.add("abc" ); set.add("def" ); set.add("king" ); Iterator<String> it = set.iterator(); while (it.hasNext()){ System.out.println(it.next()); } for (String s : set){ System.out.println(s); } set.add("king" ); set.add("king" ); set.add("king" ); System.out.println(set.size()); set.add("1" ); set.add("10" ); set.add("2" ); for (String s : set){ System.out.println("--->" + s); } Set<Student> students = new HashSet <>(); Student s1 = new Student (111 , "zhangsan" ); Student s2 = new Student (222 , "lisi" ); Student s3 = new Student (111 , "zhangsan" ); students.add(s1); students.add(s2); students.add(s3); System.out.println(students.size()); for (Student stu : students){ System.out.println(stu); } } }class Student { int no; String name; public Student () { } public Student (int no, String name) { this .no = no; this .name = name; } @Override public String toString () { return "Student{" + "no=" + no + ", name='" + name + '\'' + '}' ; } @Override public boolean equals (Object o) { if (this == o) return true ; if (o == null || getClass() != o.getClass()) return false ; Student student = (Student) o; return no == student.no && Objects.equals(name, student.name); } @Override public int hashCode () { return Objects.hash(no, name); } }
TreeSet 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 import java.util.Comparator;import java.util.Iterator;import java.util.TreeSet;public class TreeSetTest { public static void main (String[] args) { TreeSet<Integer> ts = new TreeSet <>(new Comparator <Integer>() { @Override public int compare (Integer o1, Integer o2) { return o2 - o1; } }); ts.add(1 ); ts.add(100 ); ts.add(10 ); ts.add(10 ); ts.add(10 ); ts.add(10 ); ts.add(0 ); Iterator<Integer> it = ts.iterator(); while (it.hasNext()) { Integer i = it.next(); System.out.println(i); } for (Integer x : ts){ System.out.println(x); } TreeSet<A> atree = new TreeSet <>(); atree.add(new A (100 )); atree.add(new A (200 )); atree.add(new A (500 )); atree.add(new A (300 )); atree.add(new A (400 )); atree.add(new A (1000 )); for (A a : atree){ System.out.println(a); } TreeSet<B> btree = new TreeSet <>(new Comparator <B>() { @Override public int compare (B o1, B o2) { return o1.i - o2.i; } }); btree.add(new B (500 )); btree.add(new B (100 )); btree.add(new B (200 )); btree.add(new B (600 )); btree.add(new B (300 )); btree.add(new B (50 )); for (B b : btree){ System.out.println(b); } } }class A implements Comparable <A>{ int i; public A (int i) { this .i = i; } @Override public String toString () { return "A{" + "i=" + i + '}' ; } @Override public int compareTo (A o) { return o.i - this .i; } }class B { int i; public B (int i) { this .i = i; } @Override public String toString () { return "B{" + "i=" + i + '}' ; } }class BComparator implements Comparator <B> { @Override public int compare (B o1, B o2) { return o1.i - o2.i; } }
HashMap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 import java.util.HashMap;import java.util.Map;import java.util.Set;public class HashMapTest { public static void main (String[] args) { Map<Integer, String> map = new HashMap <>(); map.put(1 , "zhangsan" ); map.put(9 , "lisi" ); map.put(10 , "wangwu" ); map.put(2 , "king" ); map.put(2 , "simth" ); System.out.println(map.size()); System.out.println(map.get(2 )); Set<Integer> keys = map.keySet(); for (Integer key : keys){ System.out.println(key + "=" + map.get(key)); } Set<Map.Entry<Integer,String>> nodes = map.entrySet(); for (Map.Entry<Integer,String> node : nodes){ System.out.println(node.getKey() + "=" + node.getValue()); } } }
Properties 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import java.util.Properties;public class PropertiesTest { public static void main (String[] args) { Properties pro = new Properties (); pro.setProperty("username" , "test" ); pro.setProperty("password" , "test123" ); String username = pro.getProperty("username" ); String password = pro.getProperty("password" ); System.out.println(username); System.out.println(password); } }