List&Map&Set的操作和遍历

Java的三大集合即:Set、List、Map。

  • Set:代表无序、不可重复的集合,常用的有HashSet(哈希表实现)、TreeSet(红黑树实现);
  • List:代表有序、可以重复的集合,比较常用的有ArrayList(数组实现)、LinkedList(链表实现);
  • Map:代表具有映射关系的集合,常用的有HashMap(哈希表实现)、TreeMap(红黑树实现);

Java5以后又增加了Queue体系集合,代表一种队列集合实现,这里先不介绍。

List的实现类原理比较简单,Map比较复杂,而Set其实是基于Map的一种实现。

下面从各个集合的基本操作介绍一下,分别选取HashSet、ArrayList、HashMap三个典型的实现类:

1. HashSet

/** * HashSet的增删遍历* @author wangjun * @email  scuwangjun@hotmail.com* @time   2018年4月6日 下午2:40:33 */
public class HashSetOperation {public static void main(String[] args) {//初始化HashSet<String> set = new HashSet<>();//增set.add("key1");set.add("key2");set.add("key3");//删set.remove("key1");//遍历1//使用set.descendingIterator()方法可以反向遍历System.out.println("HashSet遍历1,使用Iterator:");Iterator<String> it = set.iterator();while(it.hasNext()) {System.out.println(it.next());}//遍历2System.out.println("HashSet遍历2,使用for:");for(String str: set) {System.out.println(str);}}

运行结果:

HashSet遍历1,使用Iterator:
key2
key3
HashSet遍历2,使用for:
key2
key3

2.ArrayList

/** * ArrayList的增删查改,遍历* @author wangjun * @email  scuwangjun@hotmail.com* @time   2018年4月6日 下午2:25:43 */
public class ArrayListOperation {public static void main(String[] args) {//初始化List<String> list = new ArrayList<>();//增list.add("str1");list.add("str2");list.add("str3");//删list.remove(1);//查System.out.println("list的第二个元素是:" + list.get(1));//改list.set(0, "str11");System.out.println("最终的list:" + list.toString());//遍历1,使用forSystem.out.println("LinkedList遍历1,使用for:");for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}//遍历2,使用增强forSystem.out.println("LinkedList遍历1,使用增强for:");for(String str: list) {System.out.println(str);}//遍历3,使用Iterator,集合类的通用遍历方式System.out.println("LinkedList遍历3,使用Iterator:");Iterator<String> it = list.iterator();while(it.hasNext()) {System.out.println(it.next());}}}

运行结果:

list的第二个元素是:str3
最终的list:[str11, str3]
LinkedList遍历1,使用for:
str11
str3
LinkedList遍历1,使用增强for:
str11
str3
LinkedList遍历3,使用Iterator:
str11
str3

3.HashMap

/** * hashMap的增删查改* 无序* key相当于set,不可重复* value相当于list,可重复* @author wangjun * @email  scuwangjun@hotmail.com* @time   2018年4月6日 下午2:30:31 */
public class HashMapOperation {public static void main(String[] args) {//初始化HashMap<String,String> map = new HashMap<>();//增map.put("key1", "value1");map.put("key2", "value2");map.put("key3", "value3");//删map.remove("key2");//查System.out.println("key1对应的valve为:" + map.get("key1"));//改map.replace("key3", "value33");System.out.println("最终的map是:" + map.toString());//遍历1,取出map中所有的key组成一个setSystem.out.println("HashMap遍历1,取出map中所有的key组成一个set:");for(String key: map.keySet()) {System.out.println("key:" + key + ",value:" + map.get(key));}//遍历2,取出key组成set后,通过Iterator遍历keySystem.out.println("HashMap遍历2,取出key组成set后,通过Iterator遍历key:");Iterator<String> it = map.keySet().iterator();while(it.hasNext()) {String key = it.next();String value = map.get(key);System.out.println("key:" + key + ",value:" + value);}//遍历3,取出map中实际存储的数据结构--Map.Entry,在HashMap中使用的是Node静态内部类//推荐这种,尤其是数据很大时System.out.println("HashMap遍历3,通过Map.Entry:");Set<Map.Entry<String, String>> entry = map.entrySet();for(Map.Entry<String, String> entryItem: entry) {String key = entryItem.getKey();String value = entryItem.getValue();System.out.println("key:" + key + ",value:" + value);}//遍历4,只能遍历value,不能遍历key,相当于取出map中左右的value组成一个listSystem.out.println("HashMap遍历4,只遍历value:");for(String value: map.values()) {System.out.println("value:" + value);}}}

运行结果:

key1对应的valve为:value1
最终的map是:{key1=value1, key3=value33}
HashMap遍历1,取出map中所有的key组成一个set:
key:key1,value:value1
key:key3,value:value33
HashMap遍历2,取出key组成set后,通过Iterator遍历key:
key:key1,value:value1
key:key3,value:value33
HashMap遍历3,通过Map.Entry:
key:key1,value:value1
key:key3,value:value33
HashMap遍历4,只遍历value:
value:value1
value:value33

可以看到:

遍历Set一般常用2种方式;

遍历List一般常用3种方式;

遍历Map一般常用4种方式;

根据使用场景,选择合适的遍历方式。

ListMapSet的操作和遍历相关推荐

