我想知道java HashMap与ArrayList相比的内存开销是多少?
更新:
我想提高搜索大包(600万+)相同对象的特定值的速度.
因此,我正在考虑使用一个或多个HashMap而不是使用ArrayList.但我想知道HashMap的开销是多少.
据我所知,密钥不是存储的,只是密钥的散列,所以它应该像对象的散列大小+一个指针.
但是使用了什么哈希函数?它是Object提供的还是另一个?
在java中是否有用于将ArrayList转换为对象数组的命令.我知道如何将每个对象从arrayList复制到对象数组中,但我想知道它是否会自动完成.
我想要这样的东西:
ArrayList<TypeA> a;
// Let's imagine "a" was filled with TypeA objects
TypeA[] array = MagicalCommand(a);
Run Code Online (Sandbox Code Playgroud) 正如标题所说,我想知道ArrayList的contains()方法的时间复杂度是多少.
我们怎样才能在Guava api的帮助下从List中删除重复项?
目前我正在关注此事:
private List<T> removeDuplicate(List<T> list){
return new ArrayList<T>(new LinkedHashSet<T>(list));
}
Run Code Online (Sandbox Code Playgroud) 我正在阅读" 我们是否需要在ArrayList上使用迭代器? " 这一问题中提到的答案.
在答案中,用户声明了这样的话:"使用ArrayLists的迭代器的一个大用例是当你想在迭代时删除元素".
即使在Java中使用ArrayList的remove方法也可以实现这一点.我的问题是为什么我们需要ArrayList中的迭代器?
考虑一下代码:
import java.util.*;
public class ocajp66 {
public static void main(String[] args) {
ArrayList a = new ArrayList();
for (int i = 0; i < 10; i++) {
a.add(i);
}
System.out.printf("BEFORE ITERATOR\n");
for (int i = 0; i < a.size(); i++) {
System.out.printf("I:%d\n", a.get(i));
}
System.out.printf("AFTER ITERATOR\n");
Iterator i = a.iterator();
while (i.hasNext()) {
System.out.printf("I:%d\n", i.next());
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释迭代器的重要性吗?如果你能用代码解释我会很棒.
我最近出现在面试中,面试官问我一个关于Arrays和的问题ArrayList.
他问我,如果一个数组的数组可以是多维的,那么,为什么是ArrayList的ArrayList"不是多维?
例如:
// Multidimensional
int[][] array = new int[m][n];
// Not multidimensional
ArrayList<ArrayList<Integer>> seq = new ArrayList<ArrayList<Integer>>();
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我理解这个吗?
到目前为止,我已经看到了许多可以说明的例子,但由于某种原因,当它变得有点复杂时,我无法让它工作.我有一个Movie对象,它实现了Parcelable.此book对象包含一些属性,例如ArrayLists.在执行ReadTypedList时,运行我的应用程序会导致NullPointerException!我真的没有想法
public class Movie implements Parcelable{
private int id;
private List<Review> reviews
private List<String> authors;
public Movie () {
reviews = new ArrayList<Review>();
authors = new ArrayList<String>();
}
public Movie (Parcel in) {
readFromParcel(in);
}
/* getters and setters excluded from code here */
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(id);
dest.writeList(reviews);
dest.writeStringList(authors);
}
public static final Parcelable.Creator<Movie> CREATOR = new Parcelable.Creator<Movie>() {
public MoviecreateFromParcel(Parcel source) {
return new Movie(source);
}
public Movie[] newArray(int size) {
return new Movie[size]; …Run Code Online (Sandbox Code Playgroud) 我有一堆索引,我想删除这些索引中的元素ArrayList.我不能做一个简单的remove()s 序列,因为元素在每次移除后都会移位.我该如何解决这个问题?
我在c#中有一个List,我在其中添加列表字段.现在添加i时必须检查条件,如果条件满足,那么我需要删除列表中添加的最后一行.这是我的示例代码..
List<> rows = new List<>();
foreach (User user in users)
{
try
{
Row row = new Row();
row.cell = new string[11];
row.cell[1] = user."";
row.cell[0] = user."";
row.cell[2] = user."";
rows.Add(row);
if (row.cell[0].Equals("Something"))
{
//here i have to write code to remove last row from the list
//row means all the last three fields
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是如何从c#中的列表中删除最后一行.请帮我.
处理大量数据时,我经常发现自己在做以下事情:
HashSet<String> set = new HashSet<String> ();
//Adding elements to the set
ArrayList<String> list = new ArrayList<String> (set);
Run Code Online (Sandbox Code Playgroud)
类似于"转储"列表中集的内容.我通常这样做,因为我添加的元素通常包含我要删除的重复项,这似乎是一种删除它们的简单方法.
只考虑到这个目标(避免重复),我也可以写:
ArrayList<String> list = new ArrayList<String> ();
// Processing here
if (! list.contains(element)) list.add(element);
//More processing here
Run Code Online (Sandbox Code Playgroud)
因此无需将该集"转储"到列表中.但是,在插入每个元素之前我会做一个小的检查(我假设HashSet也这样做)
这两种可能性中的任何一种显然更有效吗?