[Java] Map、Set、List、Queue、Stack的特点与用法

版权声明:请尊重个人劳动成果,转载注明出处,谢谢!

  • Map

键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

某些映射实现可明确保证其顺序,如 TreeMap 类;另一些映射实现则不保证顺序,如 HashMap 类。

Map中元素,可以将key序列、value序列单独抽取出来。 
使用keySet()抽取key序列,将map中的所有keys生成一个Set。 
使用values()抽取value序列,将map中的所有values生成一个Collection。 
为什么一个生成Set,一个生成Collection?那是因为,key总是独一无二的,value允许重复。

  • Set

一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。

不可随机访问包含的元素

只能用Iterator实现单向遍历

Set 没有同步方法

  • List

可随机访问包含的元素 
元素是有序的 
可在任意位置增、删元素 
不管访问多少次,元素位置不变 
允许重复元素 
用Iterator实现单向遍历,也可用ListIterator实现双向遍历

  • Queue

先进先出

Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用element()或者peek()方法。 
值得注意的是LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。

Queue 实现通常不允许插入 null 元素,尽管某些实现(如 LinkedList)并不禁止插入 null。即使在允许 null 的实现中,也不应该将 null 插入到 Queue 中,因为 null 也用作 poll 方法的一个特殊返回值,表明队列不包含元素。

  • Stack

后进先出

Stack继承自Vector(可增长的对象数组),也是同步的 
它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。

  • 用法

如果涉及到堆栈、队列等操作,应该考虑用List;

对于需要快速插入,删除元素,应该使用LinkedList;

如果需要快速随机访问元素,应该使用ArrayList。

如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高

时间: 2024-12-17 08:10:39

[Java] Map、Set、List、Queue、Stack的特点与用法的相关文章

java map按照value值来比较大小并且返回最终结果

package com.zuidaima.util; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; public class ValueComparator implements Comparator<Long> { Map<Long, Double> base; public ValueComparator(Map<

java map中遍历和list

问题描述 java map中遍历和list map.put(""k_""+entryt.getKey() list);怎么只输出10条数据 解决方案 Iterator it=map.keySet().iterator();int i=1: while(it.hasNext()){if(i>10){break;}System.out.println(""键:""+it.next()) i++; } 解决方案二: Map&l

java Map容器怎么定量输出,即当容器到达一定量后输出数据到文件

问题描述 java Map容器怎么定量输出,即当容器到达一定量后输出数据到文件 由于放进Map容器数据量很大,一次性放入的话会导致堆溢出,假如有1010万条记录,如何限制Map的输出记录数,当Map里存放有100万条记录时就输出到文件,依此类推,第11次把最后剩余的10万条也输出到文件. 解决方案 map本身似乎没有这种功能,它就一个容器,怎么会考虑你这特殊的需求.你自己用代码实现吧.内存溢出的话,你可以试试给虚拟机加一下参数,指定最小内存.另外你那个功能的实现我觉得用map实现不见得很好.可以

java map转json字符串

问题描述 java map转json字符串 使用dom4j解析xml后,写了一周总是出现各种bug,最后终于找到原因了,原来是JsonObject转换的内部有过滤.最后写成map格式.但不知道怎么把map转成json. ps:本来打算使用正则替换,看了看,难度太大了 解决方案 用StringWriter 然后再用 ObjectMapper 里面的writevalue()方法 进行 替换 解决方案二: 网上收个转json的jar包,都支持map转json 解决方案三: 用谷歌的gson包直接转 解

java map如何转为配置文件啊。

问题描述 java map如何转为配置文件啊. 求大神.如何才能将map转化为配置文件,就是不要关服务器,有没有什么办法.设置概率的时候可以直接修改 解决方案 java读取配置文件转为UTF-8 解决方案二: 那你用的时候直接放入properties里然吧,文件路径自己写 解决方案三: 输出成配置文件不行么?

java map中写入的数据量大,入库也慢导致浏览器假死

问题描述 java map中写入的数据量大,入库也慢导致浏览器假死 由于前台要选中8000行左右的记录,提交后写入到map中,然后再从map中取出后插入到相应的表中,这时非常费时.目前插入操作也是指提交,但是提交后,目前浏览器经常会碰到假死的现象,大家有好的办法解决吗? 解决方案 你的设计有问题,批量选择,在界面上应该提供单独的设计,不是展示全部8000的记录,而是允许用户根据字段的范围来选择,界面上用可以懒惰加载和预览的方式呈现数据. 解决方案二: 数据要进行分页操作,分批插入,分批显示 解决

Java Map 按key排序和按Value排序的实现方法_java

一.理论准备 Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法. HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeM

Java Map 按照Value排序的实现方法_java

Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. •TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法. •HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeMap的va

Thinking:Java中static、this、super、final用法

Thinking:Java中static.this.super.final用法   本篇旨在帮助准备学习Java以及刚接触Java的朋友认识.掌握和使用static.this.super.final这几个关键字的使用.Java博大精深,我也是一位正在学习和使用Java的爱好者,文中难免有不妥之处,欢迎指正. 一.static 请先看下面这段程序:   public class Hello{    public static void main(String[] args){ //(1)     

Java中的instanceof关键字在Android中的用法实例详解_java

在下面介绍Android中如何使用instanceof关键字开发更方便时,先来温习一下java中instanceof的概念. instanceof大部分的概念是这样定义的:instanceof是Java的一个二元操作符,和==,>,<是同一类东西.由于它是由字母组成的,所以也是Java的保留关键字.它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据.举个栗子: String s = "I AM an Object!"; boolean isObj