[TreeMap]:在一个类中创建和加载TreeMap,并从多个单独的/不同的类访问该Tmap

时间:2019-03-23 20:12:14

标签: java get put treemap bluej

编译错误由“新” TMap定义解决,而不是由可能的重复引用解决。我试图澄清这一点。我是Java Newbee,这是我的第一篇文章。

从那时开始,问题就无法从不同的类访问我的TMap。

话虽如此,我的认沽期权由于随后的Get with“ new”而丢失。我似乎无法不重新创建TMap而访问它。 事件顺序:定义/初始化TMap =>放置/获取到TMap =>使用“新”获取TMap。

我在Stackoverflow问题中发现了一些类似的好主意:“从不同的类访问HashMap”。

创建并初始化我的树形图“ DataStorage”和“放置/获取” PutDataStorage”类工作正常(成功加载并能够获取那些记录)。

我尝试使用“新的” DataStorage获取Get(因为我还没有弄清楚如何访问表),但失败了,原因是我创建了一个新的Tmap。

这些示例中我缺少一些内容。也许一个完整的例子会帮助我,而不是帮助别人。我喜欢作品的概念,但是现在还太新以至于无法欣赏各个作品,并且已经花了太多时间(反复进行数周)。

是的,我是新来的;)。我会以某种方式修复它。

摘要:

理想情况下,我要完成的工作是在一个类中创建并加载TreeMap。从一个或多个单独的/附加的/其他类访问同一TreeMap。

我现在所拥有的:丢失了初始加载的数据和地图。无法从其他类访问我的树图。

在此期间,我仍在尝试不同的想法,使用软件包等。

定义/初始化树形图:数据存储

import java.util.TreeMap;
public class DataStorage {
 public static TreeMap<String, Integer> people = new TreeMap<String, Integer>();
}

并放置:PutDataStorage

import java.util.TreeMap;
public class PutDataStorage {
/** 
 * Run one time "put"
 */
    public static void main(String[] args) {  
       DataStorage storage = new DataStorage();
       TreeMap<String, Integer> people = storage.people;
            people.put("bob", 2);
            people.put("susan", 5);

        System.out.println("PutData whole Entry  " +people.entrySet());
        System.out.println("PutData First Entry  " +people.firstEntry());
        System.out.println("PutData susan Value  " +people.get("susan"));
    }
    }

获取树形图:GetDataStorage清除我以前的放置记录,因为我在那里有“新”记录。我从GetDataStorage中获得的唯一记录是单独的popeye = 3记录。我需要找到一种访问TMap的方法,而不必一遍又一遍地重新创建它。

import java.util.TreeMap;
public class GetDataStorage {

    public static void main(String[] args) {  //System.out.println("main");
        DataStorage storage = new DataStorage();
        TreeMap<String, Integer> people = storage.people;
       // TreeMap<String, Integer> people = new TreeMap<String, Integer>();
        people.get("bob");
        people.get("susan");
        people.put("popeye", 3);
        System.out.println("GetData 1stEntry  " +people.firstEntry());
        System.out.println("GetData bobValue  " +people.get("bob"));
        System.out.println("GetData popValue  " +people.get("popeye"));
        System.out.println("GetData lowerKey  " +people.lowerEntry("popeye"));
        System.out.println("GetData highKey   " +people.higherEntry("popeye"));
    }
    }

输出:来自Put

PutData whole Entry  [bob=2, susan=5]
PutData First Entry  bob=2
PutData susan Value  5

输出:从Get

GetData 1stEntry  popeye=3
GetData bobValue  null
GetData popValue  3
GetData lowerKey  popeye=3
GetData hireKey   popeye=3

预期的Get结果应为:

GetData 1stEntry  bob=2
GetData bobValue  2
GetData popValue  3
GetData lowerKey  bob=2
GetData highKey   susan=5

预先感谢您。

1 个答案:

答案 0 :(得分:0)

两个类都再次成为“静态”。

无论是否创建公共定义的打包原因,此方法都可以使用。我创建并测试了两者。如果需要,请在两个类中注释掉程序包名称。

请注意,我以不升序的顺序投入使用,以证明导航适用于TreeMap。

不要担心答案行的数量,因为大多数都是打印和注释。

PutDS类(创建并加载TreeMap及其记录)。

//package twowherewego;

import java.util.TreeMap;

public class PutDS {        // Put DS(Data Storage)

public static TreeMap gettMapCashType(){    System.out.println("PutDS - entered " );
    // Create TreeMap=tMapCashType  and "put" two records to tMapCashType
       TreeMap<String, String> tMapCashType = new TreeMap<String, String>();

                tMapCashType.put("C", "Credit Card");  // out of order puts
                tMapCashType.put("A", "All");

System.out.println("PutDS " + tMapCashType);
                return tMapCashType;
            }
    }

先执行PutDS然后放入其他TreeMap记录的“主”类,然后使用TreeMap Navigation关键字获取许多记录:

//package twowherewego;
import java.util.TreeMap;

public class GetDS{         // Get DS(Data Storage)

    public static void main(String[] args) {  
        System.out.println("Works with or without 'towherewego' package cause it is public");
        System.out.println("** GetDS main: call PutDS and...");
        // Execute PutDS with method=gettMapCashType() 
       TreeMap<String, String> people = PutDS.gettMapCashType();   //class=PutDS "." method
       System.out.println("** back into GetDS main: after call to PutDS ");
                                            // space or no space ='s no difference
       people.put("D","popeye");            // notice this "put" has no space                                            
       people.put("B", "Bank Card");        // notice this "put" has a space after the ","

        System.out.println("{{{ Navigational helpful keywords, etc }}}" );
        System.out.println("GetData keySet      " +people.keySet());         // key 
        System.out.println("GetData entrySet    " +people.entrySet());       // key and value 
        System.out.println("GetData 1stEntry    " +people.firstEntry());     // 1st entry/key 
        System.out.println("GetData B_BankCard  " +people.get("B"));         // get B value 
        System.out.println("GetData B_lowerKey  " +people.lowerEntry("B"));  // get B lower
        System.out.println("GetData B_highrKey  " +people.higherEntry("B")); // get B higher    
        System.out.println("GetData lastEntry   " +people.lastEntry());      // last entry/key

           System.out.println("**  << End of GetDS >>");
    }
    }         

使用其关键字生成/显示跟踪和导航记录。注意:放置顺序是按降序排列的,但是TreeMap(默认情况下)是按升序排列的(有关示例,请参见“ GetData keySet,... entrySet”)。

Works with or without 'towherewego' package cause it is public
** GetDS main: call PutDS and...
PutDS - entered 
PutDS {A=All, C=Credit Card}
** back into GetDS main: after call to PutDS 
{{{ Navigational helpful keywords, etc }}}
GetData keySet      [A, B, C, D]
GetData entrySet    [A=All, B=Bank Card, C=Credit Card, D=popeye]
GetData 1stEntry    A=All
GetData B_BankCard  Bank Card
GetData B_lowerKey  A=All
GetData B_highrKey  C=Credit Card
GetData lastEntry   D=popeye
**  << End of GetDS >>