簡體   English   中英

尋找智能和快速搜索算法

[英]looking for a smart and fast searching algorithm

假設我有2個對象數組,它們在以下方案中相互映射:

array1:

String [] prog_types1 = {"Program1","Program2","Program3","Program4"};

和array2:

String [] prog_types2 ={"SubProgram1","SubProgram2","SubProgram3","SubProgram4",  
"SubProgram5","SubProgram6","SubProgram7","SubProgram8","SubProgram9","SubProgram10"};

正如它從名稱中所理解的那樣,prog_types2是prog_types1的擴展,但是有一些重復的值,所以這些程序之間的完整映射看起來像這樣:

prog_types1     prog_types2
ProgramType1    SubProgramType1
ProgramType1    SubProgramType2
ProgramType1    SubProgramType7
ProgramType1    SubProgramType9
ProgramType2    SubProgramType12
ProgramType2    SubProgramType7
ProgramType2    SubProgramType9
ProgramType3    SubProgramType1
ProgramType3    SubProgramType2
ProgramType3    SubProgramType21
ProgramType3    SubProgramType27
ProgramType3    SubProgramType7
ProgramType5    SubProgramType12
ProgramType5    SubProgramType9

我的問題是:從更快的處理和重用的角度來看,將這些數組相互映射的最佳方法是什么? 我已將其實現為:

- 一組類(類prog1和prog2以及將它放入向量后)...

- 帶有hashset的哈希表

- 可能還有一個陣列

我正在尋找的方式不應該包括為prog1對象再次創建相同的prog2對象,因為它將以前面描述的所有方式,但是例如以任何其他方式將其映射到索引位置。 只是尋找一種很好的化學方法來解決它......

提前致謝

ps它應該只在幾個類之間的1個包中使用,並且它的主要用途是基於prog1類型值的prog2類型值的總體

ps2 java7

使用Guava Libraries中的MultiMap ,您可以說:

Multimap<String, String> mmap = ArrayListMultimap.create();
mmap.put("Program1", "SubProgramType1");
mmap.put("Program1", "SubProgramType2");
// etc.

mmap.get("Program1")

看起來像:

[SubProgramType1, SubProgramType2, SubProgramType7, SubProgramType9]

BTW,Hashtable現在不用於哈希集合,已被HashMap取代:)

IMO最好的方法是:

Map<String, List<String>> programs = new HashMap<String, List<String>>();

將第一個列表中的字符串作為鍵和組成值列表的相應子程序。 現在映射很明顯:

ProgramType1 -> [SubProgramType1, SubProgramType2, SubProgramType7, SubProgramType9]
ProgramType2 -> [SubProgramType12, SubProgramType7, SubProgramType9]
ProgramType3 -> [SubProgramType1, SubProgramType2, SubProgramType21, SubProgramType27, SubProgramType7]
ProgramType5 -> [SubProgramType12, SubProgramType9]

Guava ListMultimap ,它給List<E> ,而不是Collection<E> - 更加令人愉快。

private ListMultimap<String,Something> stuff = ArrayListMultimap.create();

// ...

public void add(String key, Something item) {
  stuff.put(key, item);
}

public List<Something> get(String key) {
  // might as well use the Lists convenience API while we're at it.
  return Lists.newArrayList(stuff.get(key));
}

http://www.coffee-bytes.com/2011/12/22/guava-multimaps

順便說一句,因為我需要:

- 單獨使用Program1值

- 單獨使用SubProgram1值

- 根據Program1值填充SubProgram1值

這里最簡單的解決方案是聲明所有dublicates的雙維數組(因為它在完整的地圖模式中顯示)和1)和2)使用非重復的algorythm和3)循環從第二維循環數據

所以沒有理由聲明3個對象,巨大的內存保存和很好的方法。 我給自己一個明星吧:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM