List,Map的常用操作【自用】

list的Stream操作部分参考的是以下文章

https://blog.csdn.net/y_k_y/article/details/84633001

list,map,set都是容器(包括实现collection接口的类、实现Map接口的类),用来存储对象

map的key不可以重复,key和value是否为null看map是什么类型的,如果是hashMap,key和value都可以为null,而如果是hashTable,key和value都不能null;hashMap是非线程安全的而hashTable是线程安全的,但是hashTable为了实现线程安全用synchronized修饰了所有的方法,单线程环境效率十分低;hashMap底层数组长度必须为2的幂,这样做是为了hash准备,默认为16;而HashTable底层数组长度可以为任意值,这就造成了hash算法散射不均匀,容易造成hash冲突,默认为11;

List

1.声明:List<类> list = new ArrayList<>();
	//<>:可以填包装类(Integer),自定义类(User)
2.添加对象:list.add(对象)
3.删除指定对象:list.remove(index)但是建议使用迭代器或将不删的对象用例外的List保存变相实现删除
4.更改指定对象:list.set(index,value)
5.获取指定对象:list.get(index)
删,改,查都得配合遍历判断
6.遍历:
	1)for增强型:for(String value:list){ System.out.println(value);}、、、、for循环:for(int i = 0;i < list.size(); i ++){    }
	2)java8:list.forEach(item->{     })//item是当前对象
7.List和Array的相互转换
	1)List转Array: List<String> list = Arrays.asList(arr);
	2)Array转List: Object[] objects = list.toArray();
8.Stream流常用操作(存类对象的时候)
	1)List对象集合提取指定属性: List<Integer> ids = list.stream().map(User::getId).collect(Collectors.toList());
							  Set<Integer> ids = list.stream().map(User::getId).collect(Collectors.toSet())
		2)List对象集合转Map:Map<Integer,String> map = list.stream().collect(Collectors.toMap(类名::getId, 类名::getName, ((k1, k2) -> k1)));
		//List转Map会出现key重复的问题,处理方式:(k1, k2) -> k1)保留前面的value, (k1, k2) -> k2)保留后面的value,,(key1 , key2)-> key1+","+key2 )简单来说就是你可以对k1,k2进行操作,操作的结果就是保留的value
	3)计算总共几条数据
		Long count = list.stream().collect(Collectors.counting());
		//有意思吗?直接list.size()完事
	4)获得最大、最小值
		Integer max = list.stream().map(类名::get方法名).collect(Collectors.maxBy(Integer::compare)).get();
		Integer min= list.stream().map(类名::get方法名).collect(Collectors.minBy(Integer::compare)).get();
	5)求和
		Integer sum = list.stream().collect(Collectors.summingInt(item->item.get方法名())));
	6)求平均
		Double average = list.stream().collect(Collectors.averagingDouble(类名::get方法名));
	7)去重
        list.stream().collect( Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet<User>(Comparator.comparing(User::getName))), ArrayList::new));
	8)实现in的操作
	 List<Integer> needList = new ArrayList<>();
	 needList.add(1);
	 list.stream().filter(item -> needList .contains(item.getCompanyId())).collect(Collectors.toList());	 //只要companyId=1的

Map

1.声明:Map<K,V> map = new hashMap();
	//K:key,所有对象都可以作为Key,但是工作中最好使用String作为key,避免使用Integer或long,用Integer作为key的map用long作为key调用get()只会获取到null,反之亦然,用long作为key的map用Integer作为key调用get()只会获取到null,
	//V:value,所有对象
2.添加对象:map.put(K,V)
3.删除指定对象:map.remove(key)
4.更改指定对象:map.put(K,V)//不要怀疑根据key更改值就是这么做
5.获取指定对象:map.get(index)
6.遍历:
1)entrySet遍历(效率最高)
  for (Map.Entry<String, String> entry : map.entrySet()) {
      String k = entry.getKey();
      String v = entry.getValue();
      System.out.println(k + " : " + v);
  }
2)java8:map1.forEach((k, v) -> { System.out.println(k + " : " + v); });
7.转为List
1)将Map的所有key转化为List:
	1.List<String> result = new ArrayList(map.keySet());
	2.List<String> result = map.keySet().stream().collect(Collectors.toList());

2)将Map的所有value转化为List:
	1.List<String> result = new ArrayList(map.values());
	2.List<String> result = map.values().stream().collect(Collectors.toList());

8.其他常用方法:map.getOrDefault(index,如果差不到返回的值)
			  map.keySet()获取所有key值
			  map.values()获取所有values值

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值