2

Matlab 使用 Java 的数据结构类型

 3 years ago
source link: https://zhiqiang.org/coding/use-java-object-in-matlab.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Matlab 使用 Java 的数据结构类型

作者: 张志强

, 发表于 2012-12-09

, 共 1072 字 , 共阅读 280 次

Matlab 2008b 才开始引入 containers.Map ,这是 Matlab 唯一的数据结构(这里的数据结构是指自带一定逻辑性的数据结构,不包括普通数据类型)。如果要有其它,比如 Queue、Set 等数据结构,只能自己编写一个。File Exchange 上有不少人做过这个工作,我也写过Queue、List、Vector 的 Matlab 对象。不过 Matlad 的面向对象编程效率极低,这种方法只能用于不太注重效率的场合。解决这个问题的另外一个方法是使用 Java 对象。

Matlab 6.0 开始集成 Java ,自此可以很方便地使用 Java 的数据结构类型。跟数据结构相关的是 java.util ,里面有超过 20 个数据结构类型,这里有详细的类型的介绍。而这其中常用的有下面几个:

  • Set 类:指一个集合,其中不允许有重复元素。根据具体的实现方法, Matlab 可以使用以下类型:
    • EnumSet :集合元素类型需要一致;速度最快
    • HashSet : hash 表;速度也比较快
    • LinkedHashSet : hash 表,但元素之间根据插入顺序链接;比 Hash 表慢
    • TreeSet :红黑树实现的 Set 类,速度相对较慢;
  • List 类:指一个顺序列表
    • Vector :一个容量可变的数组向量
    • Stack :后进先出,栈
    • LinkedList :链表
    • ArrayQueue
    • PriorityQueue :优先树
  • Map 类:指一个从 keys 到 values 的映射关系
    • EnumMap : keys 的类型一样,和 EnumSet 类似
    • HashMap :利用 hash 表保存
    • HashTable :线程安全的 HashMap
    • TreeMap :利用红黑树实现的 Map
    • LinkedHashMap :一个 HashMap ,但元素之间根据插入顺序互相链接。

使用方法很简单。不需要对 Matlab 做任何配置。比如下面定义一个 HashMap :

map = java.util.HashMap;

然后对 map 的操作可参考Java 文档对 HashMap 对象的描述,或者可通过 methodsview(map)查看 map 可用的函数。

最后还是需要说下效率。唯一可以用来对比的只有 Matlab 内置的 containers.Map 和与 Java 对象 HashMap。测试发现, containers.Map 的效率优于 HashMap ,但只快约 10%。

Q. E. D.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK