HashSet基于HashMap.
如果我们看一下HashSet<E>
实现,一切都在管理之下HashMap<E,Object>
.
<E>
被用作关键词HashMap
.
我们知道这HashMap
不是线程安全的.这就是我们ConcurrentHashMap
在Java中的原因.
基于此,我很困惑,为什么我们没有一个应该基于的ConcurrentHashSet ConcurrentHashMap
?
还有什么我想念的吗?我需要Set
在多线程环境中使用.
另外,如果我想创建我自己的ConcurrentHashSet
,我可以通过替换HashMap
to来实现它,ConcurrentHashMap
并将其余部分保留原样?
我是Java编程的新手,试图掌握OOP.
所以我构建了这个抽象类:
public abstract class Vehicle{....}
Run Code Online (Sandbox Code Playgroud)
和2个子类:
public class Car extends Vehicle{....}
public class Boat extends Vehicle{....}
Run Code Online (Sandbox Code Playgroud)
Car
并且Boat
还包含一些不常见的唯一字段和方法(不具有相同的名称,因此我无法在Vehicle中为它们定义抽象方法).
现在在mainClass我设置了我的新车库:
Vehicle[] myGarage= new Vehicle[10];
myGarage[0]=new Car(2,true);
myGarage[1]=new Boat(4,600);
Run Code Online (Sandbox Code Playgroud)
在我尝试访问Car独有的一个字段之前,我对多态性非常满意,例如:
boolean carIsAutomatic = myGarage[0].auto;
Run Code Online (Sandbox Code Playgroud)
编译器不接受.我使用cast来解决这个问题:
boolean carIsAutomatic = ((Car)myGarage[0]).auto;
Run Code Online (Sandbox Code Playgroud)
这有效......但它对方法没有帮助,只是字段.意思是我做不到
(Car)myGarage[0].doSomeCarStuff();
Run Code Online (Sandbox Code Playgroud)
所以我的问题是 - 我的车库里到底有什么?我试图获得直觉以及了解"幕后"发生了什么.
为了将来的读者,请简要总结以下答案:
Car
在myGarage[]
Vehicle myGarage[]
)为什么更多主流的静态类型语言不支持返回类型的函数/方法重载?我想不出那样做.通过参数类型支持过载似乎没有那么有用或合理.怎么这么不受欢迎呢?
programming-languages overloading language-design function-calls
两个具有相同方法名称和签名的接口.但是由单个类实现,那么编译器将如何识别哪个接口的方法是什么?
例如:
interface A{
int f();
}
interface B{
int f();
}
class Test implements A, B{
public static void main(String... args) throws Exception{
}
@Override
public int f() { // from which interface A or B
return 0;
}
}
Run Code Online (Sandbox Code Playgroud) 我在.NET中有一个字符串,实际上是一个网址.我想要一种简单的方法来从特定参数中获取值.
通常,我只是使用Request.Params["theThingIWant"]
,但这个字符串不是来自请求.我可以Uri
像这样创建一个新项目:
Uri myUri = new Uri(TheStringUrlIWantMyValueFrom);
Run Code Online (Sandbox Code Playgroud)
我可以myUri.Query
用来获取查询字符串......但是我显然必须找到一些分解它的regexy方法.
我是否遗漏了一些明显的东西,或者没有内置的方法来创建某种类型的正则表达式等等?
作为一个例子,我正在寻找一个mod_files.sh
大概附带php-devel
包的文件.我猜想yum
会mod_files.sh
用php-devel x86_64 5.1.6-23.2.el5_3
软件包安装文件,但文件似乎没有安装在我的文件系统上.
如何找出安装特定文件的软件包?我正在寻找我不一定已经在本地下载的软件包,其中可能包含我正在寻找的文件.
我正在使用CentOS 5.
考虑一个例子(在java中编译)
public abstract interface Interface {
public void interfacing();
public abstract boolean interfacing(boolean really);
}
Run Code Online (Sandbox Code Playgroud)
为什么接口被"声明"抽象是必要的?是否有适用于抽象接口的其他规则?
最后:如果abstract
已经过时,为什么它包含在Java中?抽象界面有历史吗?
我有一个小的疯狂方法,将BigDecimal值转换为漂亮可读的字符串.
private String formatBigDecimal(BigDecimal bd){
DecimalFormat df = new DecimalFormat();
df.setMinimumFractionDigits(3);
df.setMaximumFractionDigits(3);
df.setMinimumIntegerDigits(1);
df.setMaximumIntegerDigits(3);
df.setGroupingSize(20);
return df.format(bd);
}
Run Code Online (Sandbox Code Playgroud)
然而,它还产生了一个所谓的分组分隔符","
,它使我的所有值都出现如下:
xxx,xxx
Run Code Online (Sandbox Code Playgroud)
我确实需要分隔符是点或点而不是逗号.有没有人知道如何完成这个小壮举?
我已阅读本,尤其是这个,现在死,但我无法找到一个方法来完成这件事.我是以错误的方式接近这个吗?这样做有更优雅的方式吗?甚至可能是一个解决不同本地数字表示的解决方案,因为逗号将完全符合欧洲标准.
java ×5
android ×2
interface ×2
.net ×1
abstract ×1
bigdecimal ×1
c# ×1
centos ×1
collections ×1
concurrency ×1
hashmap ×1
hashset ×1
inheritance ×1
overloading ×1
overriding ×1
parameters ×1
parsing ×1
rpm ×1
url ×1
vi ×1
vim ×1
yum ×1