首页 > 技术文章 > java之静态导入、可变参数、Collections集合工具类、集合嵌套

mlf19920916 2020-01-06 09:59 原文

1.在源码中经常会出现,静态导入 import static XXX.YYY,导入后YYY可以直接使用

 1 import static java.util.Map.Entry;
 2 public class HashMapTest {
 3     public static void main(String[] args) {
 4         //1,创建hashmap集合对象。
 5         Map<Student,String> map = new HashMap<Student,String>();
 6 
 7         //取出元素。键值对方式
 8         //Set<Map.Entry<Student, String>> entrySet = map.entrySet();
 9         Set<Entry<Student, String>> entrySet = map.entrySet();
10 
11         //for (Map.Entry<Student, String> entry : entrySet) {
12         for (Entry<Student, String> entry : entrySet) {
13             Student key = entry.getKey();
14             String value = entry.getValue();
15             System.out.println(key.toString()+"....."+value);
16         }
17     }
18 }

2.可变参数

当一个方法可以接受多个参数且类型一致时,可以使用可变参数或者数组导入,但数组的长度是固定的,且必须传入数组。

修饰符 返回值类型 方法名(参数类型... 形参名){  }

其实这个书写完全等价与

修饰符 返回值类型 方法名(参数类型[] 形参名){  }

只是后面这种定义,在调用时必须传递数组,而前者可以直接传递数据即可。

 

 1     public static void main(String[] args) {
 2         int[] arr = {21,89,32};
 3         int sum = add(arr);
 4         System.out.println(sum);
 5 //其实编译成的class文件,将这些元素先封装到一个数组中,在进行传递。
 6         sum = add(21,89,32);//可变参数调用形式
 7         System.out.println(sum);
 8         
 9     }
10 
11     //JDK1.5之后写法
12     public static int add(int...arr){//参数列表中只能拥有一个可变参数,且可变参数的位置必须在最后
13         int sum = 0;
14         for (int i = 0; i < arr.length; i++) {
15             sum += arr[i];
16         }
17         return sum;
18     }

 

3.Collections集合工具类(用于处理Collection接口中的集合)

 

 

 

1public static <T> void sort(List<T> list) // 集合元素排序
2 //排序前元素list集合元素 [33,11,77,55]
3 Collections.sort( list );
4 //排序后元素list集合元素 [11,33,55,77]
5 
6public static void shuffle(List<?> list) //  集合元素存储位置打乱
7 //list集合元素 [11,33,55,77]
8 Collections.shuffle( list );
9 //使用shuffle方法后,集合中的元素为[77,33,11,55],每次执行该方法,集合中存储的元素位置都会随机打乱

4.集合嵌套《Map集合中的key值最好为基本数据类型的包装类、String类,自定义类(需要重写hashcode()和equals())》

 1 集合嵌套并不是一个新的知识点,仅仅是集合内容又是集合,如Collection集合嵌套、Collection集合与Map集合相互嵌套、Map集合嵌套。
 2 ArrayList嵌套 ArrayList
 3     ArrayList< ArrayList<String> >
 4     Collection< ArrayList<Integer> >
 5 Map嵌套 ArrayList
 6 HashMap<String, ArrayList<Person>>
 7 ArrayList< HashMap<String, String>>
 8 Map集合嵌套
 9 HashMap<String, HashMap<String,String>>
10 HashMap<String, HashMap<Person,String>>

5.集合继承体系的面向对象思想

 

 

 

接口:用来明确所有集合中该具有的功能,相当于在定义集合功能标准;

 

抽象类:把多个集合中功能实现方式相同的方法,抽取到抽象类实现,具体集合不再遍写,继承使用即可;

 

具体类:继承抽象类,实现接口,重写所有抽象方法,达到具备指定功能的集合。每个具体集合类,根据自身的数据存储结构方式,对接口中的功能方法,进行不同方式的实现。

推荐阅读