我一直在写这行:
Map s_AvailableGameTables = Collection.synchronizedMap(new TreeMap());
Run Code Online (Sandbox Code Playgroud)
并得到以下错误:找不到符号
符号:方法synchronizedMap(java.util.TreeMap)location:interface java.util.Collection
虽然我写了
import java.util.*;
import java.util.TreeMap;
import java.util.Collections;
import java.util.Map;
Run Code Online (Sandbox Code Playgroud)
这是什么原因?
谢谢
我有一个java.util.Treemap[Long, Int]Scala.我需要做的是将Treemap中的值转换为Array [Int].
我可以得到一个Iterator[Int]或Collection[Int]来自TreeMap,但我不知道如何将这些转换为Array[Int].
任何建议,将不胜感激.
通常,当您创建一个对象时,您在前面提供了相同的类型,如:
Scanner scanner = new Scanner(System.in);
Run Code Online (Sandbox Code Playgroud)
但声明一个HashMap对象和TreeMap遵循这样的不同语法.
Map m1 = new HashMap();
SortedMap sm = new TreeMap();
Run Code Online (Sandbox Code Playgroud)
是什么原因?我问我的教授.但他不知道答案.
能够搜索TreeMap<Date, String>诸如此类的密钥的正确方法是NavigableMap<Date, String>什么?我希望在特定月份检查并输出那个月的所有人?
例如,如果它如下所示,我将如何能够搜索所有关键二月份的人?
Date date1 = dateformat.parse("8 January 2013");
Run Code Online (Sandbox Code Playgroud) 我正在从数据库中的表中检索数据并将整行添加到a TreeMap.
我正在使用以下代码:
ArrayList<String> listaValores = new ArrayList();
TreeMap<Integer, ArrayList> tmValores = new TreeMap<>();
Run Code Online (Sandbox Code Playgroud)
(......)
while (rs.next())
{
listaValores.clear();
for(int i=2; i<=ncolunas; i++)
{
listaValores.add(rs.getString(i));
}
tmValores.put(rs.getInt(1), listaValores);
}
Run Code Online (Sandbox Code Playgroud)
我的TreeMap键被很好地插入,但是值总是作为SELECT*FROM Table查询的结果重复为最后一行的值.
所以,如果我的表是:
id | name | last name |
1 | joe | lewis |
2 | mark | spencer |
3 | mike | carter |
4 | duke | melvin |
Run Code Online (Sandbox Code Playgroud)
我的TreeMap包含:
1=> duke, melvin
2=> duke, melvin
3=> duke, melvin
4=> duke, …Run Code Online (Sandbox Code Playgroud) 我有一个相当大的项目(大学的OOP课程):一个学校注册,学生可以看到他们的成绩,教师可以增加成绩等等.
"base"类是一个包含所有使用的类(Java)的单例,例如用户数组,类(如在学校类中)和将classess和教师关联到课程的TreeMap.
我想序列化这个基类(Central),以便保存修改后的数据.问题是我得到了这个例外
java.io.NotSerializableException: liceu.Central$1
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547)
at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:440)
at java.util.TreeMap.writeObject(TreeMap.java:2265)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1495)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
at liceu.Main.main(Main.java:31)
Run Code Online (Sandbox Code Playgroud)
我的所有类都实现了Serializable,它们没有瞬态或静态字段(单例除外,它具有实例变量和getInstance方法作为静态).
因为发布会有很多代码(我会冒着通过在提交之前发布它来使我的作业无效),我试图通过尝试隔离错误来进行概念验证.
public class Central implements Serializable
{
private ArrayList <User> users;
private ArrayList <Class> classess;
private TreeMap <Course, TreeMap <Class, Professor>> reunite;
private static Central instance = null;
private Central()
{
users = new ArrayList<>();
classess = …Run Code Online (Sandbox Code Playgroud) java serialization exception treemap notserializableexception
我有两个TreeMap,我想检查它们是否至少包含一个相同的键(这些键是字符串)。因此,我使用两个循环进行比较:
boolean found = false;
for(String key1 : map1.keySet()){
for(String key2 : map2.keySet()){
if(key1.equals(key2)){
found = true;
break;
}
}
if(found){
break;
}
}
if(found){
someFunction(map1, map2);
}
Run Code Online (Sandbox Code Playgroud)
因为我有500,000个TreeMap(每个约有1000个键),并且我想对照每个地图检查每个地图,所以需要很长时间。有谁知道更快的解决方案?
*编辑:每当我发现两个映射至少有一个相同的键时,我想调用“ someFunction()”方法。我认为在所有案例中> 90%found == false
我对地图有各种疑问:
我一直在阅读API文档,但由于我是初学者,在编程方面我很难理解它.
我知道TreeMap不是线程安全的.我正在尝试将TreeMap与ConcurrentSkipListMap进行比较.我使用的代码如下所示,我想确定我得到的错误是由于TreeMap不是线程安全而不是因为其他一些.
java中java.util.TreeMap.fixAfterInsertion(TreeMap.java:2127)的java.util.TreeMap.rotateLeft(TreeMap.java:2060)中的线程"pool-1-thread-52"java.lang.NullPointerException中的异常. util.TreeMap.put(TreeMap.java:574)位于java.util.concurrent.ThreadPoolExecutor $的java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)的ThreadTestTreeMap $ 1.run(ThreadTestTreeMap.java:39) java.lang.Thread.run上的Worker.run(ThreadPoolExecutor.java:615)(Thread.java:745)
import com.google.common.collect.Ordering;
import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class ThreadTestTreeMap {
public static Map<String, Object> map;
public static int THREADS = 100;
public static long averageTime = 0;
public static void main(String args[]) throws InterruptedException {
for (int i = 0; i < 1; i++) {
map = new TreeMap<>(Ordering.natural());
// map = new ConcurrentSkipListMap<>(Ordering.natural());
long time = System.nanoTime();
ExecutorService service = …Run Code Online (Sandbox Code Playgroud) 编写如下代码是错误的做法吗?我希望能够在我的人员类中存储一封电子邮件,其中还包含电子邮件类型(工作,个人等).我决定使用TreeMap.我知道所有变量都是私有的并使用getter和setter来操作它们是一种好习惯,但是通过直接使用TreeSet方法而不是我自己的Person类来操作我的TreeSet是错误的吗?换句话说,这是一种有效的可接受的方式吗?代码似乎工作正常.
public class Person {
private String firstName;
private String lastName;
private String note;
TreeMap<String, String> phoneNum = new TreeMap<String, String>();
// Assume constructor method contains firstName & lastName and there are
// getters and setters for both
}
public class MainDriver {
public static void main(String[] args) {
Person p1 = new Person("John", "Smith");
p1.phoneNum.put("jsmith@gmail.com", "School");
p1.phoneNum.put("jsmith19@gmail.com", "Personal");
Person p2 = new Person("Sam", "Johnson");
p2.phoneNum.put("samjohn@gmail.com", "Personal");
p2.phoneNum.put("samjohnson", "Work");
System.out.println(p1.phoneNum);
System.out.println(p2.phoneNum);
}
}
Output:
{jbillingham@gmail.com=Personal, jebillingham3@gmail.com=School}
{samsamyoussef=Work, samyou@gmail.com=Personal}
Run Code Online (Sandbox Code Playgroud)