  1. ListMapSet的操作和遍历 1

    List&Map&Set的操作和遍历 Java的三大集合即:Set.List.Map. Set:代表无序.不可重复的集合,常用的有HashSet(哈希表实现).TreeSet(红黑树实 ...

  2. php经典操作,php数组的经典操作(遍历数组、基本操作)实例

    下面小编就为大家带来一篇PHP数组的基本操作及遍历数组的经典操作实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 实例如下所示: 索引数组 //数组第一种定义 $ar ...

  3. Lua 和 C 交互中虚拟栈的操作和遍历

    int lua_pcall(lua_State *L, int nargs, int nresults, int msgh)  * 以保护模式调用具有"nargs"个参数,&quo ...

  4. python文件下载速度 装饰器_python使用装饰器对文件进行读写操作'及遍历文件目录...

    '''使用装饰器对文件进行读写操作''' #def check_permission(func):#'''演示嵌套函数定义及使用'''#def wrapper(*args,**kwargs):#''' ...

  5. Python基础-字典(字典常用函数/操作/字典遍历)

    字典是Python中除列表外,最灵活的数据类型,使用键值对存储数据,其中键必须是唯一的,值可以是任意类型 字典类型格式 student = {'键名1': 值1, '键名2': 值2, ...} # ...

  6. 5月25日-js操作DOM遍历子节点

    一.遍历节点遍历子节点children();//获取节点的所有直接子类 遍历同辈节点next();prev();siblings();//所有同辈元素*find();从后代元素中查找匹配的filter ...

  7. Qt总结之三:磁盘文件操作、遍历文件夹和文件目录,并过滤和获取文件信息、后缀名、前缀名(三)

    前言 本节内容主要包括磁盘容量检测.磁盘内指定或特定文件的操作 话不多说,先上效果图 共分为两个部分,第一部分是检测磁盘容量,第二部分是筛选磁盘内指定文件(test.txt)或特定文件(.txt / ...

  8. 【文件IO】Linux 文件操作(一) —— 遍历指定目录下的所有文件

    目录 一.访问目录相关函数 1.打开/访问目录 (opendir / fdopendir) 2.读取目录内容 (readdir) 3.关闭目录 (closedir) 二.遍历指定目录下的所有文件 一. ...

  9. 剖析遍历抓取的html标签数据,Jquery遍历数组(包括获取后端数据后的操作)和遍历标签(class名)...

    //遍历数组(获取后端数据如何遍历操作) var status  = 1;   //自定义状态 $('.tables-detail').html("");     //调用ajax ...

最新文章

  1. Spark2.0流式处理读Kafka并写ES
  2. 如何处理 Hybris Accelerator css style 显示不正确的问题
  3. 20121108团队博客(苏若)
  4. python items函数用法,Python中dictionary items()系列函数的用法实例
  5. win7锁屏时间怎么设置_电脑锁屏时间怎么设置
  6. 自适应好看的引导单页源码-无后台
  7. 7-8 连续因子 (20 分)
  8. 关于集成通用mapper的Mybatis代码生成器产生的model类注解
  9. 【推荐算法】今日头条、抖音推荐算法原理全文详解!
  10. CENTOS 配置串口连接
  11. 基于USB数据采集卡(DAQ)与IO模块的热电阻温度采集
  12. 诺基亚9 PureView正式发布
  13. SELECT 1 FROM DUAL中的DUAL的作用
  14. 计算机显卡型号中数字含义详解,显卡型号中字母和数字所代表的含义.doc
  15. hypixel服务器注册,hypixel服务器
  16. Echarts南丁格尔图.
  17. 推荐一个不到2MB的C#开发工具箱,集成了上千个常用操作类
  18. stm32RCT6 使用NTC热敏电阻实现温度报警器
  19. 百业升级 共启新程——CDEC2021中国数字智能生态大会武汉站今日举行
  20. K-means算法分析,案例(大数据的用户分组召回)

热门文章

  1. python开发一个彩票系统_[宜配屋]听图阁
  2. Java基础:String类
  3. Retrofit 2.0
  4. 傅里叶变化的本质:复数的实部和虚部的对应关系
  5. vtuber面部捕捉工具_泰国程序员开发VTuber形象生成系统,人人都能当虚拟偶像
  6. 爬取过程中出现验证码_PCBA贴片的过程中为什么出现白点或白斑
  7. 子元素超出了父元素的高度_T恤定制融入中国元素,美出新高度
  8. asp连接mysql oledb_ASP连接数据库的5种方法
  9. Hadoop详解(二):HDFS存储系统设计原理
  10. 深入理解JVM虚拟机(十一):线程安全与锁优化