将两个ArrayList添加到一个hashmap的ArrayList中

时间:2013-05-09 12:15:22

标签: java algorithm optimization

我有两个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); ,两个列表都有相同的大小

我会这样做。

这是优化的,还是可以在列表变大时使其更好,更有效?

即。

{{1}}

4 个答案:

答案 0 :(得分:1)

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

class Media {
   Bitmap bitmap;
   MediaPlayer mediaPlayer
}

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

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

答案 1 :(得分: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);

答案 2 :(得分: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);

    }
}

答案 3 :(得分:0)

如果你真的需要那个结构(我不明白最后ArrayList的处理是什么),那么我认为它已经相当优化了。

你没有办法轻松地从两个列表中创建一个Map,所以你必须循环遍历它们,因为这些是数组列表,一个非常简单的for将是非常明确的:< / p>

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