【问题标题】:Add two ArrayList to one ArrayList of hashmaps将两个 ArrayList 添加到一个 ArrayList 的 hashmaps
【发布时间】:2013-05-03 21:58:58
【问题描述】:

我有两个ArrayList,我想通过添加它们来创建一个ArrayList,两个列表的大小相同

我打算这样做。

这是经过优化的,还是当列表变大时我可以让它变得更好更高效?

    private ArrayList<Bitmap> imageFile= new ArrayList<Bitmap>();

    imageFile.add(xy); 
    imageFile.add(ab);
    imageFile.add(cd);

    private ArrayList<MediaPlayer> musicFile= new ArrayList<MediaPlayer>();

    musicFile.add(mm);
    musicFile.add(nn);
    musicFile.add(ll);

    private HashMap<Bitmap, MediaPlayer> mappedFiles= new HashMap<Bitmap, MediaPlayer>();

    mappedFiles.put(imageFile.get(i),musicFile.get(i))


    private ArrayList<HashMap<Bitmap, MediaPlayer>> imageMusic= new ArrayList<HashMap<Bitmap, MediaPlayer>>();

   imageMusic.add(mappedFiles);

【问题讨论】:

  • “优化”取决于您的需要。有重复吗?两个列表中的相同条目?你想摆脱他们吗?顺序重要吗?
  • @Makky 我想从两个相同大小的不同数组列表中制作哈希图数组列表。
  • 为什么是 HashMap 的 ArrayList?以后还有其他的 HashMap 会添加到 ArrayList 中吗?
  • 是的,你是对的,我将添加更多的哈希图...到我的哈希图数组列表中。
  • 为什么要使用多个哈希图?你不想要 one 以图像作为音乐文件键的 hashmap 吗?您是否需要单独的列表,或者它们只是一种创建地图的机制?

标签: java algorithm optimization


【解决方案1】:

根据您的评论,您根本不需要地图,您需要类和列表:

public class Track {
    private final String name;
    private final MediaPlayer music;
    public Track (String name, MediaPlayer music) {
        this.name = name;
        this.music = music;
    }
    // getters omitted
}

public class CD {
    private final String name;
    private final BitMap image; 
    private final List<Track> tracks = new ArrayList<Track>();
    public CD (String name, BitMap image) {
        this.name = name;
        this.image = image;
    }
    public List<Track> getTracks() {
        return tracks;
    } 
    // other getters omitted
}

然后

List<CD> cds = new List<CD>();
CD cd = new CD("Thriller", someBitMap);
cd.getTracks().add(new Track("I'm bad", someMusic));
cds.add(cd);

【讨论】:

  • 但是我的方法会带来多少复杂性。
  • 嗯,作为程序员的你将更难弄清楚发生了什么。这将导致错误和/或沮丧。保持节奏有序,您将保持清醒并构建您的软件。这种方法还可以让您轻松添加更多属性,如曲目长度、曲目风格、CD 流派等。您的方法很快就会变得一团糟,恕我直言
【解决方案2】:

自己为 Bitmap 和媒体播放器编写一个包装器

class Media {
   Bitmap bitmap;
   MediaPlayer mediaPlayer
}

当你必须映射位图和媒体播放器时,创建一个此类的对象并将它们推送到ArrayList&lt;Media&gt;

为什么要用MediaPlayer的Bitmap的HashMap来复杂化?

【讨论】:

    【解决方案3】:

    如果你真的需要这种结构(我不明白最后一个ArrayList 是怎么回事),那么我认为它已经相当优化了。

    您无法轻松地从两个列表中创建 Map,因此您必须循环访问它们,因为这些是数组列表,一个非常简单的 for 将非常明确:

    private HashMap<Bitmap, MediaPlayer> mappedFiles= new HashMap<Bitmap, MediaPlayer>();
    for(int i=0; i<imageFile.size(); i++) {
        mappedFiles.put(imageFile.get(i), musicFile.get(i));
    }
    

    【讨论】:

      【解决方案4】:

      试试这个方法

          public static void main(String[] args) {
              ArrayList<String> imageFile = new ArrayList<String>();
      
              imageFile.add("XY");
              imageFile.add("ZZ");
              imageFile.add("YY");
      
              ArrayList<Integer> musicFile = new ArrayList<Integer>();
      
              musicFile.add(1);
              musicFile.add(2);
              musicFile.add(4);
      
              Map<List<String>, List<Integer>> fullMap = new HashMap<List<String>, List<Integer>>();
              fullMap.put(imageFile, musicFile);
      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-11
        • 1970-01-01
        • 2018-08-19
        • 1970-01-01
        • 2013-05-19
        • 1970-01-01
        • 1970-01-01
        • 2015-03-30
        相关资源
        最近更新 更多