Java 是否将添加到集合O(n)?

Java 是否将添加到集合O(n)?,java,c++,data-structures,set,Java,C++,Data Structures,Set,由于集合只能有唯一的值,这是否意味着每次向集合中添加元素时,都必须检查它是否等于该集合中的每个元素,因此是否为O(n) 由于这会使它们比ArrayList慢得多(如果是这样的话),因此您实际使用它们的唯一时间是确保您的元素都是唯一的,或者它们有任何其他优点吗?这取决于您的情况。不同的语言提供不同的实现。甚至java也有两个不同的集合:树集合和哈希集合。添加是一个树集合是O(logn),因为元素已经按顺序排列。这取决于。不同的语言提供不同的实现。甚至java也有两个不同的集合:树集合和哈希集合。添

由于集合只能有唯一的值,这是否意味着每次向集合中添加元素时,都必须检查它是否等于该集合中的每个元素,因此是否为O(n)


由于这会使它们比ArrayList慢得多(如果是这样的话),因此您实际使用它们的唯一时间是确保您的元素都是唯一的,或者它们有任何其他优点吗?

这取决于您的情况。不同的语言提供不同的实现。甚至java也有两个不同的集合:树集合和哈希集合。添加是一个树集合是O(logn),因为元素已经按顺序排列。

这取决于。不同的语言提供不同的实现。甚至java也有两个不同的集合:树集合和哈希集合。添加是一个树集合是O(logn),因为元素已经按顺序排列。

这取决于
集合的实现

C++

A<代码> STD: C++中的SET<代码>通常被实现为一个红黑树,并保证O(log(n))().< /P>的插入复杂性。 set是一个关联容器,它包含一组已排序的Key类型的唯一对象。使用键比较函数Compare进行排序。搜索、删除和插入操作具有对数复杂性

C++11的std::unordered_集的插入复杂性为O(1)()

无序集是一个关联容器,其中包含Key类型的唯一对象集。搜索、插入和删除具有平均恒定的时间复杂度

JAVA 在Java中,向
HashSet
添加元素是O(1)。从:

假定散列函数将元素正确地分散在存储桶中,则此类为基本操作(添加、删除、包含和大小)提供恒定的时间性能

将一个元素插入到
树集合中是O(log(n))

此实现为基本操作(添加、删除和包含)提供了有保证的日志(n)时间开销

可以在中找到实现
Set
的所有类

结论
在大多数情况下,添加到
集合
并不比添加到
数组列表
std::vector
慢。但是,
集合
不一定按插入顺序保留项目。此外,访问集合的某个第n个元素的复杂性比在
ArrayList
std::vector
上执行相同的操作要差。每种方法都有各自的优点和缺点,应相应地加以使用。

这取决于
集合的实现

C++

A<代码> STD: C++中的SET<代码>通常被实现为一个红黑树,并保证O(log(n))().< /P>的插入复杂性。 set是一个关联容器,它包含一组已排序的Key类型的唯一对象。使用键比较函数Compare进行排序。搜索、删除和插入操作具有对数复杂性

C++11的std::unordered_集的插入复杂性为O(1)()

无序集是一个关联容器,其中包含Key类型的唯一对象集。搜索、插入和删除具有平均恒定的时间复杂度

JAVA 在Java中,向
HashSet
添加元素是O(1)。从:

假定散列函数将元素正确地分散在存储桶中,则此类为基本操作(添加、删除、包含和大小)提供恒定的时间性能

将一个元素插入到
树集合中是O(log(n))

此实现为基本操作(添加、删除和包含)提供了有保证的日志(n)时间开销

可以在中找到实现
Set
的所有类

结论
在大多数情况下,添加到
集合
并不比添加到
数组列表
std::vector
慢。但是,
集合
不一定按插入顺序保留项目。此外,访问集合的某个第n个元素的复杂性比在
ArrayList
std::vector
上执行相同的操作要差。每一种方法都有其优缺点,应相应地使用。

< P> C++ >代码> STD::SET/COD>通常作为黑和红树实现。这意味着添加到其中的将是O(logn)


C++ >代码> STD::unOrdEdEdSt/<代码>插入作为哈希表实现,插入为O(1)。

< P> C++ >代码> STD::SET/COD>通常作为黑和红树实现。这意味着添加到其中的将是O(logn)


C++ >代码> STD::unOrdEdEdTys插入是作为哈希表实现的,所以插入是O(1)。

< P>正如其他人所陈述的,集合通常是树O(log)或哈希表O(1)。但是,有一件事您可以确定:没有一个健全的映射实现会有O(n)行为。正如其他人所说,集合通常是树O(logn)或哈希表O(1)。但是,有一件事是可以确定的:没有一个sane map实现会有O(n)行为。您忘记了集合可能不是元素的批量列表;它的排列方式(事实上是这样的)可以使搜索比
O(N)
快得多


您忘记了集合可能不是元素的批量列表;它的排列方式(事实上是这样的)可以使搜索比
O(N)
快得多


你标记了这个java以及C++,所以我将回答两者:

< > > C++ >代码> STD::SET是一个有序容器,可能实现为树。无论实现如何,添加到集合并检查集合中的元素是否保证为O(logn)。对于C++11中新增的
std::unordered_set
,这些操作是O(1)(给定了适当的哈希函数)

在Java
Java.util.Set
中,是一个接口,可以有许多不同的类来实现它们。
   int counter = 0; 
     while (x>y){ 
     counter++; 
     }
Integer counter = 0; 
 while (x>y){ 
 counter++; 
 }
 public int sum (Integer one, Integer two, Integer three){ 
 int sum = one+two+three; 
 return sum; 
 }
public int sum (int one, int two, int three){ 
 int sum = one+two+three;
 return sum; 
 }
 public int sum (Integer one, Integer two, Integer three){ 
 int sum = one+two+three;                                               
 return sum; 
 } 

 int a = 1; int b = 2; int c = 3;                                       

 public int sum (a, b, c){ 
 int sum = a+b+c; 
 return sum; 
 }