Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java不安全操作_Java_Vector_Maps_Unsafe - Fatal编程技术网

Java不安全操作

Java不安全操作,java,vector,maps,unsafe,Java,Vector,Maps,Unsafe,在编译一小段java代码时,我会注意到有不安全的操作。我基本上只是希望有一个概念,即如何改变我的数据结构,使其安全 概念:我需要根据输入字符串的长度将其组织到bucket中,长度可以是任意的(尽管小于80个字符) 守则: Map<Integer, List> buckets = new HashMap<Integer, List>(); if(!buckets.containsKey(length)) {

在编译一小段java代码时,我会注意到有不安全的操作。我基本上只是希望有一个概念,即如何改变我的数据结构,使其安全

概念:我需要根据输入字符串的长度将其组织到bucket中,长度可以是任意的(尽管小于80个字符)

守则:

Map<Integer, List> buckets = new HashMap<Integer, List>();
            if(!buckets.containsKey(length))
            {
                buckets.put(length,new Vector<wordValues>());
            }
            //Now add the temp to the bucket
            buckets.get(length).add(new wordValues(temp));
Map bucket=newhashmap();
如果(!bucket.containsKey(长度))
{
bucket.put(长度,新向量());
}
//现在将温度添加到桶中
bucket.get(length.add(newwordvalues(temp));
然后我将字符串添加到与其大小对应的列表中


有什么更好的方法可以做到这一点呢?

若要混合原始药和仿制药列表,请尝试:

Map<Integer, List<wordValues>> buckets = new HashMap<Integer, List<wordValues>>();
Map bucket=newhashmap();

另外,类名通常以大写开头,例如
WordValues

问题是您使用的是
列表
,而不是参数化的
列表
。 Oracle中广泛地介绍了泛型

  • Java7支持类型参数推断,这可以显著减轻您的负担。请注意,上面我不必键入
    HashMap
    ;相反,我只是利用新的菱形操作符键入了
    HashMap
  • 避免使用以小写字符开头的类名;这通常是很难理解的(而且是违反规则的)。考虑命名类“代码> WordValue<代码>,而不是<代码> WordValue/Cux>

  • 看看这个答案:
    为什么包含skey
    get
    Map<Integer, List<WordValues>> buckets = new HashMap<>();
    ...
    List<WordValues> values = buckets.get(length);
    if (values == null) {
      values = buckets.put(length, new ArrayList<WordValues>());
    }
    values.add(new WordValues(temp));
    
    Collections.synchronizedList(new ArrayList<WordValues>())