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