Java基础(6)List、Set、Map的相互转换
集合之间的互相转换
集合无非就是数据的不同存放形式,在日常使用中,不同集合之间互相转换是常有的,下面就简单介绍几种:
List与Set互相转换
由于这两个都是单列集合,可以很容易进行转换。注意,list转成set之后,会丢失自己的排序以及重复数据。我们有时候会使用这个特性来对list进行去重处理。同理,若是想用这个方法做自定义对象list去重,则需要重写对象的重写其hashcode方法和equals方法
list转set
这个转换通常用来做去重
List<String> arrayList = new ArrayList<>();
arrayList.add("a");
arrayList.add("b");
arrayList.add("c");
arrayList.add("a");
Set<String> newHashSet = new HashSet<>(arrayList);
System.out.println("arrayList:" + arrayList.toString());
System.out.println("newHashSet:" + newHashSet.toString());
我们可以看到,list转换成set时候,新得到的set是去重得。至于abc这个排序,则是在哈希值比较小时候,会得到整齐的排列,值大了就不好说了;
set转list
我习惯转成List之后进行排序。
Set<String> hashSet = new HashSet<>();
hashSet.add("a");
hashSet.add("c");
hashSet.add("b");
hashSet.add("c");
hashSet.add("d");
List<String> newArrayList = new ArrayList<>(hashSet);
List<String> newLinkedList = new LinkedList<>(hashSet);
Map
Map属于双列集合,所以转换成List或者set的话,有一个很重要的问题,就是你到底想要得到什么。
正常情况下,我们想得到Map的key或者value集合
首先我们创建一个Map
Map<String, String> hashMap = new HashMap<>();
hashMap.put("a", "啊");
hashMap.put("b", "波");
hashMap.put("c", "刺");
Map 得到Set
Map与Set其实很相似,,所以他们俩转换起来也很方便
Set<String> mapKeySet = hashMap.keySet();
/**
* 由于map的value没有值的限制,所以在进行转换的时候,如果用set作为容器来承接,
* 可能会丢失重复数据。
* 这里用hashMap.values()方法得到的,其实是一个没有具体类型的Collection集合;
*/
Set<String> mapValueSet = new HashSet<>(hashMap.values());
还有一种就是转换成以map每个键值对为元素的set
//这里引用java.util.Map.Entry;
Set<Entry<String, String>> mapEntrySet = hashMap.entrySet();
System.out.println("mapEntrySet取值:" + mapEntrySet.toString());
我们把结果打印一下
Map 得到List
这里还是使用上面的Map,我们转换Map的key为List,其实是使用了set作为中转。
List<String> mapKeyList = new ArrayList<>(hashMap.keySet());
而前文说过,hashMap.values()方法得到的,其实是一个没有具体类型的Collection集合;
那么的到values的集合,更合适的是使用List作为容器承装。
List<String> mapValueList = new ArrayList<>(hashMap.values());
至于entryList参考key的流程,使用set中转,就不再赘述了。