你真的理解了Collection和Map集合吗?
来源:互联网 发布:淘宝儿童电动汽车 编辑:程序博客网 时间:2024/05/22 06:55
我们在学习java的集合时,都知道接口Collection下有2个子接口:
List 是有序的集合
Set 是无顺序的集合
问题一:怎么有序了?
那么List所谓的有序是什么意思呢?初学者可能会有这个误解,就是我每次add进List的元素,它会自动排好序。这其实是不对的。我们看一个例子:
package CollectionTest;import java.util.ArrayList;import java.util.List;/** * @author zhengchao */public class TestMap { public static void main(String[] args){ List<Integer> list = new ArrayList(); list.add(1); list.add(3); list.add(5); list.add(4); list.add(2); list.add(1); for(int str:list){ System.out.println(str); } }}代码很简单,输出结果:
run:135421成功构建 (总时间: 0 秒)发现输出的并没有顺序,我们说的List有序是指它能保持你插入元素是的顺序,即先插入放在前面。其实List的ArrayList存储的结构类似于数组。它的优点是随机访问某一个index的速度很快,基本就是o(1)的速度,但是ArrayList的add和remove就比较慢了。
我们看下运行时ArrayList的结构:
可以看到ArrayList的元素存储是按照你插入的先后来的。LinkedList与之类似,只不过其内部实现是基于链表结构的,即插入删除很快,但是若是要随机访问一个元素就需要遍历。他们都允许数据重复。
再看看Set的情况:
package CollectionTest;import java.util.HashSet;import java.util.Set;/** * @author zhengchao */public class TestMap { public static void main(String[] args){ Set<String> set = new HashSet(); set.add("av"); set.add("bv"); set.add("cv"); set.add("av"); set.add("ev"); set.add("dv"); for(String str:set){ System.out.println(str); } }}
运行结果:
run:dvevbvcvav成功构建 (总时间: 0 秒)我们发现Set接口的HashSet并不能保证元素插入时的顺序,并且不能有重复的元素。
问题二:Map和List、Set同级吗?
有些童鞋刚开始时,感觉这三个就是兄弟姐妹嘛,其实不然,我们看看他们的结构体系:
其实Map自己属于一个体系,你想想他的结构:key-value,明显感觉就和Colleciton不是一个‘种群’。
问题三:Map和List可以互相转换吗
转换可能谈不上,但是可以这样用:
package CollectionTest;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.LinkedList;import java.util.List;import java.util.Map;import java.util.Map.Entry;/** * * @author zhengchao */public class Map_sort { public static void main(String[] args){ Map<String,String> map = new HashMap(); map.put("A","@"); map.put("W","@"); map.put("E","@"); map.put("Q","@"); map.put("R","@"); map.put("B","@"); map.put("U","@"); //这样能得到map的key和value,在某些应用中,这很有用 for(Entry<String,String> entry:map.entrySet()){ System.out.println(entry.getKey()+""+entry.getValue()); } //如果想对Map集合的元素按照key进行排序怎么办?如下,用Collections.sort方法 List<Map.Entry<String, String>> list = new LinkedList<>(map.entrySet()); Collections.sort(list, new Comparator<Map.Entry<String, String>>() { @Override public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) { return (o1.getKey()).compareTo(o2.getKey()); } }); System.out.println(list); } }在上面的想对Map集合按照Key来排序的做法,我们使用了Collections.sort的方法。很管用,实际项目中用的也很多。
这里并没有讲Collection和Map的内容完全列出来,我感觉全部列出来会让读者感觉不舒服,的确,掌握几个基本的类的用法,其他的稍微了解,真正需要用时可以去查询官方api文档,我们不是机器,没法记住太多的东西,比如我,2k的记忆内存,记不了几个东东的,其他的都放在硬盘里啦,想用的时候再去读取。
1 0
- 你真的理解了Collection和Map集合吗?
- link和symbol你真的理解清楚了吗?
- Map集合和Collection集合的区别
- 三层,你真的理解了吗?
- 你真的理解了AsyncTask吗?
- 集合Collection和Map
- java里面的集合Collection和Map;
- java集合:Collection和Map的介绍
- 你真的理解了继承和多态吗?
- 你真的理解了继承和多态吗?
- Collection集合和map集合的种类区分
- Collection集合和map集合的种类区分
- 集合框架-----Collection和Map
- 关于DNS的别名,你真的理解了吗?
- 运维小白死磕的专业术语,你真的理解透了吗?
- 你真的理解了数组指针和指针数组吗?
- LSA Type 你真的都理解了吗?
- Java中的String你真的理解了吗?
- SEVERE: IOException while loading persisted sessions: java.io.EOFException
- 二分查找
- iOS开发判断当前的网络状态
- 使用loadrunner12录制websocket协议的问题
- iOS字符串大小写转换
- 你真的理解了Collection和Map集合吗?
- Frame Bounds 区别
- JDK里的设计模式
- hdu1874畅通工程续 spfa学习
- SSH免密码登录
- 支持常见文件系统类型U盘
- 分享Kali Linux 2016.2第49周虚拟机
- Leetcode28. Implement strStr()
- HashCode深入理解