---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
Map集合
Map<K,V>:该集合存储键值对,一对一对往里存,而且要保证键的唯一性。K—此映射所维护的 键的类型
V—映射 值的类型
还有一点需要注意:与Collection的单列集合不同,Map属于双列集合。
Map接口的方法如下图:
![]()
Map谱系图
Map
|--Hashtable:底层是哈希表数据结构,不可以存入null键null值,该集合是线程同步的。始于JDK1.0,效率低。
|--HashMap:底层是哈希表数据结构,允许存入null键null值,该集合是不同步的,始于JDK1.2,效率高
|--TreeMap:底层是二叉树数据结构,线程不同步,可以用于给map集合的键进行排序
PS:Set集合底层就是使用了Map集合。
示例代码如下:
import java.util.*; public class Demo{ public static void main(String[] args){ Map<String,String> map=new HashMap<String,String>(); sop("put:"+map.put("01","zhangsan1")); //添加元素时,如果出现相同的键,那么后添加的会覆盖原有键对应的值。 sop("put:"+map.put("01","wangwu")); map.put("02","zhangsan2"); map.put("03","zhangsan3"); sop("containsKey:"+map.containsKey("022"); sop("get:"+map.get("023")); map.put("04",null); sop("get:"+map.get("04")); //可以通过get方法的返回值来判断一个键是否存在,通过返回null来判断 Collection<String> coll=map.values(); sop(coll); sop(map); } public static void sop(Object obj){ System.out.println(obj); } }
Map集合取出的两种方式
1,Set<k> keySet:将Map中所有的键存入到Set集合,因为Set具备迭代器。
所以可以迭代方式取出所有的键,再根据get方法获取每个键对应的值
Map集合取出原理:将Map集合转化成Set集合,再通过迭代器取出。示例代码如下:
2、Set<Map.Entry<k,v>> entrySet:将Map集合中的映射关系存入到Set集合中,而这个关系的数据类型就是:Map.Entryimport java.util.*; public class Demo{ public static void main(String[] args){ Map<String,String> map=new HashMap<String,String>(); map.put("02","zhangsan2"); map.put("03","zhangsan3"); map.put("01","zhangsan1"); map.put("04","zhangsan4"); //先获取map集合中的所有键的set集合。 Set<String> keySet=map.keySet(); for(Iterator<String> it=keySet.iterator();it.hasNext();){ String key=it.next(); String value=map.get(key); System.out.println("key:"+key+",value:"+value); } } }
示例代码如下:import java.util.*; public class Demo{ public static void main(String[] args){ Map<String,String> map=new HashMap<String,String>(); map.put("02","zhangsan2"); map.put("03","zhangsan3"); map.put("01","zhangsan1"); map.put("04","zhangsan4"); //将Map集合中的映射关系取出,存入到Set集合中 Set<Map.Entry<String,String>> entrySet=map.entrySet(); for(Iterator<Map.Entry<String,String>> it=entrySet.iterator();it.hasNext();){ Map.Entry<String,String> me=it.next(); String key=me.getKey(); String value=me.getValue(); System.out.println(key+":"+value); } } }
工具类Collections
Collections是一个集合框架的工具类,其中定义了许多的静态方法。
比较常用的有如下几个方法:
1、sort() 对指定列表按升序进行排序。
2、reverseOrder(new Comparator()) 返回一个比较器,它强行逆转指定比较器的顺序。
3、binarySearch() 对有序的集合二分查找,返回值是集合中的索引,如果不存在该元素, 就返回-(插入点)-1。
4、shuffle(List list);对集合中的元素随机置换
示例代码如下:
import java.util.*; public class Demo{ public static void main(String[] args){ sortDemo(); } public static void sortDemo(){ List<String> list=new ArrayList<String>(); list.add("abcd"); list.add("aaa"); list.add("z"); list.add("kkkkk"); list.add("qq"); list.add("z"); sop(list); Collections.sort(list); sop(list); } public static void sop(Object obj){ System.out.println(obj); } }
工具类Arrays
该工具类的常用方法,asList(T...a)
该方法的示例代码如下:
import java.util.*; public class Demo{ public static void main(String[] args){ Integer[] nums={45,3,0,85,9,32}; //将数组变成List集合,方便打印。 List<Integer> list=Arrays.asList(nums); System.out.println(list); } }
集合变数组
为什么要将集合变成数组?
为了限定对元素的操作,当不需要再增删时,就可以将集合变成数组。
示例代码如下:
import java.util.*; public class Demo{ public static void main(String[] args){ ArrayList<String> al=new ArrayList<String>(); al.add("abc1"); al.add("abc2"); al.add("abc3"); ` String[] arr=al.toArray(new String[al.size()}); System.out.println(Arrays.toString(arr)); } }
加强for循环
格式:
for(数据类型 变量名:被遍历的集合Collection或者数组){
}
局限:只能取出 不能修改
示例代码如下:
public class Demo{ public static void main(String[] args){ int[] arr={1,55,4,11,2,33}; for(int a:arr){ System.out.println(a); } } }
可变参数与静态导入
可变参数
可变参数其实就是数组参数的简写形式,不用每一次都手动的建立数组对象,只要将要操作的元素作为参数传递即可,隐式将这些参数封装成了数组。
PS:注意:可变参数一定要定义在参数列表的最后面
静态导入
注意:
1、当类名重名时,需要指定具体的包名
2、当方法名重名时,指定具体所属的对象或者类