小编tem*_*def的帖子

为什么Java构造函数不能同步?

根据Java语言规范,构造函数不能被标记为同步,因为在创建它的线程完成之前,其他线程无法看到正在创建的对象.这看起来有点奇怪,因为在构造对象时我确实可以有另一个线程查看对象:

public class Test {
    public Test() {
       final Test me = this;
       new Thread() {
           @Override
           public void run() {
               // ... Reference 'me,' the object being constructed
           }
       }.start();
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道这是一个非常人为的例子,但理论上似乎有人可以提出一个更现实的案例,标记构造函数同步将是合法的,以防止像这样的线程的比赛.

我的问题是:Java有没有理由不在构造函数上禁用synchronized修饰符?也许我上面的例子是有缺陷的,或者也许没有理由,这是一个任意的设计决定.在任何一种情况下,我都很好奇,很想知道答案.

java constructor language-design synchronized

63
推荐指数
5
解决办法
3万
查看次数

具有n个节点的有向图中的最大边数是多少?

具有n个节点的有向图中的最大边数是多少?有上限吗?

algorithm math graph max

63
推荐指数
6
解决办法
11万
查看次数

实现字典的最佳数据结构?

存储字典所有单词的最佳数据结构是什么?我能想到的最好的就是使用a HashMap,它将映射到a HashTable.基本上,根据第一个字符,我们将得到关联HashTable,然后使用它,我们可以添加从该字符开始的单词.然后我们将根据字符串选择一个好的哈希函数.

有更好的方法吗?

string algorithm dictionary data-structures

63
推荐指数
1
解决办法
7万
查看次数

Fibonacci堆数据结构背后的直觉是什么?

我已经阅读了有关Fibonacci堆维基百科文章,并阅读了CLRS对数据结构的描述,但它们对于这种数据结构的工作原理几乎没有直觉.为什么Fibonacci堆的设计方式如何呢?他们是如何工作的?

谢谢!

data-structures fibonacci-heap

63
推荐指数
1
解决办法
1万
查看次数

如何识别语法是LL(1),LR(0)还是SLR(1)?

如何识别语法是LL(1),LR(0)还是SLR(1)?

任何人都可以使用此示例或任何其他示例来解释它吗?

X→Yz | 一个

Y→bZ | ε

Z→ε

grammar parsing ll-grammar lr-grammar

61
推荐指数
3
解决办法
8万
查看次数

构造函数中的无限循环,不带或不带

我在这里做了一个测试,但输出是一个没有结束的循环,我不知道为什么.

实际上,我正在做另一个测试,但是当我写这个时,我不明白循环是如何发生的.它反复输出"ABC".

#include <map>
#include <string>
#include <iostream>

class test
{
public:
   std::map <int, int> _b;
   test();
   test (std::map<int, int> & im);
   ~test();
   };

test::test()
{
  std::cout<<"abc";
  _b.clear();
  _b[1]=1;
  test(_b);
}

test::test(std::map <int, int>& im)
{
   std::cout<<im[1];
}

test::~test() {};

int main ()
{
   test a;  
}
Run Code Online (Sandbox Code Playgroud)

c++ recursion constructor const

61
推荐指数
1
解决办法
3905
查看次数

一个检测未定义行为的C++实现?

C++中的大量操作会导致未定义的行为,其中规范完全静音程序的行为应该是什么,并允许任何事情发生.因此,有各种各样的情况,人们有代码在调试但不是发布模式编译,或者直到看似无关的更改,或者在一台机器而不是另一台机器上工作,等等.

我的问题是是否有一个实用程序查看C++代码的执行并标记程序调用未定义行为的所有实例.虽然我们有很好的工具,比如valgrind和检查过的STL实现,但这些并不像我想的那么强 - 例如,如果你丢弃了你仍然分配的内存,那么valgrind会有误报,并且检查了STL实现不会通过基类指针捕获删除.

这个工具存在吗?或者让它躺在身边甚至是有用的?

编辑:我知道一般来说静态检查C++程序是否可能执行具有未定义行为的东西是不可判定的.但是,可以确定C++ 的特定执行是否产生了未定义的行为.实现此目的的一种方法是创建一个C++解释器,根据规范中列出的定义逐步执行代码,在每个点确定代码是否具有未定义的行为.这不会检测特定程序执行中未发生的未定义行为,但会发现任何实际在程序中显示的未定义行为.这与图灵识别如何确定TM是否接受某些输入有关,即使它通常仍然是不可判定的.

谢谢!

c++ undefined-behavior

59
推荐指数
5
解决办法
6296
查看次数

在C++中从map获取第一个值

map在C++中使用.假设我有10个值map,我只想要第一个.我怎么得到它?

谢谢.

c++ map

57
推荐指数
4
解决办法
8万
查看次数

为什么声明一个函数参数是最终的?

我目前正在通过Sams出版的"24小时自学Android应用程序开发"一书.我对Java,Android或其他方面比较陌生.我在ActionScript 3中有一个非常扎实的背景,它与Java有足够的相似之处,语言本身并不难理解,但我仍然对本书中某些代码示例背后的基本原理有一些疑问.例如,这是第9小时的示例代码附带的函数:

private void processScores(final TableLayout scoreTable, 
      XmlResourceParser scores) throws IOException, XmlPullParserException{
Run Code Online (Sandbox Code Playgroud)

在此函数签名中,作者已将scoreTable参数声明为final.我有点不解为什么他们这样做了.即使尝试为函数参数scoreTable分配一个新值,也不会让我想到这一点(在ActionScript中它被认为是一种不好的做法).此外,我还没有看到任何人在我检查或移植到AS3中的任何真实Java中都这样做.

有没有关于Android开发的具体内容,有时需要将某些函数参数声明为final?

为什么TableLayout对象声明为final,而不是XmlResourceParser?

java android final

56
推荐指数
1
解决办法
3万
查看次数

LL(1),LR(1),LR(0),LALR(1)语法的例子?

对于一些主要的解析算法(LL(1),LR(1),LR(0),LALR(1)),是否有一个很好的在线资源和一组语法?我发现许多单独的语法属于这些家庭,但我知道没有好的资源,有人编写了大量的示例语法.

有谁知道这样的资源?

grammar parsing lalr ll-grammar lr-grammar

56
推荐指数
2
解决办法
5万
查看次数