Tag: 数据结构

什么是“冻结字典”?

冻结集是一个冻结集。 一个冻结的列表可能是一个元组。 冻结字典是什么? 一个不可改变的,可拆分的字典。 我想这可能是像collections.namedtuple ,但更像是一个冻结键字典(半冻结​​字典)。 不是吗? “frozendict”应该是一个冷冻字典,它应该有keys , values , get等等,并支持,等等。

set()如何实现?

我见过有人说在Python中set对象有O(1)成员资格检查。 他们如何实施内部允许这个? 它使用什么样的数据结构? 这个实现有什么其他的影响? 这里的每一个答案都很有启发性,但我只能接受一个,所以我会用最接近的答案去回答我原来的问题。 感谢所有的信息!

Visual C ++相当于GCC的__attribute__((__packed__))

对于一些编译器来说,有一个结构体的包装说明符,例如:: RealView ARM编译器有“__packed” Gnu C编译器有“__attribute__((__packed__))” Visual C ++没有对等的,它只有“#pragma pack(1)” 我需要一些我可以放入结构定义的东西。 任何信息/黑客/build议? TIA …

Java:如何将列表转换为地图

最近我和一位同事进行了一次谈话,谈谈在Java中将List转换为Map的最佳方法是什么,以及这样做有什么特别的好处。 我想知道最佳的转换方法,如果有人能指导我,我会很感激。 这是一个好方法: List<Object[]> results; Map<Integer, String> resultsMap = new HashMap<Integer, String>(); for (Object[] o : results) { resultsMap.put((Integer) o[0], (String) o[1]); }

Firebase数据结构和url

我是Firebase和nosql的新成员,所以请使用引用sql的脚本。 所以我的问题是如何构buildFirebase中的数据? 在firebase中,是指mysql中的每个“新的firebase”=“新的数据库”或“表”? 如果在我的实时networking应用程序,我有用户和评论。 在MySQL中,我将创build一个用户和一个评论表,然后将它们链接在一起。 如何在Firebase中构build这个结构? 谢谢

计算在Java中的对象的大小

我想logging一个对象占用了多less内存(希望是字节)(我正在比较数据结构的大小),似乎没有办法在Java中这样做。 据推测,C / C ++有sizeOf()方法,但这在Java中是不存在的。 我尝试在创build对象之前和之后用Runtime.getRuntime().freeMemory()loggingJVM中的空闲内存,然后logging差异,但它只会给0或131304,而不pipe它们之间的数目是多less元素在结构中。 请帮助!

HashMap获取/放置复杂性

我们习惯于说HashMap get/put操作是O(1)。 但是这取决于哈希实现。 默认对象散列实际上是JVM堆中的内部地址。 我们确定它是否足以说明get/put是O(1)? 可用内存是另一个问题。 正如我从javadocs了解到的, HashMap load factor应该是0.75。 如果我们在JVM中没有足够的内存并且load factor超出限制呢? 所以,看起来O(1)是不能保证的。 这是有道理的,还是我错过了什么?

在C坏习惯中使用灵活的数组成员?

我最近读到,在C中使用灵活的数组成员是糟糕的软件工程实践。 但是,这一说法没有任何论据支持。 这是一个公认的事实吗? ( 灵活的数组成员是C99中引入的一个C特性,可以声明最后一个元素是未指定大小的数组,例如:) struct header { size_t len; unsigned char data[]; };

你将如何在Java中实现一个LRUcaching?

请不要说EHCache或OSCache等。为了这个问题的目的,假设我想使用SDK来实现我自己的(边干边学)。 鉴于caching将在multithreading环境中使用,您将使用哪种数据结构? 我已经实现了一个使用LinkedHashMap和Collections#synchronizedMap ,但我很好奇,如果任何新的并发集合将是更好的候选人。 更新:当我发现这块金块时,我正在阅读Yegge的最新消息 : 如果你需要恒定的访问时间并且想维护插入顺序,那么你不能比LinkedHashMap做得更好,这是一个非常棒的数据结构。 如果有一个并发版本,唯一可能更好的方法是。 可惜。 在我使用上面提到的LinkedHashMap + Collections#synchronizedMap实现之前,我正在考虑几乎完全一样的事情。 很高兴知道我不只是忽略了一些东西。 根据目前的答案,这听起来像是我最好的select,高度并发的LRU将使用LinkedHashMap使用的一些相同的逻辑来扩展ConcurrentHashMap 。

如何仅使用两个指针来反转单向链表?

我会想知道是否存在一些逻辑来扭转链接列表只有两个指针。 以下用于使用三个指针(即p,q,r)来反转单个链表: struct node { int data; struct node *link; }; void reverse() { struct node *p = first, *q = NULL, *r; while (p != NULL) { r = q; q = p; p = p->link; q->link = r; } q = first; } 有没有其他的替代scheme来扭转链表? 就时间复杂性而言,扭转单链表的最佳逻辑是什么?