标签: arraylist

在ArrayList上使用HashSet来传达意图?

想象一下,我需要创建一个元素集合,其中顺序可能或不重要.实际上,我计划做的就是使用迭代器.我注意到我的大多数同事使用ArrayList和LinkedHashSet/HashSet.我的问题是,如果我知道这些元素应该是唯一的,我应该使用Set还是List?实际上它并没有真正有所作为,但没有更有效地表达元素是独特的?

我发现这对于大型企业应用程序来说是一个有趣的问题,原因如下:1)如果你不能保证整体代码的质量,使用Set可能很危险.为什么?因为equals()和hashcode可能被错误地覆盖,因此使用Set可能会导致一些非常讨厌的问题.2)使用List对未来的更改更具弹性.如果出于某种原因重复,则无需担心.

从本质上讲,它归结为:如果我知道我应该期待独特的元素,我是否应该支持所有情况下的Set over List?

编辑:我想我也问:Set是否应该用于确保不添加重复项,或者它是否也可以用于说明不存在重复项以便于理解?

java collections arraylist set

10
推荐指数
2
解决办法
7764
查看次数

在一次调用中将ArrayList.toString()转换回ArrayList

我有一个toString()代表ArrayList.

将toString()值复制到剪贴板,我想将其复制回我的IDE编辑器,并ArrayList在一行中创建实例.事实上,我真正在做的是:

  • 我的ArrayList.toString()包含设置单元测试所需的数据.
  • 我想将此ArrayList.toString()复制到我的编辑器中,以针对此边缘情况构建测试
  • 我不想手工解析任何东西

我的输入如下:

__PRE__

以下不起作用:

  • Arrays.asList()
  • 谷歌收藏 Lists.newArrayList()

建议?

java collections arraylist tostring

10
推荐指数
2
解决办法
1万
查看次数

对列表框中的项目列表进行排序

我想从列表框中获取一堆项目,将它们添加到数组中,对其进行排序,然后将其放回到不同的列表框中.这是我想出的:

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)

但它不起作用.有任何想法吗?

c# listbox arraylist winforms

10
推荐指数
3
解决办法
7万
查看次数

ArrayList不使用重写的equals

我有一个问题,让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)

java overriding equals arraylist

10
推荐指数
2
解决办法
2万
查看次数

在arraylist中查找重复值

我有一个 ArrayList<Car>

例如

class Car{
   String carName;
   int carType;
}
Run Code Online (Sandbox Code Playgroud)

现在,我必须找到列表中是否有任何具有相同名称的汽车.做这个的最好方式是什么?

java search arraylist duplicates

10
推荐指数
3
解决办法
7万
查看次数

同时,其他环

当然这在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的速度

java theory performance arraylist while-loop

10
推荐指数
1
解决办法
9万
查看次数

在单独的行中显示每个列表元素(控制台)

在这部分代码中:

    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 console newline arraylist

10
推荐指数
1
解决办法
4万
查看次数

为什么ArrayList实现使用Object []?

在Java ArrayList<E>实现基础上的一个对象数组.
任何人都可以解释一下为什么ArrayList<E>使用数组Object[]实现数据存储而不是E[]?使用有什么好处Object[]?

java generics arraylist

10
推荐指数
2
解决办法
627
查看次数

使用自定义VBA类获取迭代器包装.Net ArrayList

我刚刚发现我可以使用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)

.net com vba for-loop arraylist

10
推荐指数
1
解决办法
1221
查看次数

在暴露内部收集物品时是否应使用Iterator或Iterable?

我有一个包含私有可变数据列表的类.

我需要在以下条件下公开列表项:

  • 清单不应在外面修改;
  • 应该清楚使用getter函数的开发人员无法修改他们获得的列表.

应该将哪个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实现的最佳实践的真实代码审查讨论

java iterator iterable arraylist copyonwritearraylist

10
推荐指数
1
解决办法
513
查看次数