我刚接触过藏书,对于这个琐碎的问题我很抱歉,但我一直在思考我在Java教程中读到的一句话:
列表是有序集合(有时称为序列)。
我从中了解到的是,当我将元素放入列表中时,它会自动为我排序,因为我运行了一个简单的代码,它证明了我是错的:
List <String> list = new ArrayList<String>();
list.add("Chris");
list.add("Brian");
list.add("Matt");
list.add("Greg");
for (Iterator
我编写了一个在HashSet...here中插入数据的程序是代码
public class Person implements Comparable<Person>
{
private int person_id;
private String person_name;
public Person(int person_id,String person_name)
{
this.person_id=person_id;
this.person_name=person_name;
}
/* getter
我向列表中添加了对象,但是当我对列表进行排序时,所有的事情都得到了很好的排序;最后只添加了新的对象。有什么想法吗?
这是代码:
// creating object
ScheduleDay sDay = new ScheduleDay();
// all attributes are optional; but even if I add them all, it still isn't sorted
sDay.setDate(dt1.format(cal.getTime()));
// adding to the list
standardShiftItemsPerEmployee.
我使用的是一个ConcurrentSkipListSet,它显然是通过多线程访问的。现在,底层对象的compareTo-method使用的值会超时更改。正因为如此,我想“更新”列表的顺序(通过重新排序,或类似的方式)。
然而,java.util.Collections.sort( list )不能工作,仅仅重建list可能太慢了(而且会搞乱整个并发保护)。有没有其他我应该考虑的解决方案?
它不必导致最佳排序(这对于并发和变化值来说几乎是不可能的)。只要所有的remove/add-call都是线程级的(在排序时重新构建列表时,这将是一个真正的问题),接近最优就足够了。
如果我从同一组中创建了2个列表,那么我能确保在这两个列表中得到相同的排序吗?(只要两个列表都有相同的顺序,我就不关心排序,也不会在创建两个列表之间对集合执行任何操作。)
List l = new ArrayList(set);
List l1 = new ArrayList(set);
我知道有一些方法可以保证可以创建这些列表并获得相同的顺序,而且我没有很好的理由以这种方式创建两个列表,但是我想知道为什么如果不对其执行修改操作,那么集合中元素的排序会发生变化。
编辑:集合是一个无序的HashSet
这只是一段简单的python代码,用于打印一个数字的除数。首先,它检查数字是否可以被(x)除,并将(x)和( number /x)附加到一个空列表中。然后,它对列表进行排序并将其转换为集合(以删除任何重复项)
import math
number = int(input("Enter a number : "))
divisors = list()
for x in range(1, math.ceil(math.sqrt(number))):
if(number%x == 0):
divisors.append(x)
divisors
请参阅从本页解决方案4复制的以下代码-
streams = map(lambda u: ([u+v, u, v] for v in nums2), nums1)
stream = heapq.merge(*streams)
nums2,nums1是数字列表。
为什么heapq.merge在默认情况下对u+v的u+v,u,v列表进行排序?每个生成器中跨不同列表的u+v确实按排序顺序排列(因为nums2和nums1按升序排列),但我不知道heap.merge()是如何在u+v上合并的,u+v是len(nums1)生成器中列表的第一个元素。
假设我有一个数组或一个列表,例如L,如下所示。现在我想从L中挑选出k个最大元素(这里k= 4),这样就没有一个被选中的元素重复。下面的代码完成了最大元素的选择,但需要重复。我要换什么?我尝试过一些带有if-语句的变体,这也是另一个内置的for-循环,但目前无法找到有用的东西。
L = [2,4,4,5,3]
Y = np.zeros(5)
for j in range(4):
for i in range(len(L)):
M = max(L)
if L[i] == M:
Y[i] = M
L[i] =