Java中的字符串标记

Java中的字符串标记,java,Java,如何在java中标记字符串数组 我想制作一个字符串数组并标记它们,如下所示: m funny s funny t boring k boring 然后,如果用户可以通过如下标记来搜索它们 search : funny :: m,s 创建HashMaps以存储正向和反向映射。 HashMap<String,String> stringTags; HashMap<String,ArrayList<String>> tagStrings; HashMap-s

如何在java中标记字符串数组

我想制作一个字符串数组并标记它们,如下所示:

m funny
s funny 
t boring
k boring
然后,如果用户可以通过如下标记来搜索它们

search : funny
::
m,s

创建
HashMap
s以存储正向和反向映射。

HashMap<String,String> stringTags;
HashMap<String,ArrayList<String>> tagStrings;
HashMap-stringTags;
HashMap标记字符串;
然后您可以像这样添加映射:

public void tagString(String string, String tag) {
  this.stringTags.put(string, tag);
  ArrayList<String> strings = this.tagStrings.get(tag);
  if (strings == null) {
    strings = new ArrayList<String>();
    this.tagStrings.put(tag, strings);
  }
  strings.add(string);
}
private String getTag(String string) {
  return this.stringTags.get(string);
}

private String[] getStrings(String tag) {
  ArrayList<String> strings = this.tagStrings.get(tag);
  if (strings == null)
    return new String[0];
  return strings.toArray(new String[strings.size()]);
}
public void标记字符串(字符串,字符串标记){
this.stringTags.put(string,tag);
ArrayList strings=this.tagStrings.get(tag);
if(strings==null){
strings=newarraylist();
this.tagStrings.put(tag,strings);
}
字符串。添加(字符串);
}
然后您可以这样访问:

public void tagString(String string, String tag) {
  this.stringTags.put(string, tag);
  ArrayList<String> strings = this.tagStrings.get(tag);
  if (strings == null) {
    strings = new ArrayList<String>();
    this.tagStrings.put(tag, strings);
  }
  strings.add(string);
}
private String getTag(String string) {
  return this.stringTags.get(string);
}

private String[] getStrings(String tag) {
  ArrayList<String> strings = this.tagStrings.get(tag);
  if (strings == null)
    return new String[0];
  return strings.toArray(new String[strings.size()]);
}
private String getTag(字符串){
返回此.stringTags.get(字符串);
}
私有字符串[]获取字符串(字符串标记){
ArrayList strings=this.tagStrings.get(tag);
if(strings==null)
返回新字符串[0];
返回strings.toArray(新字符串[strings.size()]);
}

如果此数据将由多个线程访问,请记住同步这些函数。

创建
HashMap
s以存储正向和反向映射。

HashMap<String,String> stringTags;
HashMap<String,ArrayList<String>> tagStrings;
HashMap-stringTags;
HashMap标记字符串;
然后您可以像这样添加映射:

public void tagString(String string, String tag) {
  this.stringTags.put(string, tag);
  ArrayList<String> strings = this.tagStrings.get(tag);
  if (strings == null) {
    strings = new ArrayList<String>();
    this.tagStrings.put(tag, strings);
  }
  strings.add(string);
}
private String getTag(String string) {
  return this.stringTags.get(string);
}

private String[] getStrings(String tag) {
  ArrayList<String> strings = this.tagStrings.get(tag);
  if (strings == null)
    return new String[0];
  return strings.toArray(new String[strings.size()]);
}
public void标记字符串(字符串,字符串标记){
this.stringTags.put(string,tag);
ArrayList strings=this.tagStrings.get(tag);
if(strings==null){
strings=newarraylist();
this.tagStrings.put(tag,strings);
}
字符串。添加(字符串);
}
然后您可以这样访问:

public void tagString(String string, String tag) {
  this.stringTags.put(string, tag);
  ArrayList<String> strings = this.tagStrings.get(tag);
  if (strings == null) {
    strings = new ArrayList<String>();
    this.tagStrings.put(tag, strings);
  }
  strings.add(string);
}
private String getTag(String string) {
  return this.stringTags.get(string);
}

private String[] getStrings(String tag) {
  ArrayList<String> strings = this.tagStrings.get(tag);
  if (strings == null)
    return new String[0];
  return strings.toArray(new String[strings.size()]);
}
private String getTag(字符串){
返回此.stringTags.get(字符串);
}
私有字符串[]获取字符串(字符串标记){
ArrayList strings=this.tagStrings.get(tag);
if(strings==null)
返回新字符串[0];
返回strings.toArray(新字符串[strings.size()]);
}
如果这些数据将由多个线程访问,请记住同步这些函数。

