我有一个人口稠密的arraylist,我想清除和重用.如果我清除它会释放以前使用过的内存吗?
我还应该提一下,arraylist是一个私有的只读字段,在我第一次使用arraylist之后仍然有许多活跃的工作要做.所以我不能等到课后超出范围的垃圾收集.
Clear方法足够快吗?或者我应该销毁并创建一个新的arraylist?
问题更新:
如果我有这样的字段声明(感谢Jon的建议)
/// <summary>
/// Collection of tasks.
/// </summary>
private List<Task> tasks = new List<Task>();
Run Code Online (Sandbox Code Playgroud)
然后我填充它....(严重)
现在,如果不是清除和修剪,我可以打电话:
tasks = new List<Task>();
Run Code Online (Sandbox Code Playgroud)
这会被推荐吗?
我有一个物体的Arraylist.这些对象具有属性或数据类型 - 'String'.我需要按字符串对Arraylist进行排序.怎么做到这一点?
我已经像这样设置了一个HashMap:
Map<String, ArrayList<String>> theAccused = new HashMap<String, ArrayList<String>>();
Run Code Online (Sandbox Code Playgroud)
...我通过存储每个名称(键),一个名称列表(值)来填充它.所以:
ArrayList<String> saAccused = new ArrayList<String>();
// populate 'saAccused' ArrayList
...
// done populating
theAccused.put(sAccuser, saAccused);
Run Code Online (Sandbox Code Playgroud)
所以现在,我想查看HashMap中的所有条目,看看(对于每个'sAcucuser')列表'saAccused'是否包含某个名称.到目前为止,这是我失败的尝试:
Set<String> setAccusers = theAccused.keySet();
Iterator<String> iterAccusers = setAccusers.iterator();
iterAccusers.next();
ArrayList<String> saTheAccused;
// check if 'sAccuser' has been accused by anyone before
for (int i = 0; i < theAccused.size(); i++) {
saTheAccused = theAccused.get(iterAccusers);
if (saTheAccused.contains(sAccuser)) {
}
iterAccusers.next();
}
Run Code Online (Sandbox Code Playgroud)
...但是我不确定Set和Iterator类是如何工作的:/问题是我没有"值"...名称... 'sAccuser's ...用于HashMap可用.
简而言之,我想迭代HashMap并检查特定名称是否存储在任何列表中.那我该怎么做呢?如果您需要我进一步了解或清除任何混淆,请告诉我.
谢谢.
一个稳定的排序是一种维护具有相同值元素的相对顺序.
ArrayList.Sort上的文档说当IComparer提供a时,排序是稳定的:
如果comparer设置为null,则此方法执行比较排序(也称为不稳定排序); 也就是说,如果两个元素相等,则可能不会保留它们的顺序.相反,稳定的排序保留了相等元素的顺序.要执行稳定排序,必须实现自定义IComparer接口.
除非我遗漏了某些内容,否则以下测试用例显示ArrayList.Sort未使用稳定排序:
internal class DisplayOrdered {
public int ID { get; set; }
public int DisplayOrder { get; set; }
public override string ToString() {
return string.Format("ID: {0}, DisplayOrder: {1}", ID, DisplayOrder);
}
}
internal class DisplayOrderedComparer : IComparer {
public int Compare(object x, object y) {
return ((DisplayOrdered)x).DisplayOrder - ((DisplayOrdered)y).DisplayOrder;
}
}
[TestFixture]
public class ArrayListStableSortTest {
[Test]
public void TestWeblinkCallArrayListIsSortedUsingStableSort() {
var call1 = new DisplayOrdered {ID = …Run Code Online (Sandbox Code Playgroud) 我有两个问题.我这里有一个类型的对象ArrayList,对于这种情况,我们称之为"Car".
我做了两个:
Car car1 = new Car();
Car car2 = new Car();
Run Code Online (Sandbox Code Playgroud)
我有一个函数来向这些Car对象添加项目:
car1.addPart("Front Wheels");
car1.addPart("Rear Wheels");
car1.addPart("Rear View Mirror");
car2.addPart("Rims");
car2.addPart("Steering Wheel");
car2.addPart("Bumper");
Run Code Online (Sandbox Code Playgroud)
我需要一个sameContents()可以调用的函数car1:
car1.sameContents(car2);
Run Code Online (Sandbox Code Playgroud)
它传入一个类型的对象ArrayList并检查它,car1看它们是否具有相同的内容和相同的顺序.
public boolean sameContents(Car c) {
ArrayList<String> other_car = c; // error: Type mismatch:
// cannot convert from Car to ArrayList<String>
for (String c : this.parts) {
System.out.println(c);
for(String oc : other_car) {
// stuff
}
}
}
Run Code Online (Sandbox Code Playgroud)
我似乎对这个有各种各样的问题.我无法获得other_car在foreach循环中使用的变量.
第二个需要做的是 …
想知道是否有一种有效的方法将项目添加到Java的ArrayList中,其位置比当前大小更大:
场景:
ArrayList<Item> items = new ArrayList<Item>;
... let's say I add three elements
Run Code Online (Sandbox Code Playgroud)
现在我想在位置10添加一个项目(将项目从3到10保留为null)
items.add(10,newItem); // item.size() == 3
Run Code Online (Sandbox Code Playgroud)
是否有一种有效的方法可以使用null调整/填充ArrayList?
Java的实现使大小字段私有:-( ..
出于好奇,我想测试将GenericList与ArrayList进行比较的刻度数.
对于下面的代码,当我检查秒表时,ArrayList似乎更快.
我做错了还是有解释?(我相信List会更快)
测试代码和输出如下:
private static void ArrayListVsGenericList()
{
// Measure for ArrayList
Stopwatch w0 = new Stopwatch();
w0.Start();
ArrayList aList = new ArrayList();
for (int i = 0; i < 1001; i++)
{
Point p = new Point();
p.X = p.Y = i;
aList.Add(p);
}
foreach (Point point in aList)
{
int v0 = ((Point) aList[8]).X; //unboxing
}
w0.Stop();
// Measure for Generic List<Point>
Stopwatch w1 = new Stopwatch();
w1.Start();
List<Point> list = new List<Point>();
for (int i …Run Code Online (Sandbox Code Playgroud) 假设我像这样创建一些对象类
public class thing {
private String name;
private Integer num;
public oDetails (String a, Integer b) {
name = a;
num = b;
}
...gets/ sets/ etc
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个arraylist来保存这样的对象类.
ArrayList<thing> myList = new ArrayList<thing>;
thing first = new thing("Star Wars", 3);
thing second = new thing("Star Wars", 1);
myList.add(first);
myList.add(second);
Run Code Online (Sandbox Code Playgroud)
我想包含某种逻辑,以便在这种情况下......当我们尝试添加对象"second"而不是向arrayList添加新对象时,我们将second.getNum()添加到first.getNum().因此,如果您要遍历ArrayList,那么它就是
"Star Wars", 4
Run Code Online (Sandbox Code Playgroud)
我无法想出一个处理这个问题的优雅方法.随着arraylist的增长,搜索它以确定是否存在重复的名称项变得麻烦.任何人都可以提供一些指导吗?
我在Java中有很多类,但这是我第一次尝试序列化任何东西.我创建了自己的课程,其中包括一个arraylist.主要对象是这些类的arraylist.我相信我已经做好了一切,但是当我再读回来时,arraylist总是空着的.
主要(主要是测试)类:
import java.io.*;
import java.util.ArrayList;
public class IOTest {
public static void main(String[] args) {
ArrayList<Info> master = new ArrayList <Info>();
Info a = new Info("a");
Info b = new Info("a");
Info c = new Info("a");
master.add(a);
master.add(b);
master.add(c);
print(master);
save(master);
ArrayList<Info> loaded = new ArrayList <Info>();
load(loaded);
System.out.println("Loaded List:");
System.out.println("Loaded Size:" + loaded.size());
print(loaded);
}
public static void save(ArrayList a){
File f = new File("savefile.dat");
try {
FileOutputStream fos = new FileOutputStream(f);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(a); …Run Code Online (Sandbox Code Playgroud) 我目前正在传递一个ArrayList来填充Android中TabLayout的标题.数组中的元素是字符串:["RCP", "RYL", "1", "2", "3", "4", "5", "6"].但不一定按顺序排列.
我想首先使用Letter元素(按字母顺序)返回列表,然后逐步增加整数.
我已经尝试过使用该Collections.sort方法,但这会返回一个数字上升的列表,然后在最后添加"R"字符串:["1", "2", "3", "4", "5", "6", "RCP", "RYL"]
为了澄清,我想对我的ArrayList进行排序,以便它返回["RCP", "RYL", "1", "2", "3", "4", "5", "6"]它也需要灵活,因为"R",字符串的标题可能会改变.
谢谢