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