想象一下,我需要创建一个元素集合,其中顺序可能或不重要.实际上,我计划做的就是使用迭代器.我注意到我的大多数同事使用ArrayList和LinkedHashSet/HashSet.我的问题是,如果我知道这些元素应该是唯一的,我应该使用Set还是List?实际上它并没有真正有所作为,但没有更有效地表达元素是独特的?
我发现这对于大型企业应用程序来说是一个有趣的问题,原因如下:1)如果你不能保证整体代码的质量,使用Set可能很危险.为什么?因为equals()和hashcode可能被错误地覆盖,因此使用Set可能会导致一些非常讨厌的问题.2)使用List对未来的更改更具弹性.如果出于某种原因重复,则无需担心.
从本质上讲,它归结为:如果我知道我应该期待独特的元素,我是否应该支持所有情况下的Set over List?
编辑:我想我也问:Set是否应该用于确保不添加重复项,或者它是否也可以用于说明不存在重复项以便于理解?
我有一个toString()代表ArrayList.
将toString()值复制到剪贴板,我想将其复制回我的IDE编辑器,并ArrayList在一行中创建实例.事实上,我真正在做的是:
我的输入如下:
__PRE__
以下不起作用:
Arrays.asList()Lists.newArrayList()建议?
我想从列表框中获取一堆项目,将它们添加到数组中,对其进行排序,然后将其放回到不同的列表框中.这是我想出的:
ArrayList q = new ArrayList();
foreach (object o in listBox4.Items)
q.Add(o);
q.Sort();
listBox5.Items.Add(q.ToString());
Run Code Online (Sandbox Code Playgroud)
但它不起作用.有任何想法吗?
我有一个问题,让ArrayList正确使用overriden equals.问题是我正在尝试使用equals来测试单个键字段,并使用ArrayList.contains()来测试是否存在具有正确字段的对象.这是一个例子
public class TestClass {
private static class InnerClass{
private final String testKey;
//data and such
InnerClass(String testKey, int dataStuff) {
this.testKey =testKey;
//etc
}
@Override
public boolean equals (Object in) {
System.out.println("reached here");
if(in == null) {
return false;
}else if( in instanceof String) {
String inString = (String) in;
return testKey == null ? false : testKey.equals(inString);
}else {
return false;
}
}
}
public static void main(String[] args) {
ArrayList<InnerClass> objectList = new ArrayList<InnerClass>();
//add some …Run Code Online (Sandbox Code Playgroud) 我有一个 ArrayList<Car>
例如
class Car{
String carName;
int carType;
}
Run Code Online (Sandbox Code Playgroud)
现在,我必须找到列表中是否有任何具有相同名称的汽车.做这个的最好方式是什么?
当然这在java(迄今为止)中是一个不可能的陈述,但理想情况下我想实现它,因为它是许多迭代的核心.例如,第一次多次被称为我正在创建650,000次以上ArrayList.不幸的是,现实是我的实际代码没有循环set内部else; 因此就越过两者add,然后将set命令和浪费时间.
之后我还在另一个循环中,它只执行集合,因为数据已经创建,并且这是多嵌套的,因此它是一个漫长的过程.
ArrayList<Integer> dataColLinker = new java.util.ArrayList<Integer>();
...
...
public void setLinkerAt( int value, int rowIndex) {
...
while(rowIndex >= dataColLinker.size()) {
dataColLinker.add(value);
} else {
dataColLinker.set(rowIndex, value);
}
Run Code Online (Sandbox Code Playgroud)
任何想法或理论?在if语句和ArrayList命令等方面,我不确定java的速度
在这部分代码中:
System.out.println("Alunos aprovados:");
String[] aprovados = {"d", "a", "c", "b"};
List<String> list = new ArrayList();
for (int i = 0; i < aprovados.length; i++) {
if (aprovados[i] != null) {
list.add(aprovados[i]);
}
}
aprovados = list.toArray(new String[list.size()]);
Arrays.sort(aprovados);
System.out.println(Arrays.asList(aprovados));
Run Code Online (Sandbox Code Playgroud)
System.out.println的示例结果是:
[A B C D]
如果我想要下面的结果,我怎么能修改上面的代码?
一个
b
C
d
或至少:
一个,
b,
C,
d
在Java ArrayList<E>实现基础上的一个对象数组.
任何人都可以解释一下为什么ArrayList<E>使用数组Object[]实现数据存储而不是E[]?使用有什么好处Object[]?
我刚刚发现我可以使用CreateObject方法从VBA创建一些.Net类,它可以创建COM类.这非常酷,但是创建的类是后期绑定的,所以你没有获得任何intellisense等.所以我希望做的是编写VBA包装类并将所有方法调用委托给.Net对象的内部引用.
因此,除了尝试引用枚举器之外,这适用于所有内容的ArrayList对象.有一个VBA的黑客攻击,它允许您创建自己的集合并使用For Each ...语法来枚举您的集合.以下是一个例子:
Public Property Get NewEnum() As IUnknown
Attribute NewEnum.VB_UserMemId = -4
Attribute NewEnum.VB_MemberFlags = "40"
Set NewEnum = <<< pass a reference to the enumerator here.
End Property
Run Code Online (Sandbox Code Playgroud)
大多数实现都包含对VBA Collection对象的引用,并传递Collection对象的枚举器.但是,由于我持有.Net ArrayList,我想将其传递出去.但是,当我尝试时,我得到"无效的过程调用或参数".
我目前的尝试是这样的:
Public Function NewEnum() As IUnknown
Dim enumerator As Object
Set enumerator = internalList.GetEnumerator() <<<< Error occurs here.
Set NewEnum = enumerator
End Function
Run Code Online (Sandbox Code Playgroud)
我很确定它可以实现这个功能,因为可以在没有包装器的情况下直接迭代ArrayList集合.例如
Public Sub TestCreateArrayList()
Dim list As Object
Set list = CreateObject("System.Collections.ArrayList")
list.Add "an item."
list.Add "another item."
Dim Item As Variant …Run Code Online (Sandbox Code Playgroud) 我有一个包含私有可变数据列表的类.
我需要在以下条件下公开列表项:
应该将哪个getter函数标记为推荐方法?或者你能提供更好的解决方案吗?
class DataProcessor {
private final ArrayList<String> simpleData = new ArrayList<>();
private final CopyOnWriteArrayList<String> copyData = new CopyOnWriteArrayList<>();
public void modifyData() {
...
}
public Iterable<String> getUnmodifiableIterable() {
return Collections.unmodifiableCollection(simpleData);
}
public Iterator<String> getUnmodifiableIterator() {
return Collections.unmodifiableCollection(simpleData).iterator();
}
public Iterable<String> getCopyIterable() {
return copyData;
}
public Iterator<String> getCopyIterator() {
return copyData.iterator();
}
}
Run Code Online (Sandbox Code Playgroud)
UPD:这个问题来自关于列表getter实现的最佳实践的真实代码审查讨论
arraylist ×10
java ×8
collections ×2
.net ×1
c# ×1
com ×1
console ×1
duplicates ×1
equals ×1
for-loop ×1
generics ×1
iterable ×1
iterator ×1
listbox ×1
newline ×1
overriding ×1
performance ×1
search ×1
set ×1
theory ×1
tostring ×1
vba ×1
while-loop ×1
winforms ×1