Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将两个ArrayList添加到hashmaps的一个ArrayList中_Java_Algorithm_Optimization - Fatal编程技术网

Java 将两个ArrayList添加到hashmaps的一个ArrayList中

Java 将两个ArrayList添加到hashmaps的一个ArrayList中,java,algorithm,optimization,Java,Algorithm,Optimization,我有两个ArrayList,我想通过添加它们来创建一个ArrayList,两个列表的大小相同 我打算这样做 当列表变大时,这是优化的还是我可以使它变得更好、更有效 i、 e private ArrayList imageFile=new ArrayList(); imageFile.add(xy); 添加(ab); 添加(cd); private ArrayList musicFile=新建ArrayList(); 音乐文件。添加(mm); 音乐文件。添加(nn); 音乐文件。添加(ll); p

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

我打算这样做

当列表变大时,这是优化的还是我可以使它变得更好、更有效

i、 e

private ArrayList imageFile=new ArrayList();
imageFile.add(xy);
添加(ab);
添加(cd);
private ArrayList musicFile=新建ArrayList();
音乐文件。添加(mm);
音乐文件。添加(nn);
音乐文件。添加(ll);
private HashMap mappedFiles=new HashMap();
mappedFiles.put(imageFile.get(i)、musicFile.get(i))
私有ArrayList imageMusic=新建ArrayList();
imageMusic.add(mappedFiles);
试试这种方法

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

    }
}
publicstaticvoidmain(字符串[]args){
ArrayList imageFile=新建ArrayList();
添加(“XY”);
imageFile.add(“ZZ”);
imageFile.add(“YY”);
ArrayList musicFile=新的ArrayList();
音乐文件。添加(1);
音乐文件。添加(2);
音乐文件。添加(4);
Map fullMap=newhashmap();
put(图像文件、音乐文件);
}
}

如果您真的需要这种结构(我不明白上一个
数组列表是怎么回事),那么我认为它已经相当优化了

您没有一种方法可以轻松地从两个列表中创建一个映射,因此您必须在它们之间循环,因为它们是数组列表,对于
,一个非常简单的
,将非常明确:

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));
}
private HashMap mappedFiles=new HashMap();

对于(int i=0;i为位图和媒体播放器自己编写一个包装器

class Media {
   Bitmap bitmap;
   MediaPlayer mediaPlayer
}
当您必须映射位图和mediaplayer时,请创建此类的对象并将它们推送到
ArrayList


为什么要使用MediaPlayer位图的HashMap使问题复杂化?

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

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
}
公共类曲目{
私有最终字符串名;
私人音乐播放器;
公共曲目(字符串名称、MediaPlayer音乐){
this.name=名称;
音乐=音乐;
}
//消除剂
}
公共类光盘{
私有最终字符串名;
私有最终位图图像;
私有最终列表曲目=新建ArrayList();
公共CD(字符串名称、位图图像){
this.name=名称;
这个图像=图像;
}
公共列表(){
返回轨道;
} 
//省略了其他getter
}
然后

List cds=new List();
CD=新CD(“Thriller”,一些位图);
添加(新曲目(“我很坏”,一些音乐));
添加(cd);

“优化”取决于你需要什么。是否有重复项?两个列表中的条目相同?你想去掉它们吗?顺序重要吗?@Makky我想从两个大小相同的不同arraylist中创建一个hashmaps的arraylist。为什么要创建一个hashmaps的arraylist?是否有其他hashmaps,你稍后会添加到arraylist中?是的,我会添加更多hashmaps…到我的hashmaps数组列表。为什么要多个hashmaps?你不想要一个带有图像的hashmap作为音乐文件的键吗?你是需要单独的列表,还是它们只是一个创建映射的机制?但是我的方法会带来多大的复杂性。作为程序员,你很难弄清楚到底发生了什么。那就是t将导致错误和/或挫折。保持事情的节奏和有序,你将保持理智并构建软件。这种方法还可以让你轻松添加更多属性,如曲目长度、曲目风格、CD类型等。你的方法很快就会变得一团糟
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);