黑马程序员 java学习笔记——集合框架2

---------------------- 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集合,再通过迭代器取出。
示例代码如下:
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<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);
		}
	}
}
2、Set<Map.Entry<k,v>> entrySet:将Map集合中的映射关系存入到Set集合中,而这个关系的数据类型就是:Map.Entry
示例代码如下:
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、当方法名重名时,指定具体所属的对象或者类

----------------------  ASP.Net+Android+IO开发S .Net培训 、期待与您交流! ----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值