1.Collection集合 1.1数组和集合的区别
相同点:都是容器,可以存储多个数据
不同点:
数组的长度是不可变的,集合的长度是可变的
数组可以存基本数据类型和引用数据类型
集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类
1.2 集合类体系结构
1.3 概述和使用 1.3.1 Collection集合概述
是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
JDK 不提供此接口的任何直接实现.它提供更具体的子接口(如Set和List)实现
1.3.2 创建Collection集合的对象
1.3.3 Collection集合常用方法 1 2 3 4 5 6 7 8 9 10 11 12 13 boolean add (E e) boolean remove (Object o) boolean removeIf (Object o) void clear () boolean contains (Object o) boolean isEmpty () int size ()
1.4 Collection集合的遍历 1.4.1 迭代器 1.4.1.1 迭代器介绍
迭代器,集合的专用遍历方式
Iterator<E> iterator()
: 返回此集合中元素的迭代器,通过集合对象的iterator()方法
得到
1.4.1.2 Iterator中的常用方法 1 2 boolean hasNext () E next ()
1.4.1.3 Collection集合的遍历 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class IteratorDemo1 { public static void main (String[] args) { Collection<String> c = new ArrayList <>(); c.add("hello" ); c.add("world" ); c.add("java" ); c.add("javaee" ); Iterator<String> it = c.iterator(); while (it.hasNext()) { String s = it.next(); System.out.println(s); } } }
1.4.1.4 迭代器中删除的方法
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public class IteratorDemo2 { public static void main (String[] args) { ArrayList<String> list = new ArrayList <>(); list.add("a" ); list.add("b" ); list.add("b" ); list.add("c" ); list.add("d" ); Iterator<String> it = list.iterator(); while (it.hasNext()){ String s = it.next(); if ("b" .equals(s)){ it.remove(); } } System.out.println(list); } }
1.4.2 增强for循环 介绍:
它是JDK5之后出现的,其内部原理是一个Iterator迭代器
实现Iterable接口的类才可以使用迭代器和增强for
简化数组和Collection集合的遍历
格式:
1 2 3 4 5 for (集合/数组中元素的数据类型 变量名 : 集合/数组名) { }
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class MyCollectonDemo1 { public static void main (String[] args) { ArrayList<String> list = new ArrayList <>(); list.add("a" ); list.add("b" ); list.add("c" ); list.add("d" ); list.add("e" ); list.add("f" ); for (String str : list){ System.out.println(str); } } }
2.泛型 2.1 泛型概述 泛型的介绍:泛型是JDK5中引入的特性,它提供了编译时类型安全检测机制
泛型的好处:
把运行时期的问题提前到了编译期间
避免了强制类型转换
泛型的定义格式:
1 2 <类型>: 指定一种类型的格式.尖括号里面可以任意书写,一般只写一个字母.例如: <E> <T> <类型1 ,类型2 …>: 指定多种类型的格式,多种类型之间用逗号隔开.例如: <E,T> <K,V>
2.2 泛型类 定义格式:
示例代码:
泛型类
1 2 3 4 5 6 7 8 9 10 11 public class Generic <T> { private T t; public T getT () { return t; } public void setT (T t) { this .t = t; } }
测试类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class GenericDemo1 { public static void main (String[] args) { Generic<String> g1 = new Generic <String>(); g1.setT("杨幂" ); System.out.println(g1.getT()); Generic<Integer> g2 = new Generic <Integer>(); g2.setT(30 ); System.out.println(g2.getT()); Generic<Boolean> g3 = new Generic <Boolean>(); g3.setT(true ); System.out.println(g3.getT()); } }
2.3 泛型方法 定义格式:
1 修饰符 <类型> 返回值类型 方法名(类型 变量名) { }
示例代码:
带有泛型方法的类
1 2 3 4 5 public class Generic { public <T> void show (T t) { System.out.println(t); } }
测试类
1 2 3 4 5 6 7 8 9 public class GenericDemo2 { public static void main (String[] args) { Generic g = new Generic (); g.show("柳岩" ); g.show(30 ); g.show(true ); g.show(12.34 ); } }
2.4 泛型接口 定义格式:
1 修饰符 interface 接口名<类型> { }
示例代码:
2.5 类型通配符
类型通配符: <?>
ArrayList<?>
: 表示元素类型未知的ArrayList
,它的元素可以匹配任何的类型
但是并不能把元素添加到ArrayList
中了,获取出来的也是父类类型
类型通配符上限: <? extends 类型>
ArrayListList <? extends Number>
: 它表示的类型是Number或者其子类型
类型通配符下限: <? super 类型>
ArrayListList <? super Number>
: 它表示的类型是Number或者其父类型
泛型通配符的使用
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 public class GenericDemo4 { public static void main (String[] args) { ArrayList<Integer> list1 = new ArrayList <>(); ArrayList<String> list2 = new ArrayList <>(); ArrayList<Number> list3 = new ArrayList <>(); ArrayList<Object> list4 = new ArrayList <>(); method(list1); method(list2); method(list3); method(list4); getElement1(list1); getElement1(list2); getElement1(list3); getElement1(list4); getElement2(list1); getElement2(list2); getElement2(list3); getElement2(list4); } public static void method (ArrayList<?> list) {} public static void getElement1 (ArrayList<? extends Number> list) {} public static void getElement2 (ArrayList<? super Number> list) {} }
3.List集合 3.1 概述和特点 概述:
有序集合,这里的有序指的是存取顺序
用户可以精确控制列表中每个元素的插入位置,用户可以通过整数索引访问元素,并搜索列表中的元素
与Set集合不同,列表通常允许重复的元素
特点:
3.2 List集合的特有方法 1 2 3 4 5 6 7 void add (int index,E element) E remove (int index) E set (int index,E element) E get (int index)
3.1 List集合的实现类 3.1.1 List集合子类的特点
ArrayList集合
底层是数组结构实现,查询快、增删慢
LinkedList集合
底层是链表结构实现,查询慢、增删快
3.1.2 ArrayList 3.1.2.1 构造方法和添加方法 1 2 3 4 5 public ArrayList () public boolean add (E e) public void add (int index,E element)
ArrayList<E>
:
可调整大小的数组实现
<E>
: 是一种特殊的数据类型,泛型。
怎么用呢 ?
在出现E的地方我们使用引用数据类型替换即可
举例:ArrayList<String>
, ArrayList<Student>
3.1.2.2 常用方法 1 2 3 4 5 6 7 8 9 public boolean remove (Object o) public E remove (int index) public E set (int index,E element) public E get (int index) public int size ()
3.1.3 LinkedList 特有方法:
1 2 3 4 5 6 7 8 9 10 11 public void addFirst (E e) public void addLast (E e) public E getFirst () public E getLast () public E removeFirst () public E removeLast ()
4.Set集合 4.1 概述和特点
不可以存储重复元素
没有索引,不能使用普通for循环遍历
4.2 Set集合的使用 存储字符串并遍历
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 public class MySet1 { public static void main (String[] args) { Set<String> set = new TreeSet <>(); set.add("ccc" ); set.add("aaa" ); set.add("aaa" ); set.add("bbb" ); Iterator<String> it = set.iterator(); while (it.hasNext()){ String s = it.next(); System.out.println(s); } System.out.println("-----------------------------------" ); for (String s : set) { System.out.println(s); } } }
4.3 Set集合实现类 4.3.1 TreeSet 4.3.1.1概述和特点
不可以存储重复元素
没有索引
可以将元素按照规则进行排序
TreeSet()
:根据其元素的自然排序进行排序
TreeSet(Comparator comparator)
:根据指定的比较器进行排序
4.3.1.2 集合基本使用 存储Integer类型的整数并遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class TreeSetDemo01 { public static void main (String[] args) { TreeSet<Integer> ts = new TreeSet <Integer>(); ts.add(10 ); ts.add(40 ); ts.add(30 ); ts.add(50 ); ts.add(20 ); ts.add(30 ); for (Integer i : ts) { System.out.println(i); } } }
4.3.1.3 自然排序Comparable的使用 案例需求:
存储学生对象并遍历,创建TreeSet集合使用无参构造方法
要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序
实现步骤:
使用空参构造创建TreeSet集合
用TreeSet集合存储自定义对象,无参构造方法使用的是自然排序对元素进行排序的
自定义的Student类实现Comparable接口
自然排序,就是让元素所属的类实现Comparable接口,重写compareTo(T o)方法
重写接口中的compareTo方法
重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写
代码实现:
学生类
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 public class Student implements Comparable <Student>{ private String name; private int age; public Student () { } public Student (String name, int age) { this .name = name; this .age = age; } public String getName () { return name; } public void setName (String name) { this .name = name; } public int getAge () { return age; } public void setAge (int age) { this .age = age; } @Override public String toString () { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}' ; } @Override public int compareTo (Student o) { int result = this .age - o.age; result = result == 0 ? this .name.compareTo(o.getName()) : result; return result; } }
测试类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 public class MyTreeSet2 { public static void main (String[] args) { TreeSet<Student> ts = new TreeSet <>(); Student s1 = new Student ("zhangsan" ,28 ); Student s2 = new Student ("lisi" ,27 ); Student s3 = new Student ("wangwu" ,29 ); Student s4 = new Student ("zhaoliu" ,28 ); Student s5 = new Student ("qianqi" ,30 ); ts.add(s1); ts.add(s2); ts.add(s3); ts.add(s4); ts.add(s5); for (Student student : ts) { System.out.println(student); } } }
4.3.1.4 比较器排序Comparator的使用 案例需求:
存储老师对象并遍历,创建TreeSet集合使用带参构造方法
要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序
实现步骤:
用TreeSet集合存储自定义对象,带参构造方法使用的是比较器排序对元素进行排序的
比较器排序,就是让集合构造方法接收Comparator的实现类对象,重写compare(T o1,T o2)方法
重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写
代码实现:
老师类
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 public class Teacher { private String name; private int age; public Teacher () { } public Teacher (String name, int age) { this .name = name; this .age = age; } public String getName () { return name; } public void setName (String name) { this .name = name; } public int getAge () { return age; } public void setAge (int age) { this .age = age; } @Override public String toString () { return "Teacher{" + "name='" + name + '\'' + ", 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 public class MyTreeSet4 { public static void main (String[] args) { TreeSet<Teacher> ts = new TreeSet <>(new Comparator <Teacher>() { @Override public int compare (Teacher o1, Teacher o2) { int result = o1.getAge() - o2.getAge(); result = result == 0 ? o1.getName().compareTo(o2.getName()) : result; return result; } }); Teacher t1 = new Teacher ("zhangsan" ,23 ); Teacher t2 = new Teacher ("lisi" ,22 ); Teacher t3 = new Teacher ("wangwu" ,24 ); Teacher t4 = new Teacher ("zhaoliu" ,24 ); ts.add(t1); ts.add(t2); ts.add(t3); ts.add(t4); for (Teacher teacher : ts) { System.out.println(teacher); } } }
4.3.1.5 两种比较方式总结
两种比较方式小结
自然排序: 自定义类实现Comparable接口,重写compareTo方法,根据返回值进行排序
比较器排序: 创建TreeSet对象的时候传递Comparator的实现类对象,重写compare方法,根据返回值进行排序
在使用的时候,默认使用自然排序,当自然排序不满足现在的需求时,必须使用比较器排序
两种方式中关于返回值的规则
如果返回值为负数,表示当前存入的元素是较小值,存左边
如果返回值为0,表示当前存入的元素跟集合中元素重复了,不存
如果返回值为正数,表示当前存入的元素是较大值,存右边
4.3.2 HashSet 4.3.2.1 概述和特点
底层数据结构是哈希表
存取无序
不可以存储重复元素
没有索引,不能使用普通for循环遍历
4.3.2.2 基本应用 存储字符串并遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class HashSetDemo { public static void main (String[] args) { HashSet<String> set = new HashSet <String>(); set.add("hello" ); set.add("world" ); set.add("java" ); set.add("world" ); for (String s : set) { System.out.println(s); } } }
4.3.2.3 哈希值 哈希值简介:
是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
如何获取哈希值:
Object
类中的public int hashCode()
:返回对象的哈希码值
哈希值的特点:
同一个对象多次调用hashCode()方法返回的哈希值是相同的
默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同
4.3.2.4 哈希表结构 JDK1.8以前
数组 + 链表
JDK1.8以后
节点个数少于等于8个
数组 + 链表
节点个数多于8个
数组 + 红黑树
4.3.2.5 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 public class Student { private String name; private int age; public Student () { } public Student (String name, int age) { this .name = name; this .age = age; } public String getName () { return name; } public void setName (String name) { this .name = name; } public int getAge () { return age; } public void setAge (int age) { this .age = age; } @Override public boolean equals (Object o) { if (this == o) return true ; if (o == null || getClass() != o.getClass()) return false ; Student student = (Student) o; if (age != student.age) return false ; return name != null ? name.equals(student.name) : student.name == null ; } @Override public int hashCode () { int result = name != null ? name.hashCode() : 0 ; result = 31 * result + age; return result; } }
测试类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 public class HashSetDemo02 { public static void main (String[] args) { HashSet<Student> hs = new HashSet <Student>(); Student s1 = new Student ("林青霞" , 30 ); Student s2 = new Student ("张曼玉" , 35 ); Student s3 = new Student ("王祖贤" , 33 ); Student s4 = new Student ("王祖贤" , 33 ); hs.add(s1); hs.add(s2); hs.add(s3); hs.add(s4); for (Student s : hs) { System.out.println(s.getName() + "," + s.getAge()); } } }
总结: HashSet集合存储自定义类型元素,要想实现元素的唯一,要求必须重写hashCode方法和equals方法
5.Map集合 5.1 概述和特点 Map集合概述
1 interface Map <K,V> K:键的类型;V:值的类型
Map集合的特点
双列集合,一个键对应一个值
键不可以重复,值可以重复
5.2 基本方法 方法介绍
1 2 3 4 5 6 7 8 9 10 11 12 13 V put (K key,V value) V remove (Object key) void clear () boolean containsKey (Object key) boolean containsValue (Object value) boolean isEmpty () int size ()
5.3 获取方法 方法介绍
1 2 3 4 5 6 7 V get (Object key) Set<K> keySet () Collection<V> values () Set<Map.Entry<K,V>> entrySet()
5.4 keySet()
方式遍历 遍历思路:我们刚才存储的元素都是成对出现的,所以我们把Map看成是一个夫妻对的集合
把所有的丈夫给集中起来
遍历丈夫的集合,获取到每一个丈夫
根据丈夫去找对应的妻子
步骤分析:
获取所有键的集合。用keySet()方法实现
遍历键的集合,获取到每一个键。用增强for实现
根据键去找值。用get(Object key)方法实现
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public class MapDemo01 { public static void main (String[] args) { Map<String, String> map = new HashMap <String, String>(); map.put("张无忌" , "赵敏" ); map.put("郭靖" , "黄蓉" ); map.put("杨过" , "小龙女" ); Set<String> keySet = map.keySet(); for (String key : keySet) { String value = map.get(key); System.out.println(key + "," + value); } } }
5.5 entrySet()
方式遍历 遍历思路:我们刚才存储的元素都是成对出现的,所以我们把Map看成是一个夫妻对的集合
获取所有结婚证的集合
遍历结婚证的集合,得到每一个结婚证
根据结婚证获取丈夫和妻子
步骤分析:
1.获取所有键值对对象的集合:Set<Map.Entry<K,V>> entrySet()
2.遍历键值对对象的集合,得到每一个键值对对象:用增强for实现,得到每一个Map.Entry
3.根据键值对对象获取键和值:用getKey()
得到键、用getValue()
得到值
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class MapDemo02 { public static void main (String[] args) { Map<String, String> map = new HashMap <String, String>(); map.put("张无忌" , "赵敏" ); map.put("郭靖" , "黄蓉" ); map.put("杨过" , "小龙女" ); Set<Map.Entry<String, String>> entrySet = map.entrySet(); for (Map.Entry<String, String> me : entrySet) { String key = me.getKey(); String value = me.getValue(); System.out.println(key + "," + value); } } }
5.6 Map集合实现类 5.6.1 HashMap 5.6.1.1 概述和特点
HashMap底层是哈希表结构的
依赖hashCode()
和equals()
保证键的唯一
如果键要存储的是自定义对象,需要重写hashCode()
和equals()
5.6.1.2 应用案例 案例需求:
创建一个HashMap集合,键是学生对象(Student),值是居住地 (String)。存储多个元素,并遍历。
要求保证键的唯一性:如果学生对象的成员变量值相同,我们就认为是同一个对象
代码实现:
学生类
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 public class Student { private String name; private int age; public Student () { } public Student (String name, int age) { this .name = name; this .age = age; } public String getName () { return name; } public void setName (String name) { this .name = name; } public int getAge () { return age; } public void setAge (int age) { this .age = age; } @Override public boolean equals (Object o) { if (this == o) return true ; if (o == null || getClass() != o.getClass()) return false ; Student student = (Student) o; if (age != student.age) return false ; return name != null ? name.equals(student.name) : student.name == null ; } @Override public int hashCode () { int result = name != null ? name.hashCode() : 0 ; result = 31 * result + age; return result; } }
测试类
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 public class HashMapDemo { public static void main (String[] args) { HashMap<Student, String> hm = new HashMap <Student, String>(); Student s1 = new Student ("林青霞" , 30 ); Student s2 = new Student ("张曼玉" , 35 ); Student s3 = new Student ("王祖贤" , 33 ); Student s4 = new Student ("王祖贤" , 33 ); hm.put(s1, "西安" ); hm.put(s2, "武汉" ); hm.put(s3, "郑州" ); hm.put(s4, "北京" ); Set<Student> keySet = hm.keySet(); for (Student key : keySet) { String value = hm.get(key); System.out.println(key.getName() + "," + key.getAge() + "," + value); } } }
5.6.2 TreeMap 5.6.2.1 概述和特点
TreeMap底层是红黑树结构
依赖自然排序或者比较器排序,对键进行排序
如果键存储的是自定义对象,需要实现Comparable接口或者在创建TreeMap对象时候给出比较器排序规则
5.6.2.2 应用案例 案例需求:
创建一个TreeMap集合,键是学生对象(Student),值是籍贯(String),学生属性姓名和年龄,按照年龄进行排序并遍历
要求按照学生的年龄进行排序,如果年龄相同则按照姓名进行排序
代码实现:
学生类
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 public class Student implements Comparable <Student>{ private String name; private int age; public Student () { } public Student (String name, int age) { this .name = name; this .age = age; } public String getName () { return name; } public void setName (String name) { this .name = name; } public int getAge () { return age; } public void setAge (int age) { this .age = age; } @Override public String toString () { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}' ; } @Override public int compareTo (Student o) { int result = o.getAge() - this .getAge(); result = result == 0 ? o.getName().compareTo(this .getName()) : result; return result; } }
测试类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 public class Test1 { public static void main (String[] args) { TreeMap<Student,String> tm = new TreeMap <>(); Student s1 = new Student ("xiaohei" ,23 ); Student s2 = new Student ("dapang" ,22 ); Student s3 = new Student ("xiaomei" ,22 ); tm.put(s1,"江苏" ); tm.put(s2,"北京" ); tm.put(s3,"天津" ); tm.forEach( (Student key, String value)->{ System.out.println(key + "---" + value); } ); } }
6.可变参数 6.1 可变参数 6.1.1 可变参数介绍
可变参数又称参数个数可变,用作方法的形参出现,那么方法参数个数就是可变的了
方法的参数类型已经确定,个数不确定,我们可以使用可变参数
6.1.2 可变参数定义格式 1 修饰符 返回值类型 方法名(数据类型… 变量名) { }
6.1.3 可变参数的注意事项
这里的变量其实是一个数组
如果一个方法有多个参数,包含可变参数,可变参数要放在最后
6.1.4 可变参数的基本使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 public class ArgsDemo01 { public static void main (String[] args) { System.out.println(sum(10 , 20 )); System.out.println(sum(10 , 20 , 30 )); System.out.println(sum(10 , 20 , 30 , 40 )); System.out.println(sum(10 ,20 ,30 ,40 ,50 )); System.out.println(sum(10 ,20 ,30 ,40 ,50 ,60 )); System.out.println(sum(10 ,20 ,30 ,40 ,50 ,60 ,70 )); System.out.println(sum(10 ,20 ,30 ,40 ,50 ,60 ,70 ,80 ,90 ,100 )); } public static int sum (int ... a) { int sum = 0 ; for (int i : a) { sum += i; } return sum; } }
6.2 创建不可变集合 方法介绍:
在List、Set、Map接口中,都存在of方法,可以创建一个不可变的集合
这个集合不能添加,不能删除,不能修改
但是可以结合集合的带参构造,实现集合的批量添加
在Map接口中,还有一个ofEntries方法可以提高代码的阅读性
首先会把键值对封装成一个Entry对象,再把这个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 42 43 44 45 46 47 48 49 50 51 52 public class MyVariableParameter4 { public static void main (String[] args) { } private static void method4 () { Map<String, String> map = Map.ofEntries( Map.entry("zhangsan" , "江苏" ), Map.entry("lisi" , "北京" )); System.out.println(map); } private static void method3 () { Map<String, String> map = Map.of("zhangsan" , "江苏" , "lisi" , "北京" , "wangwu" , "天津" ); System.out.println(map); } private static void method2 () { Set<String> set = Set.of("a" , "b" , "c" , "d" ,"a" ); System.out.println(set); } private static void method1 () { List<String> list = List.of("a" , "b" , "c" , "d" ); System.out.println(list); ArrayList<String> list3 = new ArrayList <>(List.of("a" , "b" , "c" , "d" )); System.out.println(list3); } }
Author:
不久之
License:
Copyright (c) 2019 CC-BY-NC-4.0 LICENSE
Slogan:
Do you believe in DESTINY ?