Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 树集或树映射-根据说明_Java - Fatal编程技术网

Java 树集或树映射-根据说明

Java 树集或树映射-根据说明,java,Java,在说明中,我被要求“声明一个接口类型,以保存一个以字符集作为键、以已排序的字符串集作为值的映射”。一直以来,我都在使用树集。现在我不确定,我现在确定了 考虑使用TreeMap。下面的代码是我使用过的演示树映射。首先,按照上面的说明,使用TreeSet代替TreeMap是可以接受的。其次,当使用methodB()的TreeMap时,我得到一个错误“非静态变量名不能从静态上下文引用”?谢谢 public class MyMates { private TreeMap names = new

在说明中,我被要求“声明一个接口类型,以保存一个以字符集作为键、以已排序的字符串集作为值的映射”。一直以来,我都在使用树集。现在我不确定,我现在确定了 考虑使用TreeMap。下面的代码是我使用过的演示树映射。首先,按照上面的说明,使用TreeSet代替TreeMap是可以接受的。其次,当使用methodB()的TreeMap时,我得到一个错误“非静态变量名不能从静态上下文引用”?谢谢

public class MyMates  
{

  private TreeMap names = new TreeMap();
  private static String[] name1 = null;
  private static String[] name2 = null;
  private static String[] name3 = null; 


  public MyMates()
  {
    super();    
    names = new TreeMap();  
  }

  public static void methodASet()
  {

    String[] name1 = new String[] {"Amy", "Jose", "Jeremy", "Alice", "Patrick"};
    String[] name2 = new String[] { "Alan", "Amy", "Jeremy", "Helen", "Alexi"};
    String[] name3 = new String[] { "Adel", "Aaron", "Amy", "James", "Alice" };
  }

  public static String methodB(String aTemp)
  {

    for (int i = 0; i < name1.length; i++) 
    {
     names.add(name1[i]);
    }
    System.out.println(names);

    for (int i = 0; i < name2.length; i++)
    {
       names.add(name2[i]);
    }   
    System.out.println(names);

    for (int i = 0; i < name3.length; i++)
    {
       names.add(name3[i]);
    }   
    System.out.println(names);


   return aTemp
  }


   public static void populateTable()
  {
    girlFriends myList = new girlFriends();

    names.addAll(myList.getNames()); // same error here
  }
公共类MyMates
{
私有树映射名称=新树映射();
私有静态字符串[]name1=null;
私有静态字符串[]name2=null;
私有静态字符串[]name3=null;
公共密友()
{
超级();
名称=新树映射();
}
公共静态无效方法集()
{
字符串[]名称1=新字符串[]{“Amy”、“Jose”、“Jeremy”、“Alice”、“Patrick”};
字符串[]名称2=新字符串[]{“Alan”、“Amy”、“Jeremy”、“Helen”、“Alexi”};
字符串[]名称3=新字符串[]{“Adel”、“Aaron”、“Amy”、“James”、“Alice”};
}
公共静态字符串方法B(字符串aTemp)
{
for(int i=0;i
很容易解决“无法从静态上下文引用非静态变量名”的问题

您可以删除methodB()的“静态”修饰符

另一个解决方案是将类成员“名称”声明为静态

你的方法methodASet()有一个bug!!!你重新声明了name1、name2和name3为局部变量。因此永远不会设置静态类成员

树集和树映射的功能不同:

  • 树映射是一个映射(inteface java.util.Map),也就是说一个关联键/值(其中键是有序的)
  • 树集是一个集合(interface java.util.Set):一个有序的对象集合,其中所有对象在集合中都是唯一的,没有映射的“键”概念
因此,您必须根据自己的需要(是否通过键访问对象)选择表示(映射或设置)。

很容易解决“无法从静态上下文引用非静态变量名”的问题

您可以删除methodB()的“静态”修饰符

另一个解决方案是将类成员“名称”声明为静态

你的方法methodASet()有一个bug!!!你重新声明了name1、name2和name3为局部变量。因此永远不会设置静态类成员

树集和树映射的功能不同:

  • 树映射是一个映射(inteface java.util.Map),也就是说一个关联键/值(其中键是有序的)
  • 树集是一个集合(interface java.util.Set):一个有序的对象集合,其中所有对象在集合中都是唯一的,没有映射的“键”概念

因此,您必须根据自己的需要(是否通过键访问对象)选择表示形式(映射或集合)。

正如R.Bemrose在一篇评论中所说,您没有被要求实现,只是一个接口。因此,不要担心实现。映射允许您输入值(在您的情况下,是一组排序的字符串)对于一个特定的键(在您的例子中,是一组字符),使用同一个键来检索相同的值。该接口会是什么样子?这是个问题。

正如R.Bemrose在评论中所说,您没有被要求实现,只是一个接口。所以不要担心实现。映射允许您输入值(在您的情况下,是一组已排序的字符串)中的特定键(在您的情况下,是一组字符),并使用相同的键检索相同的值。该接口会是什么样子?这是个问题。

私有树映射名称似乎不是静态的,因此无法从静态方法访问它。也许您需要了解一下静态变量/方法

您必须记住methodASet和methodB是不同的方法,methodASet中的变量无法被methodB看到。当您声明字符串[]名称1时,您正在创建一个类型为字符串[]的新变量,而不是使用类变量name1(设置为null的变量)。删除“字符串[]”从MethodSet中的变量重新使用类变量

仔细想想,TreeMap是否有add()方法?我想您可能想切换到前面提到的TreeSet,或者将add()方法更改为put()

对于populateTable(),您确定girlFriends是一种类型吗?它来自哪里?您确定myList不是一种标准的java集合类型吗

希望我的(大部分是复杂的)帖子能有所帮助

编辑:糟了!我想你是对的。看起来他只需要编写接口,而不是实现

编辑:静态示例

Static method: Class.doSomething() Static variable: Class.count_something Class method: ObjectType obj = new ObjectType() obj.doSomething() Class variable: ObjectType obj = new ObjectType() obj.count_something 静态方法: 类。doSomething() 静态变量: 上课,数数什么 类方法: ObjectType obj=新的ObjectType() 目标剂量法() 类变量: ObjectType obj=新的ObjectType()
obj.count\u something看起来私有树映射名称不是静态的,因此无法从静态方法访问它。也许您需要复习一下静态变量/方法

您必须记住methodASet和methodB是不同的方法,methodASet中的变量无法被methodB看到。当您声明String[]name1时,您正在创建一个String[]类型的新变量,而不是使用类变量name1(设置为null的变量)。从Method中的变量中删除“String[]”
Map<Set<Character>, SortedSet<String>> map;
map = new HashMap<Set<Character>, SortedSet<String>>();