由于我正在研究时间复杂性,我一直在搜索oracle Java类库,以了解列表,地图和类中使用的一些标准方法的时间复杂性.(更具体地说,ArrayList,HashSet和HashMap)
现在,在查看HashMap javadoc页面时,他们只是真正谈论get()
和put()
方法.
我仍然需要知道的方法是:
remove(Object o)
size()
values()
Run Code Online (Sandbox Code Playgroud)
我认为这remove()
将是相同的复杂性get()
,O(1)
假设我们没有以相同散列码,等等等等,一个巨大的HashMap ...
因为size()
我也假设O(1)
,因为HashSet也没有顺序,所以有一个size()
复杂的方法O(1)
.
我不知道的是values()
- 我不确定这个方法是否会以某种方式"复制"HashMap,给出时间复杂度O(1)
,或者是否必须迭代HashMap,使复杂性等于数量存储在HashMap中的元素.
谢谢.
这更多的是语言设计而不是编程问题.
以下是JLS 15.19移位运算符的摘录:
如果左手操作数的提升类型是
int
,则只使用右手操作数的五个最低位作为移位距离.如果左侧操作数的提升类型是
long
,则只使用右侧操作数的六个最低位作为移位距离.
这种行为也在C#中指定,虽然我不确定它是否在Javascript的官方规范中(如果有的话),但至少基于我自己的测试也是如此.
结果是以下情况属实:
(1 << 32) == 1
Run Code Online (Sandbox Code Playgroud)
据我所知,这个规范很可能受到以下事实的启发:当移位32位值(64位为6位)时,底层硬件只占用计数操作数的5位,我可以理解在例如,JVM级别,但为什么高级语言(如C#和Java)会保留这种相当低级别的行为?它们不应该提供超出硬件实现的更抽象的视图,并且行为更直观吗?(如果他们可以采取负数来表示向其他方向转移,那就更好了!)
当我在现有版本上安装apk时,我的应用程序抛出异常.
这些是重现我的错误的步骤:
这是例外:
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.empystudio.cashflow/com.empystudio.cashflow.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
at android.app.ActivityThread.access$600(ActivityThread.java:130)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.empystudio.cashflow.MainActivity.onCreate(MainActivity.java:66)
at android.app.Activity.performCreate(Activity.java:5008)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
... 11 more
Run Code Online (Sandbox Code Playgroud)
这是MainActivity的代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
documentsView = (ImageView) findViewById(R.id.documents_view);
backupView = (ImageView) findViewById(R.id.backup_view);
restoreView = (ImageView) findViewById(R.id.restore_view);
helpView = (ImageView) findViewById(R.id.help_view); …
Run Code Online (Sandbox Code Playgroud) 到目前为止,我有这个代码来创建16位掩码.但是我不知道如何使用这种方法创建32位掩码.有任何想法吗?
编辑:我想创建32个32位掩码,每个掩码的各自位为1,其余位为零.例如:掩码1的最左位为1而其余位为零,掩码2的最左边的位为1而其余位为零.我不知道如何更简洁地解释,但我希望你们能得到这个想法......
mask = new int[16];
mask[0] = 0x8000;
mask[1] = 0x4000;
mask[2] = 0x2000;
mask[3] = 0x1000;
mask[4] = 0x0800;
mask[5] = 0x0400;
mask[6] = 0x0200;
mask[7] = 0x0100;
mask[8] = 0x0080;
mask[9] = 0x0040;
mask[10] = 0x0020;
mask[11] = 0x0010;
mask[12] = 0x0008;
mask[13] = 0x0004;
mask[14] = 0x0002;
mask[15] = 0x0001
Run Code Online (Sandbox Code Playgroud) REST设计中常见的是允许返回部分资源.在这种情况下; 我想允许用户仅指定在该资源的JSON表示中返回的资源的某些字段.
例如,假设我们有一个资源Person:
{
"id": 12,
"name":{
"first":"Angie",
"last": "Smith",
"middle": "joy",
"maiden": "crowly",
},
"address": {
"street": "1122 Something St.",
..and so on...
},
... and so on
}
Run Code Online (Sandbox Code Playgroud)
让我们说params列表很长.并且假设我有一个API消费者,他在创建API设计之初只想要一些像id和name.first这样的字段.我假设允许这样的事情是很常见的:
/人?场= ID,名字
字段说我只想要那些字段.
我的问题是,Person资源应该返回所有带空值的字段,只返回那些带有值OR的字段,它应该只返回带有字段id和name的Person表示,并且你从后端动态地删除所有其他params.
似乎#2更清晰,但在REST中执行此操作是否有意义,或者人们通常是否返回所有其他字段(以确保我们将结构/模式的表示保持一致/可靠)与空值?
我以前在Java(不是Javascript)中使用过位掩码,但是已经有一段时间了,这让我很烦。
这是我要使用的打字稿。有3个角色,
enum Type {
FRUIT = 0x1,
VEGGIE = 0x2,
BOTH = FRUIT | VEGGIE
}
class Thing {
role:number;
constructor(role:Type){
this.role = role;
}
getRole(){
return this.role;
}
is(role:Type) {
return !!(this.role & role);
}
}
var whatever = new Thing(Type.FRUIT);
console.log('fruit', whatever.is(Type.FRUIT));
console.log('veggie', whatever.is(Type.VEGGIE));
console.log('both', whatever.is(Type.BOTH));
// fruit true
// veggie false
// both true
Run Code Online (Sandbox Code Playgroud)
我从概念上了解了为什么“两个”又返回“真实”,但是我的数学并不好。
当角色为FRUIT
或时VEGGIE
,其他角色为false。设置为时BOTH
,所有设置都应为true。
尝试了一些移位和位运算的组合,但我无法获得该输出。如果我尝试将它们分开,那很好,但是我想使用位组合来构建。