Java 对于带集合的循环,是否为O(n)?

Java 对于带集合的循环,是否为O(n)?,java,big-o,Java,Big O,我有一个循环: public void method(int[] arr) { Set set = new HashSet(); for(int i = 0; i < arr.length; i++){ set.add(arr[i]); } } 公共作废方法(int[]arr){ Set=newhashset(); 对于(int i=0;i

我有一个循环:

public void method(int[] arr) {
    Set set = new HashSet();

    for(int i = 0; i < arr.length; i++){
        set.add(arr[i]);
    }
}
公共作废方法(int[]arr){
Set=newhashset();
对于(int i=0;i

此方法是否为O(n)?

如果使用哈希集,
HashSet
具有
O(1)
并使用for循环将其与
O(n)
相乘。因此,整个构造具有
O(n)
HashSet
具有近似线性的插入性能,因此是的:n这样的操作将是O(n)

请注意,我将改为这样做,这将获得与所有代码完全相同的结果:

Set<Integer> set = new HashSet<Integer>(Arrays.asList(arr));
Set Set=newhashset(Arrays.asList(arr));

你也应该输入你的集合,如上所述。

据我所知,HashSet在添加时是常数时间,那么是的,它是O(n)。但是
Set
的大小是一,我同意键入
集合。
你是什么意思?此代码完全实现了代码的功能。不,在我的代码中,[1,2,3]
set
的大小为3。但是你的代码大小总是一个!我已经很久没有使用非类型列表了。。。你需要键入它-无论如何,你应该这样做。请参阅已编辑的答案。您发布的代码将无法编译,因为
Arrays.asList
对基元数组无效。(它将把参数放入一个
int[][]
中,并返回一个
列表
,该列表将与
哈希集
不兼容)。