3

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

我打算这样做。

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

IE

    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);
4

4 回答 4

1

为 Bitmap 和 Media Player 自己编写一个包装器

class Media {
   Bitmap bitmap;
   MediaPlayer mediaPlayer
}

当您必须映射位图和媒体播放器时,创建此类的对象并将它们推送到ArrayList<Media>

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

于 2013-05-09T12:25:57.430 回答
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);
于 2013-05-09T12:41:42.713 回答
0

试试这个方法

    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);

    }
}
于 2013-05-09T12:21:41.243 回答
0

如果你真的需要那个结构(我不明白最后一个是怎么回事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));
}
于 2013-05-09T12:22:44.810 回答