我建议对字符串使用一系列标记。这样,您可以通过一次查找获得具有给定标记的所有字符串

MultiMap<String, String> tagStringMap = new MultiMap<String, String>();

// load up the tag to strings.
tagStringMap.put(tag1, string1);

// single lookup gets everything.
Collection<String> strings = tagStringMap.get(tag);
MultiMap tagStringMap=new MultiMap();
//将标记加载到字符串。
tagStringMap.put(tag1,string1);
//一次查找就能得到一切。
集合字符串=tagStringMap.get(标记);
我建议对字符串使用一系列标记。这样,您可以通过一次查找获得具有给定标记的所有字符串

MultiMap<String, String> tagStringMap = new MultiMap<String, String>();

// load up the tag to strings.
tagStringMap.put(tag1, string1);

// single lookup gets everything.
Collection<String> strings = tagStringMap.get(tag);
MultiMap tagStringMap=new MultiMap();
//将标记加载到字符串。
tagStringMap.put(tag1,string1);
//一次查找就能得到一切。
集合字符串=tagStringMap.get(标记);
使用一个

使用一个

//键是标记,为所有具有此标记的字符串赋值。
HashMap标记=新的HashMap();
//带标签的单词:有趣
设置单词=标签。获取(“有趣”);

如果一个单词可以有多个标记,那么您可能有另一个地图:

// key is string, value all the tags for the string
HashMap<String, HashSet<String>> invertedTags = new HashMap<String, HashSet<String>>();
// tags of the word: "m"
Set<String> tags = invertedTags.get("m");
//键是字符串,为字符串的所有标记赋值
HashMap invertedTags=新HashMap();
//单词“m”的标签
Set tags=invertedTags.get(“m”);
//键是标记,为所有具有此标记的字符串赋值。
HashMap标记=新的HashMap();
//带标签的单词:有趣
设置单词=标签。获取(“有趣”);

如果一个单词可以有多个标记,那么您可能有另一个地图:

// key is string, value all the tags for the string
HashMap<String, HashSet<String>> invertedTags = new HashMap<String, HashSet<String>>();
// tags of the word: "m"
Set<String> tags = invertedTags.get("m");
//键是字符串,为字符串的所有标记赋值
HashMap invertedTags=新HashMap();
//单词“m”的标签
Set tags=invertedTags.get(“m”);


我想您想使用一个映射值,而不是使用
hashmap
,其中
是标记,
是该标记的对象。或者您可以使用对象列表作为值,`如果同一标记有多个值,下次试着更清楚地表述你的问题-你的问题的上下文是什么?到目前为止你尝试了什么?我想你想使用一个映射值,而不是使用
hashmap
,其中
键是标记,
值是该标记的对象。或者你可以使用
对象列表
作为值,`如果同一个标记有多个值。顺便说一句,下次试着更清楚地表述你的问题-你的问题的上下文是什么?到目前为止你尝试了什么?当映射列表变大时,这个算法非常慢。@Erick,即使对于100万个条目,它也出人意料地快,但肯定不是最优的。在我的机器上,搜索一百万条条目花了39毫秒。显然,多重地图将是一个微秒的阵营@乔纳森:这是一个非常糟糕的解决方案。为什么不从标记映射到单词列表?请看@james xu的答案。这在时间和空间复杂性方面都更好!嗯,谢谢大家帮助我。。。。但我无法理解你的大部分答案,因为。。。。我只是一个新程序员:Di将把整个问题发布到uThis。当映射列表变大时,这个算法非常慢。@Erick,即使是100万个条目,它的速度也令人惊讶,但肯定不是最优的。在我的机器上,搜索一百万条条目花了39毫秒。显然,多重地图将是一个微秒的阵营@乔纳森:这是一个非常糟糕的解决方案。为什么不从标记映射到单词列表?请看@james xu的答案。这在时间和空间复杂性方面都更好!嗯,谢谢大家帮助我。。。。但我无法理解你的大部分答案,因为。。。。我只是一个新的程序员:Di将把整个问题发布到Java的ui上。。我无法开始一段代码。。。我的脑子乱七八糟。。用于标记程序。我曾经考虑过制作两个字符串数组并将它们连接在一起,当用户搜索将通过第二个字符串中另一个单词的ID的标记进行搜索时,我如何才能做到这一点-请搜索、添加和删除标记..:/使用简单的代码,我无法理解哈希映射或使用它…@MonDo021你需要开始阅读Java网站上的教程,直到你“理解它”。有一种编程方法是不存在的