集合框架之Map

思维导图

在这里插入图片描述

一、Map集合的特点

1、增删改查

//增加
Map<String, Object> map=new HashMap<>();
		map.put("小白1", 1);
		map.put("小白2", 2);
		map.put("小白3", 3);
		map.put("小白4", 4);
//删除
map.remove("小白4");
//修改(当容器中已经存在key,再次存放,那么会覆盖原有的Key所对应的值)
map.put("小白2", 5);	
//查
map.get("小白1");	

2、以键值对形式存在
3、key可以为空
代码如下:

Map<String, Object> map=new HashMap<>();
		map.put("小白1", 1);
		map.put("小白2", 2);
		map.put("小白3", 3);
		map.put("小白4", 4);
		map.put(null, 6);
		System.out.println(map);

运行结果如下:
在这里插入图片描述

二、遍历方式

1、entrySet(先获取所有的键,在获得值)
代码如下:

Map<String, Object> map=new HashMap<>();
		map.put("小白1", 1);
		map.put("小白2", 2);
		map.put("小白3", 3);
		map.put("小白4", 4);
		Set<String> keySet = map.keySet();
		for (String key : keySet) {
			System.out.println("key:"+key+";value="+map.get(key));
		}

运行结果如下:
在这里插入图片描述

2、keySet
代码如下:

Map<String, Object> map=new HashMap<>();
		map.put("小白1", 1);
		map.put("小白2", 2);
		map.put("小白3", 3);
		map.put("小白4", 4);
		Set<Entry<String,Object>> entrySet = map.entrySet();
		for (Entry<String, Object> entry : entrySet) {
			System.out.println("key:"+entry.getKey()+";value="+entry.getValue());
		}

运行结果如下:
在这里插入图片描述

三、常用实现类HashMap

以统计字符串中字母出现的次数为例
代码如下:

public class Demon3 {
	public static void main(String[] args) {
		String s="sdjsdlkfhsdjhfwakaljfiefjehnjcnwiqklkw";
		//将字符串转换成数组
		char[] chars = s.toCharArray();
		Map<Character, Integer> map=new HashMap<Character, Integer>();
		//遍历数组 将字符放入map集合中的key
		for (char c : chars) {
			//拿到字符
			Integer num = map.get(c);
			//进行判断 如果没有 就给字符对应的值设为1
			if(num==null||num==0) {
				map.put(c, 1);
			}
			//如果有 就给对应字符的值+1
			else {
				map.put(c, num+1);
			}
		}
		Set<Entry<Character,Integer>> entrySet = map.entrySet();
		for (Entry<Character, Integer> entry : entrySet) {
			System.out.println(entry.getKey()+"出现了"+entry.getValue()+"次");
		}
		
	}

}

运行结果如下:
在这里插入图片描述

四、泛型

1、作用:
(1)将运行时产生的异常转换为编译期的错误
(2)提高代码的健壮性
以筛选出值为偶数的键为例
代码如下:

public class Demon4 {
	public static void main(String[] args) {
		Map<String, Object> map=new HashMap<>();
		map.put("s", 1);
		map.put("a", 2);
		map.put("d", 3);
		map.put("e", 4);
		map.put("f", 5);
		Set<Entry<String,Object>> entrySet = map.entrySet();
		for (Entry<String, Object> entry : entrySet) {
			Object value = entry.getValue();
			Integer val=(Integer)value;
			if(val%2==0) {
				System.out.println("偶数对应的key为:"+entry.getKey());
			}
		}
	}

}

运行结果如下:
在这里插入图片描述
运行时会报一个String类型不能转成Integer类型
但是如果定义了泛型,他会直接在编译时报错
代码如下:

这里是引用

2、泛型类
如果不是泛型类 ,那么方法内部不能使用泛型(不完全对)
普通类:

class CommonDao1{
	public  List<Object> list(Object o){
		System.out.println("方法被调用");
		return null;
	}
}
class Book1{
}
class Order1{
}
class BookDao1 extends CommonDao1{
	@Override
	public List<Object> list(Object o) {
		// TODO Auto-generated method stub
		return super.list(o);
	}
}
class OrderDao1 extends CommonDao1{
}

BookDao在继承了CommonDao后,重写方法时 传的还是一个object类型
但如果是一个泛型类的话 在重写方法时,会将各自的泛型字符带上
泛型类:

class CommonDao<T>{
	public List<T> list(T t){
		System.out.println("方法被调用");
		return null;
	}
}

class Book{
}
class Order{
}
class BookDao extends CommonDao<Book>{
	@Override
	public List<Book> list(Book t) {
		// TODO Auto-generated method stub
		return super.list(t);
	}	
}
class OrderDao extends CommonDao<Order>{
	@Override
	public List<Order> list(Order t) {
		// TODO Auto-generated method stub
		return super.list(t);
	}
}

3、泛型方法
可以解决:如果不是泛型类 ,那么方法内部不能使用泛型这一问题
代码如下:

class CommonDao1{
	public<T>  List<T> list(Object o){
		System.out.println("方法被调用");
		return null;
	}
}
class Book1{
}
class BookDao1 extends CommonDao1{
	@Override
	public List<Object> list(Object o) {
		// TODO Auto-generated method stub
		return super.list(o);
	}
}
五、集合框架工具类

1.collections
(1).排序

public class Demon5 {
	public static void main(String[] args) {
		List<User> list = new ArrayList<>();	
		list.add(new User("小白", 18000));
		list.add(new User("小薛", 15000));
		list.add(new User("小滦", 20000));
		list.add(new User("小戴", 8000));
		list.add(new User("阿艳", 5000));
		Collections.sort(list, new Comparator<User>() {
			@Override
			public int compare(User o1, User o2) {
				// TODO Auto-generated method stub
				return o1.getMoney() - o2.getMoney();
			}
		});
			}
}
class User {
	private String name;
	private int money;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getMoney() {
		return money;
	}
	public void setMoney(int money) {
		this.money = money;
	}
	public User(String name, int money) {
		super();
		this.name = name;
		this.money = money;
	}
	public String toString() {
		return "User [name=" + name + ", money=" + money + "]";
	}
}

(2).集合转换成数组

toArray();

2.Arrays
(1).toString
代码如下:

String[] arr=new String[] {"a","b","c","d"};
System.out.println(Arrays.toString(arr));

运行结果如下:
在这里插入图片描述
(2).asList

Arrays.asList(arr);

注意:将数组变成集合来操作,但是不能违背数组本身的特点 不然会报错
如下:

String[] arr=new String[] {"a","b","c","d"};
List<String> asList = Arrays.asList(arr);
		asList.add("c");

运行结果:
在这里插入图片描述

(3).sort

Arrays.sort(ar);

Arrays也可以用sort排序
代码如下:

Integer[] ar=new Integer[] {12,1,5,98,15};
		Arrays.sort(ar);
		System.out.println(Arrays.toString(ar));

运行结果:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值