精华内容
下载资源
问答
  • 获取LinkedHashMap中的头部元素(最早添加的元素):时间复杂度O(1)public Entry getHead(LinkedHashMap map) {return map.entrySet().iterator().next();}获取LinkedHashMap中的末尾元素(最近添加的元素):时间复杂度...

    获取LinkedHashMap中的头部元素(最早添加的元素):

    时间复杂度O(1)

    public Entry getHead(LinkedHashMap map) {

    return map.entrySet().iterator().next();

    }

    获取LinkedHashMap中的末尾元素(最近添加的元素):

    时间复杂度O(n)

    public Entry getTail(LinkedHashMap map) {

    Iterator> iterator = map.entrySet().iterator();

    Entry tail = null;

    while (iterator.hasNext()) {

    tail = iterator.next();

    }

    return tail;

    }

    通过反射获取LinkedHashMap中的末尾元素:

    时间复杂度O(1),访问tail属性

    public Entry getTailByReflection(LinkedHashMap map)

    throws NoSuchFieldException, IllegalAccessException {

    Field tail = map.getClass().getDeclaredField("tail");

    tail.setAccessible(true);

    return (Entry) tail.get(map);

    }

    测试代码:

    import static org.junit.Assert.assertEquals;

    import java.lang.reflect.Field;

    import java.util.Iterator;

    import java.util.LinkedHashMap;

    import java.util.Map.Entry;

    import org.junit.Before;

    import org.junit.Test;

    public class TestLinkedHashMap {

    private LinkedHashMap map = new LinkedHashMap<>();

    private String letters[] = { "a", "b", "c", "d", "e" };

    @Before

    public void init() {

    for (int i = 0; i < letters.length; i++) {

    map.put(letters[i], i + 1);

    }

    }

    @Test

    public void testGetHead() {

    assertEquals(getHead(map).getKey(), "a");

    assertEquals(getHead(map).getValue(), Integer.valueOf(1));

    }

    @Test

    public void testGetTail() {

    assertEquals(getTail(map).getKey(), "e");

    assertEquals(getTail(map).getValue(), Integer.valueOf(5));

    }

    @Test

    public void testGetTailByReflection() throws NoSuchFieldException, IllegalAccessException {

    assertEquals(getTailByReflection(map).getKey(), "e");

    assertEquals(getTailByReflection(map).getValue(), Integer.valueOf(5));

    }

    public Entry getHead(LinkedHashMap map) {

    return map.entrySet().iterator().next();

    }

    public Entry getTail(LinkedHashMap map) {

    Iterator> iterator = map.entrySet().iterator();

    Entry tail = null;

    while (iterator.hasNext()) {

    tail = iterator.next();

    }

    return tail;

    }

    @SuppressWarnings("unchecked")

    public Entry getTailByReflection(LinkedHashMap map)

    throws NoSuchFieldException, IllegalAccessException {

    Field tail = map.getClass().getDeclaredField("tail");

    tail.setAccessible(true);

    return (Entry) tail.get(map);

    }

    }

    展开全文
  • 但是,如果你想获得它的第一个和最后一个元素,你可以只获取值并将其转换为数组。这不是很漂亮,但它会起作用。Map result = new HashMap();result = myModel.getSampleResults();map.values().toArray()[0]; //...

    6 个答案:

    答案 0 :(得分:3)

    首先,地图不是有序的,所以你不会真正拥有第一个和最后一个元素。

    但是,如果你想获得它的第一个和最后一个元素,你可以只获取值并将其转换为数组。这不是很漂亮,但它会起作用。

    Map result = new HashMap();

    result = myModel.getSampleResults();

    map.values().toArray()[0]; //First result

    map.values().toArray()[result.size()-1]; //Last result

    注意:这不是使用编译器测试的。

    答案 1 :(得分:2)

    第一个和最后一个元素概念不适用于基于哈希的结构,如HashMap和HashSet。

    插入或删除密钥可能会导致元素在运行中重新排序。

    我猜你的模型结果是一个键值对列表,而不是哈希映射。在这种情况下,元素排序就位。 LinkedHashMap保持元素的插入顺序。

    将HashMap替换为LinkedHashMap(并修改.getSampleResults())以返回LinkedHashMap并查看此问题以获取更多详细信息Java LinkedHashMap get first or last entry。

    答案 2 :(得分:0)

    您对@ Nikolay的回答的评论显示了您的问题的重要细节,直到现在才隐藏。

    那么,你想测试一个使用HashMap结构的方法来引用一些添加的对象而你想测试,如果这个方法在这个结构中提供了一些排序?第一个添加的对象应保持在“第一个位置”,最后添加的对象位于“最后位置”?

    正如其他答案已经表明的那样,没有重构那种方法是没有办法的。 HashMap根本不提供任何有意义的排序,如果该方法应该提供一些排序,那么它就会被破坏 - 实现是错误的。

    当然,您可以使用@Sander提供的算法编写单元测试。此测试大多数时间都会失败。这再一次表明了这样一个事实,即测试方法必须像@Nikolay在他的回答中所显示的那样重构。

    答案 3 :(得分:0)

    HashMap中没有第一个和最后一个元素。这是您必须为O(1)查找支付的价格:在内部,实现会将您的条目放入一个桶列表中,而不是易于识别(但确定性)的顺序。此过程将Hash放入HashMap,实际上它越混乱,性能就越好。

    如果您希望按照其键的自然顺序(或自定义比较器)排序地图,则可以使用TreeMap;如果您希望将元素排列在其中,则可以使用LinkedHashMap插入的顺序。

    P.s。:即使您选择保持某种顺序的Map实现,调用toArray()只是为了得到第一个和最后一个元素是一个巨大的矫枉过正,我不会这样做。 TreeMap具有firstEntry()和lastEntry()方法,即使使用LinkedHashMap,只需手动迭代元素并保留第一个和最后一个而不是分配一个元素,便宜得多潜在的巨大阵容。

    答案 4 :(得分:0)

    HashMap没有订单这样的东西。来自HashMap javadoc:

    此课程不保证地图的顺序;在

    特别是,它不保证订单将保持不变

    随着时间的推移。

    您必须使用LinkedHashMap。看看entrySet()方法和这个question+answer

    答案 5 :(得分:0)

    可以使用

    &#34; toArray&#34; Set接口的方法。

    但迭代条目集中的条目并获取第一个和最后一个条目是一种更好的方法。

    此示例可能会有所帮助:

    public static void main(final String[] args) {

    final Map orderMap = new LinkedHashMap();

    orderMap.put(6, "Six");

    orderMap.put(7, "Seven");

    orderMap.put(3, "Three");

    orderMap.put(100, "Hundered");

    orderMap.put(10, "Ten");

    final Set> mapValues = orderMap.entrySet();

    final int maplength = mapValues.size();

    final Entry[] test = new Entry[maplength];

    mapValues.toArray(test);

    System.out.print("First Key:"+test[0].getKey());

    System.out.println(" First Value:"+test[0].getValue());

    System.out.print("Last Key:"+test[maplength-1].getKey());

    System.out.println(" Last Value:"+test[maplength-1].getValue());

    }

    // the output geneated is :

    First Key:6 First Value:Six

    Last Key:10 Last Value:Ten

    展开全文
  • 获取LinkedHashMap中的头部元素(最早添加的元素):时间复杂度O(1) public <K, V> Entry<K, V> getHead(LinkedHashMap<K, V> map) { return map.entrySet().iterator().next(); } 获取...

    获取LinkedHashMap中的头部元素(最早添加的元素):时间复杂度O(1)

    public <K, V> Entry<K, V> getHead(LinkedHashMap<K, V> map) {
        return map.entrySet().iterator().next();
    }

     

    获取LinkedHashMap中的末尾元素(最近添加的元素):时间复杂度O(n)

    public <K, V> Entry<K, V> getTail(LinkedHashMap<K, V> map) {
        Iterator<Entry<K, V>> iterator = map.entrySet().iterator();
        Entry<K, V> tail = null;
        while (iterator.hasNext()) {
            tail = iterator.next();
        }
        return tail;
    }

     

    通过反射获取LinkedHashMap中的末尾元素:时间复杂度O(1),访问tail属性

    public <K, V> Entry<K, V> getTailByReflection(LinkedHashMap<K, V> map)
            throws NoSuchFieldException, IllegalAccessException {
        Field tail = map.getClass().getDeclaredField("tail");
        tail.setAccessible(true);
        return (Entry<K, V>) tail.get(map);
    }

     

    测试代码

    import static org.junit.Assert.assertEquals;
    import java.lang.reflect.Field;
    import java.util.Iterator;
    import java.util.LinkedHashMap;
    import java.util.Map.Entry;
    import org.junit.Before;
    import org.junit.Test;
    
    public class TestLinkedHashMap {
    
        private LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
        private String letters[] = { "a", "b", "c", "d", "e" };
    
        @Before
        public void init() {
            for (int i = 0; i < letters.length; i++) {
                map.put(letters[i], i + 1);
            }
        }
    
        @Test
        public void testGetHead() {
            assertEquals(getHead(map).getKey(), "a");
            assertEquals(getHead(map).getValue(), Integer.valueOf(1));
        }
    
        @Test
        public void testGetTail() {
            assertEquals(getTail(map).getKey(), "e");
            assertEquals(getTail(map).getValue(), Integer.valueOf(5));
        }
    
        @Test
        public void testGetTailByReflection() throws NoSuchFieldException, IllegalAccessException {
            assertEquals(getTailByReflection(map).getKey(), "e");
            assertEquals(getTailByReflection(map).getValue(), Integer.valueOf(5));
        }
    
        public <K, V> Entry<K, V> getHead(LinkedHashMap<K, V> map) {
            return map.entrySet().iterator().next();
        }
    
        public <K, V> Entry<K, V> getTail(LinkedHashMap<K, V> map) {
            Iterator<Entry<K, V>> iterator = map.entrySet().iterator();
            Entry<K, V> tail = null;
            while (iterator.hasNext()) {
                tail = iterator.next();
            }
            return tail;
        }
    
        @SuppressWarnings("unchecked")
        public <K, V> Entry<K, V> getTailByReflection(LinkedHashMap<K, V> map)
                throws NoSuchFieldException, IllegalAccessException {
            Field tail = map.getClass().getDeclaredField("tail");
            tail.setAccessible(true);
            return (Entry<K, V>) tail.get(map);
        }
    }
    展开全文
  • JavaMap集合中没有迭代器,需要将其转换为set集合/*...获取一个键对应的值。 Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。2,Set> entrySet:将map集合中的映射关系存入到了set集合中, 而...

    Java的Map集合中没有迭代器,需要将其转换为set集合

    /*map集合的两种取出方式:1,SetkeySet:将map中所有的键存入到Set集合。因为set具备迭代器。 所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。 Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。2,Set> entrySet:将map集合中的映射关系存入到了set集合中, 而这个关系的数据类型就是:Map.Entry Entry其实就是Map中的一个static内部接口。 为什么要定义在内部呢? 因为只有有了Map集合,有了键值对,才会有键值的映射关系。 关系属于Map集合中的一个内部事物。 而且该事物在直接访问Map集合中的元素。*/import java.util.*;class MapDemo2 { public static void main(String[] args) { Mapmap = new HashMap(); map.put('02','zhangsan2'); map.put('03','zhangsan3'); map.put('01','zhangsan1'); map.put('04','zhangsan4'); //将Map集合中的映射关系取出。存入到Set集合中。 Set> entrySet = map.entrySet(); Iterator> it = entrySet.iterator(); while(it.hasNext()) { Map.Entryme = it.next(); String key = me.getKey(); String value = me.getValue(); System.out.println(key+':'+value); } /* //先获取map集合的所有键的Set集合,keySet(); SetkeySet = map.keySet(); //有了Set集合。就可以获取其迭代器。 Iteratorit = keySet.iterator(); while(it.hasNext()) { String key = it.next(); //有了键可以通过map集合的get方法获取其对应的值。 String value = map.get(key); System.out.println('key:'+key+',value:'+value); } */ }}/*Map.Entry 其实Entry也是一个接口,它是Map接口中的一个内部接口。interface Map{ public static interface Entry { public abstract Object getKey(); public abstract Object getValue(); }}class HashMap implements Map{ class Hahs implements Map.Entry { public Object getKey(){} public Object getValue(){} } }*/

    练习题:

    /*每一个学生都有对应的归属地。学生Student,地址String。学生属性:姓名,年龄。注意:姓名和年龄相同的视为同一个学生。保证学生的唯一性。1,描述学生。2,定义map容器。将学生作为键,地址作为值。存入。3,获取map集合中的元素。*/import java.util.*;class Student implements Comparable{ private String name; private int age; Student(String name,int age) { this.name = name; this.age = age; } //为了确保使用TreeSet集合存储元素,使得Student类实现Comparable接口和实现compareTo方法 public int compareTo(Student s) { int num = new Integer(this.age).compareTo(new Integer(s.age)); if(num==0) return this.name.compareTo(s.name); return num; }//为了确保使用HashSet集合存储元素,实现hashCode和equals方法 public int hashCode(){return name.hashCode()+age*34;}public boolean equals(Object obj){if(!(obj instanceof Student))throw new ClassCastException('类型不匹配');Student s = (Student)obj;return this.name.equals(s.name) && this.age==s.age;}public String getName(){return name;}public int getAge(){return age;}public String toString(){return name+':'+age;}}class MapTest{public static void main(String[] args) {HashMaphm = new HashMap();hm.put(new Student('lisi1',21),'beijing');hm.put(new Student('lisi1',21),'tianjin');hm.put(new Student('lisi2',22),'shanghai');hm.put(new Student('lisi3',23),'nanjing');hm.put(new Student('lisi4',24),'wuhan');//第一种取出方式 keySetSetkeySet = hm.keySet();Iteratorit = keySet.iterator();while(it.hasNext()){Student stu = it.next();String addr = hm.get(stu);System.out.println(stu+'..'+addr);}//第二种取出方式 entrySetSet> entrySet = hm.entrySet();Iterator> iter = entrySet.iterator();while(iter.hasNext()){Map.Entryme = iter.next();Student stu = me.getKey();String addr = me.getValue();System.out.println(stu+'.........'+addr);}}}

    练习2

    展开全文
  • Java集合类】 LinkedHashMap获取第一个元素和最后一个元素 获取LinkedHashMap中的头部元素(最早添加的元素): 时间复杂度O(1) public &amp;amp;lt;K, V&amp;amp;gt; Entry&amp;amp;lt;K, V&...
  • 我正在开发2D游戏,我正在使用LWJGL和Slick-Util库来提供帮助。...这是我关于HashMap的代码:Java HashMap只返回列表的最后一个元素public Map textures;public void loadTextures(){textures = new HashMap...
  • import java.util.Arrays;import java.util.List;public class Main{public static void main(String[] argv){List persons = Arrays.asList(new Person("HTML", 12), new Person("Aim", 34), new Person("John", 23...
  • Java LinkedHashMap获取第一个元素和最后一个元素  作者是 在线疯狂 发布于 2016年10月27日 在 Java. 获取LinkedHashMap中的头部元素(最早添加的元素): 时间复杂度O(1) public &lt;K, V&gt; ...
  • java - 如何从hashmap中获取一个条目而不进行迭代如果密钥未知,是否有一种从HashMap中只获得一个Entry的优雅方式,无需迭代。由于进入的顺序并不重要,我们可以说类似的东西hashMapObject.get(zeroth_index);虽然我...
  • 如果您的数据结构有多对一键和值之间的映射应该迭代条目并选择所有合适的键:publicstaticSetgetKeysByValue(Mapmap,Evalue){Setkeys=newHashSet();for(Entryentry:map.entrySet()){if(Objects.equals(value,entry....
  • java获取Map中指定key后的所有元素

    千次阅读 2020-10-12 10:38:49
    需求:给定一个有序的map,已知一个map中存在的key,但是不知道key的指定位置,需要根据这个key获取到这个key元素后的所有元素Map<String, String> map = new LinkedHashMap<>(); map.put("qqq","1...
  • 引入Java流的主要动机之是...因此,简单的答案是,没有简单的方法可以完成诸如n项目或将每项目映射到所有先前项目之和的操作。实现要求的最直接方法是使用要从中流式传输的列表的索引:List list = ...;r...
  • 我想获取具有特定用户名的流中(第一个)用户的索引。 我并不想实际上将User设置为某些描述的User的.equals(),只是具有相同的用户名。我可以想到执行此操作的丑陋方法(重复和计数),但感觉应该有一种不错的方法(可能...
  • LinkedHashMap和HashMap区别 大多数情况下,只要不涉及线程安全问题,Map基本都可以使用HashMap,不过HashMap有一个问题,就是迭代HashMap的顺序并不是HashMap放置的顺序,也就是无序。HashMap的这一缺点往往会带来...
  • 点击上方“Java专栏”,选择“置顶或者星标”第一时间阅读精彩文章!☞ 程序员进阶必备资源免费送「21种技术方向!」 点击查看☜来源:https://thinkinjava.cn/前言Map 家族数量众多,其中 HashMap 和 ...
  • 第一种在java中用HashMap Map<String, String> oldUserMap = new HashMap<String, String>(); //把查询到的数据的唯一值stuNum,存入map中 for(User user : userList) { oldUserMap.put(user.getStuNum...
  • 什么是容器在Java当中,有一个类专门用来存放其它类的对象,这个类就叫做容器,它就是将若干性质相同或相近的类对象组合在一起而形成的一个整体 。2. 常用的Java容器二、List,Map,Set,Queue1. List有序的 ...
  • 前面我们介绍了 Map 集合的种典型实现 HashMap ,关于 HashMap 的特性,我们再来复习遍: ①、基于JDK1.8的HashMap是由数组+链表+红黑树组成,相对于早期版本的 JDK HashMap 实现,新增了红黑树作为底层数据...
  • 三阶段 JAVA常见对象的学习集合框架——Map集合在实际需求中,我们常常会遇到这样的问题,在诸多的数据中,通过其编号来寻找某一些信息,从而进行查看或者修改,例如通过学号查询学生信息。今天我们所介绍的Map...
  • java学习41天,栈 MAP

    2017-10-31 20:31:06
    1,pop(); 出栈操作 2,push();入栈操作 3,peek();...5,MAP一个类似 两列 多行的数据结构 每行由一个 key 和一个 value 对构成  6,put(K k,V v);加入一对 如果 Map 中已经有了 同样的 k 那
  • Java第十六天-map

    2019-04-12 21:40:45
    * Object put(Object key,Object value):向map中添加一个元素 Object * remove(Objectkey):按照指定的key删除此key-value Object * get(Objectkey):获取指定key的value值,若无此value,则返回null * 遍历...
  • /*** 通过XML转换为Map* @param xml 为String类型的Xml* @return 第一个为Root节点,Root节点之后为Root的元素,如果为多层,可以通过key获取下一层Map*/public static Map createMapByXml(String xml) {Document ...
  • 0、HashSet毕竟是作为集合实现的,集合包含、未包含,这样的概念必须突出,所以HashSet没有提供获取一个元素的方法 1、包含元素方法 public boolean contains(Object o) { return map.containsKey(o); } ...
  • 一个键只能对应一个Map集合是无序的 Map接口的实现类是HashMap类 HashMap集合要想保证键唯一,键所在的类,必须重写hashcode和equals方法 2.成员方法 2.1 添加功能 V put(K key, V value) : 添
  • 第1章 让自己的第一个Java程序跑起来 2 教学视频:19分钟 1.1 想要用Java改变这个世界吗? 2 1.1.1 Java有什么优势? 2 1.1.2 Java在哪儿? 3 1.2 准备好开始Java之旅 3 1.2.1 下载JDK 4 1.2.2 安装JDK 5 ...
  • 获取第一个元素,只需访问索引0处的数组:Map map = new HashMap<>();map.put("a",4);map.put("c",6);map.put("b",2);Object[] a = map.entrySet().toArray();Arrays.sort(a,new Comparator() {public int ...
  • HashMap : 实现原理:基于Map接口实现,数据结构采用数组 + 链表 + 红黑树,元素以键值对的形式存储,使用key的二...2.检查第一个node的key hash是否为要查找的原属,如果是的还直接返回; 3.获取下一个节点判断类型是.
  • 众所周知Map集合里存储元素是以键值对的方式存储元素一个是Key一个是value。 开发过程中推荐使用四种方法,本文章注释很清晰,仔细看完相信会对你有所帮助的! 方法一:首先去通过获取迭代器,通过迭代器去遍历...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 160
精华内容 64
关键字:

java获取map第一个元素

java 订阅