【问题标题】:How to get value from TreeMap in Java?如何从 Java 中的 TreeMap 中获取价值?
【发布时间】:2014-01-18 02:11:27
【问题描述】:

我的问题是无法从树形图中获取对象“项目”(值)。我需要将该信息发送到我的 GUI 类并在 JList 中显示以获取选择列表,因此可以轻松选择歌曲并将其添加到播放列表,但我得到的输出只有“01、02、03、04、05” (钥匙)。请帮忙,因为我是初学者,不知道该怎么做。

public class LibraryData {

private static class Item {


    Item(String n, String a, int r) {
        name = n;
        artist = a;
        rating = r;
    }

    // instance variables 
    private String name;
    private String artist;
    private int rating;
    private int playCount;

    public String toString() {
        return name + " - " + artist;
    }
}


private static Map<String, Item> library = new TreeMap<String, Item>();


static {
    library.put("01", new Item("How much is that doggy in the window", "Zee-J", 3));
    library.put("02", new Item("Exotic", "Maradonna", 5));
    library.put("03", new Item("I'm dreaming of a white Christmas", "Ludwig van Beethoven", 2));
    library.put("04", new Item("Pastoral Symphony", "Cayley Minnow", 1));
    library.put("05", new Item("Anarchy in the UK", "The Kings Singers", 0));
}


public static String[] getLibrary() {
String [] tempa = (String[]) library.keySet().toArray(new String[library.size()]);
return tempa;
}

解决方案:

因为我必须将值传递给另一个类:

JList tracks = new JList(LibraryData.getLibrary());

我做了类似的东西,它的作品

public static Object[] getLibrary() {
Collection c = library.values();
return c.toArray(new Item[0]);

谢谢你们,10 个小时后我终于完成了! }

【问题讨论】:

  • 这里有一个答案。 stackoverflow.com/questions/16246821/…
  • 请在您尝试获取Item 的位置发布代码。
  • library.get("01"); 不起作用吗?
  • 我相信枚举会更合适。
  • @Christian 我的 GUI 类中只有这一点 JList tracks = new JList(LibraryData.getLibrary());

标签: java arrays jlist treemap


【解决方案1】:

使用您拥有的此代码:

String [] tempa = (String[]) library.keySet().toArray(new String[library.size()]);

您正在从地图中获取所有键。如果您想要所有值,请使用:

library.values();

最后,如果需要按键获取值,请使用V get(Object key)

library.get("01");

这将返回地图中的第一个Item

不清楚你想要哪一个,但基本上这些都是选项。

** 编辑 **

既然你想要所有的值,你可以这样做:

library.values().toArray()

JList 需要一个 Object 的数组或向量,所以这应该可以工作。

【讨论】:

  • 我想将这些歌曲中的每一首都放入 JList 中。我试图将library.keySet() 更改为library.values(),但后来出现异常。 GUI中的代码是:JList tracks = new JList(LibraryData.getLibrary());
【解决方案2】:

如果要按位置获取value和key,可以使用:

键:library.keySet().toArray()[0]

值:library.get(key);

或者(如果你只想要价值)

 library.values().toArray()[0]; 

【讨论】:

    【解决方案3】:

    您可以使用ArrayList:

    1 - 在 Java 中进行灵活数组管理的最佳方法是使用 ArrayLists

    2 - ArrayLists 易于添加、获取、删除等。

    3 - Treemaps 有点……随意。我说的是,如果你使用 Treemap 中的get(Object o) 方法,Object o 必须是一个键,这不是很灵活。

    如果需要,请使用以下代码:

    import java.util.ArrayList;
    import com.example.Something; // It can be ANYTHING
    //...
    ArrayList<Something> somethingList = new ArrayList<Something>();
    //...
    somethingList.add(new Something("string", 1, 2.5, true));
    //...
    boolean isSomething = somethingList.get(somethingList.size() - 1); // Gets last item added
    //...
    int listSize = somethingList.size();
    //...
    somethingList.remove(somethingList.size() - 1); // Removes last item and decrements size
    //...
    Something[] nativeArray = somethingList.toArray(new Something[somethingList.size()]); // The parameter is needed or everthing will point to null
    // Other things...
    

    还是经典的Treemap

    Object keyAtIndex0 = library.keySet.toArray(new Object[library.size()])[0];
    Object value = library.get(keyAtIndex0);
    

    祝你好运!

    【讨论】:

      【解决方案4】:

      我将字符串值列表作为树形图值返回。使用的方法是

       private Map<String, TreeSet<String>> result;
      
          TreeSet<String> names=  result.get(key);
           for(String contactName: names){
            print contactName;
           }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-01
        • 2018-04-07
        • 2021-12-26
        相关资源
        最近更新 更多