精华内容
下载资源
问答
  • 但是,如果你想获得它的第一个和最后一个元素,你可以只获取值并将其转换为数组。这不是很漂亮,但它会起作用。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)

    可以使用

    " toArray" 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 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);

    }

    }

    展开全文
  • 获取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);
        }
    }
    展开全文
  • 【Java集合类】 LinkedHashMap获取第一个元素和最后一个元素 获取LinkedHashMap中的头部元素(最早添加的元素): 时间复杂度O(1) public &amp;amp;lt;K, V&amp;amp;gt; Entry&amp;amp;lt;K, V&...

    获取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);
        }
    }
    展开全文
  • 本文将对Flink Transformation中各算子进行详细介绍,...如之前文章所述,多个Transformation算子共同组成一个数据流图。Flink的Transformation是对数据流进行操作,其中数据流涉及到的最常用数据结构是DataStream,...
  • 【20201031 每日题】刷题使我快乐。200+题解已收录至我的GitHub,欢迎关注。 今天做的是 381. O(1) 时间插入、删除和获取随机元素 - 允许重复,在做这道题之前,我们先来看一下这道题的低级版:380. 常数时间插入...
  • persons.stream() .map(Person::getFirstName) .filter(name -> name.startsWith("A")) .limit(10) .forEach(name -> System.out.println(name)); } } class MyWrapper { private Person person; public MyWrapper...
  • Java LinkedHashMap获取第一个元素和最后一个元素  作者是 在线疯狂 发布于 2016年10月27日 在 Java. 获取LinkedHashMap中的头部元素(最早添加的元素): 时间复杂度O(1) public &lt;K, V&gt; ...
  • Java的Map集合中没有迭代器,需要将其转换为set集合/*...获取一个键对应的值。 Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。2,Set> entrySet:将map集合中的映射关系存入到了set集合中, 而...
  • map 映射 原理:bst 主要库函数: 通过key获取value:at(key); 找key:find 计数key;count >=key的第一个元素:lower_bound >key的第一个元素:upper_bound 相同元素的区间:equal_range
  • 我正在开发2D游戏,我正在使用LWJGL和Slick-Util库来提供帮助。...这是我关于HashMap的代码:Java HashMap只返回列表的最后一个元素public Map textures;public void loadTextures(){textures = new HashMap...
  • 情景:在开发过程中,需要将两个对象实体的值进行对比 处理:使用BeanUtils....此时获取到的字段如果是数组类型的话只获取第一个元素 解决:使用PropertyUtils.describe方法的到的Map的泛型是<String,Object
  • java - 如何从hashmap中获取一个条目而不进行迭代如果密钥未知,是否有一种从HashMap中只获得一个Entry的优雅方式,无需迭代。由于进入的顺序并不重要,我们可以说类似的东西hashMapObject.get(zeroth_index);虽然我...
  • 作者:Leehm链接:https://www.cnblogs.com/leehm/p/10682560.html1、往map里面插入元素:下标方式[]: map[key] = value; 调用insert: map.insert(make_pair(key, value)); 下标方式是通过重载[]操作...
  • 如果您的数据结构有多对一键和值之间的映射应该迭代条目并选择所有合适的键:publicstaticSetgetKeysByValue(Mapmap,Evalue){Setkeys=newHashSet();for(Entryentry:map.entrySet()){if(Objects.equals(value,entry....
  • Map不能包含相同的键,每个键只能映射一个值。键还决定了储存对象在映射中的储存位置。HashMap集合特点:单一,无序Map.Entry映射项(键-值对)K=key,V=value异常:NoSuchElementException-----当调用的映射中没有...
  • 解包 res_list = [x for x,_ in rows] lst = [(1, 2), (3, 4), (5, 6)] res = [x for x,_ in lst] res >>>[1, 3, 5] res_list = [x[0] for x in rows] rows = [(1, 2), (3, 4), (5,...map函数和operator
  • 引入Java流的主要动机之是...因此,简单的答案是,没有简单的方法可以完成诸如n项目或将每项目映射到所有先前项目之和的操作。实现要求的最直接方法是使用要从中流式传输的列表的索引:List list = ...;r...
  • Map中取出第一个 key 和 value 的方法,使用Map.Entry进行操作; 可与LinckedHashMap(按元素存入顺序排序的有序... * 获取map第一个key值 * * @param map 数据源 * @return */ private static String ge...
  • LinkedHashMap和HashMap区别 大多数情况下,只要不涉及线程安全问题,Map基本都可以使用HashMap,不过HashMap有一个问题,就是迭代HashMap的顺序并不是HashMap放置的顺序,也就是无序。HashMap的这一缺点往往会带来...
  • 深入浅出LinkedHashMap通过前面HashMap的介绍我们知道HashMap可以满足绝大多数使用Map的场景,但是就有几种情况是HashMap处理不了的。种是想要按照自然顺序或者自定义顺序遍历键的情况;种是想要输出的顺序和...
  • 我想获取具有特定用户名的流中(第一个)用户的索引。 我并不想实际上将User设置为某些描述的User的.equals(),只是具有相同的用户名。我可以想到执行此操作的丑陋方法(重复和计数),但感觉应该有一种不错的方法(可能...
  • 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...
  • 作者:莫那鲁道前言Map 家族数量众多,其中 HashMap 和 ConcurrentHashMap 用的最多,而 LinkedHashMap 似乎则是不怎么用的,...如果实现添加顺序的话,我们可以在该类中,增加一个链表,每个节点对应 hash 表中的桶...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 389
精华内容 155
关键字:

map获取第一个元素