2013-05-09 3 views
3

У меня есть два ArrayList, и я хочу, чтобы сделать один ArrayList, добавив их, оба списка имеют тот же размерДобавить два ArrayList в одной ArrayList из HashMaps

Я собираюсь сделать это таким образом.

Является ли это оптимизированным или я могу сделать его лучше и эффективнее, когда списки становятся большими?

т.е.

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

«Оптимизированный» зависит от того, что вам нужно. Есть ли дубликаты? Те же записи в обоих списках? Вы хотите избавиться от них? Означает ли порядок? – CPerkins

+0

@Makky Я хочу сделать arraylist из hashmaps от двух разных arraylists того же размера. – Prateek

+0

Почему ArrayList из HashMaps? Есть ли другие HashMaps, которые вы добавите в ArrayList позже? –

ответ

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

, но насколько сложна моя работа. – Prateek

+0

Ну, вам будет сложнее программист понять, что происходит. Это приведет к ошибкам и/или разочарованию. Держите вещи избитыми и упорядоченными, и вы останетесь здоровыми и создадите программное обеспечение. Этот подход также позволяет вам легко добавлять дополнительные атрибуты, такие как длина дорожки, стиль трека, жанр CD и т. Д. И т. Д., И вы, возможно, быстро превращаетесь в беспорядок IMHO – Bohemian

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

    } 
} 
0

Если вы действительно нужна эта структура (я не понимаю, в чем дело с последним ArrayList), то я думаю, что это довольно оптимизированная ,

Вы не имеете возможность легко создать карту из двух списков, так что вам придется цикл через них, так как они представляют собой списки массивов, очень простой 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)); 
} 
1

Написать обертку для Bitmap, и Media Player себя

class Media { 
    Bitmap bitmap; 
    MediaPlayer mediaPlayer 
} 

Когда нужно отобразить растровое изображение и медиаплеера, создать объект этого класса и подтолкнуть их к ArrayList<Media>?

Почему вы хотите успеть с помощью HashMap в Bitmap MediaPlayer?

Смежные вопросы