什么是更有效的方式来交换两个字符串(字母数字部分号码)

时间:2017-07-19 04:49:33

标签: java android

我对Android开发和Java相对较新。我制作了一个Android应用程序供我个人使用,因为他们使用旧的部件号更换新的部件号给您带来了不便。

长话短说,我的计算机中的部件号已更新,但他们不会更改任何旧部件号上的标签,直到耗材最后一次? (很长一段时间)。部件号为NO LOGICAL ORDER,并且是字母数字。所以他们必须成为字符串(我认为? - 我主要来自C ++背景)。每次订单交换时,我们都会收到10页零件号的数据包进行搜索。

所以我做了一个应用程序,将计算机上的数字与标签上的数字互换。但这是一个很长的if / else循环列表。例如:

else if(str.equals("EUR31"))    {  return "D102 B"; }
    else if(str.equals("EUR228"))   {  return "D222 B"; }
    else if(str.equals("EUR1072"))  {  return "D311 B"; }
    else if(str.equals("ACT482")) {  return "D646 B"; }
    else if(str.equals("ACT325")) {  return "D649 B"; }
    else if(str.equals("EUR394")) {  return "D712 B"; }
    else if(str.equals("ACT526")) {  return "D723 B"; }
    else if(str.equals("EUR391")) {  return "D729 B"; }

问题:有没有办法优化这个,所以它不是300行的if / else语句?我已经查看了哈希表等,但如果可能的话,我不确定如何正确实现它。这仅仅是为了我自己,它可以快速工作,手机上没有任何错误,只是希望改进。

2 个答案:

答案 0 :(得分:3)

为了将这种逻辑解决为编程,HshTable是最好的方法,因为它提供了O(1)搜索时间复杂度。要使用哈希表实现您的问题,它将如下所示:  创建一个像:

的地图
Map<String,String> strMap = new Map<String,String>();
// now put your strings into strMap like
map.put("your_key", "yourValue");
to retrieve the value corresponding to Key it will be like:
if(strMap.containsKey(str)){// your str
return strMap.get(str);
}

根据您的需要修改它,如循环和所有;

示例: 根据你的问题,如果你把所有字符串逐个放在地图上,如:

 strMap.put("EUR31","D102 B");
strMap.put("EUR228", "D222 B");
strMap.put("EUR1072","D311 B");
..........
..........

从地图中检索数据时,您可以这样做:

String str = "EUR31";
if(strMap.containsKey(str)){
return strMap.get(str);
}

答案 1 :(得分:-1)

你可以使用2个ArrayList并按索引检查

ArrayList<String> firstList = new ArrayList<String>() {
            {
                add("EUR31");
                add("EUR228");
                add("EUR1072");
                add("ACT482");
            }
        };
ArrayList<String> secondList = new ArrayList<String>() {
            {
                add("D102 B");
                add("D222 B");
                add("D311 B");
                add("D646 B");
            }
};

String getResult(String firstWord) {
     for (int i = 0; i < firstList.size(); i++) {
          if (firstList.get(i).equals(firstWord)) {
              return secondList.get(i);
          }
     }
     return "";
}