Tag: 集合

迭代器有.next() – 有没有办法获取前一个元素而不是下一个元素?

我有一个在HashMap上使用的迭代器,我保存并加载迭代器。 有没有办法用Iterator获取HashMap中的上一个键? (java.util.Iterator的) 更新 我将它保存为Red5连接中的属性,然后将其加载以继续工作我停止的地方。 另一个更新 我正在遍历HashMap的键集

在Java中的List中存储不同类型的元素

我正在尝试开发一个通用的表加载器,它在运行时已知模式。 这需要一个包含不同类型元素列表的类,并支持各种get和set方法,如getInt(int index) , asString(int index) , asStringList(int index) 。 我考虑的元素类型是Integer , Double , String和List , List和List 。 每个元素的实际类型在运行时是已知的,我将它们存储在描述其模式的List中以供进一步处理。 我的问题是:我应该在List或List存储这样的元素List List ? 或者有更好的方法来实现这样的类?

Hashmap实现计算每个字符的出现次数

下面的代码是计算每个字符的出现次数,它应该打印计数。 但是我试过的代码我只得到1我不知道我应该做的改变。 请帮帮我。 import java.io.BufferedReader; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; class Count_CharMap { public static void main(String[] args) { try { FileInputStream file = new FileInputStream(“D:\\trial.txt”); DataInputStream dis = new DataInputStream(file); BufferedReader br = new BufferedReader(new InputStreamReader(dis)); String Contents=””; String str=””; while ((Contents = br.readLine()) != null) { […]

如何将inheritance对象列表转换为Java中的对象集合?

我有一个集合类型: Collection collecA 我的对象中有一个列表: List listB B在哪里延伸A. class B extends A { … } 但我无法做到以下几点: collecA = listB 我无法理解为什么Collection是由List实现的。

Java:如何在迭代/添加元素时从列表中删除元素

这个问题是这个问题中描述(和解决)问题的一个更特殊的例子。 我有两个方法,stopAndRemove(ServerObject服务器)和close()方法。 后者应关闭所有服务器并将其从服务器列表中删除。 该列表定义为 List server. 我不想在closeCurrentlyOpen中使用stopAndRemove中的几乎相同的代码,所以我想做类似的事情: public void closeCurrentlyOpen() { for(ServerObject server : this.servers) { stopAndRemove(server) } } 这将不起作用,因为这将导致ConcurrentModificationException。 我试着复制一份清单 List copyList = new ArrayList(this.servers); 并将其用作foreach循环的列表。 但是,当我在copyList上迭代时,另一个线程可能会将服务器附加到服务器列表,但closeCurrentlyOpen应该会产生一个emtpy列表。 当addServerToList方法同步到servers-list时,执行此操作 public void closeCurrentlyOpen() { synchronized(this.servers) { for(ServerObject server : this.servers) { stopAndRemove(server) } } } 将通过修改解决问题。 但是后来我无法在stopAndRemove方法中同步代码,如果直接调用它是必需的。 在我看来,这三种方法的设计可能需要修改。 任何人的想法?

CopyOnWriteArrayList抛出CurrentModificationException

当我遍历列表时,我偶尔会得到一个ConcurrentModificationException 。 谷歌搜索告诉我,这可能是因为我在迭代它时在另一个线程中改变该列表并且为了使这个问题消失我应该使用java.util.concurrent.CopyOnWriteArrayList …. ……除了我已经是。 显然,我正在做一些非常愚蠢的事情。 有没有人知道如何诱使CopyOnWriteArrayList抛出ConcurrentModificationException ? 如果重要,我正在使用Java 5。 编辑:由于我正在使用的mutators可能很重要,我正在以两种方式修改此列表: 在前面添加元素。 ( list.add(0, newElement); ) 使用subList让旧项目脱落。 ( list = list.subList(0, MAX_LIST_SIZE); ) 那些举起红旗吗? 如果是这样,为什么? 我的理解是,因为这些操作首先复制了这个东西,所以任何现有的迭代器都会指向未经修改的原始文件,因此不关心。 我的知识是否有漏洞? 编辑2:导致问题的确切代码仍然有点模糊,但我至少可以发布我看到的exception: java.util.ConcurrentModificationException at java.util.concurrent.CopyOnWriteArrayList$COWSubList.checkForComodification(Unknown Source) at java.util.concurrent.CopyOnWriteArrayList$COWSubList.iterator(Unknown Source) at…. …它指向我的代码中的for-each循环实例化。 那个COWSubList似乎暗示我对subList调用是我问题的根源; 我还是想明白为什么。 编辑3: * facepalm * CopyOnWriteArrayList.subList()返回List , 而不是 CopyOnWriteArrayList 。 它返回的清单没有提供任何COWAL保护的隐含义务。 这使得使用像这样的subList()来删除一个非常不好的想法。 不确定这是否是我的罪魁祸首,但它是可疑的,无论如何都需要纠正。

如何使用Javareflection检查给定的类是实现Iterable

我有一个特定的目标类型(在运行时决定),以及一个可迭代的类,我正在与它进行比较。 我正在尝试编写一个检查类的generics参数的方法,以查看它是否是可以迭代我的目标类型的子类。 例子: Class X = SomeObject.class; matches(X, new ArrayList()) -> true matches(X, new ArrayList()) -> true matches(X, new ArrayList()) -> false matches(X, new ArrayList()) -> true (I think?) matches(X, new Iterable() { … }) -> true matches(X, new ListOfSomeObjects()) -> true (where ListOfSomeObjects extends Iterable)

如何在Java中获取ArrayList的容量?

众所周知,Java ArrayList是使用数组实现的,初始化容量为10,并且其大小增加了50%。 如何获取当前ArrayList容量而不是ArrayList的Size。 谢谢

java.util.Hashtable线程安全吗?

已经有一段时间了,因为我已经将哈希表用于任何重要的事情,但我似乎记得get()和put()方法是同步的。 JavaDocs没有反映这一点。 他们只是说Hashtable类是同步的。 我能假设什么? 如果多个线程同时访问哈希表(假设它们没有修改相同的条目),则操作将成功,对吧? 我想我要问的是“java.util.Hashtable线程安全吗?” 请指导我摆脱这个问题……

为什么多态不以同样的方式处理generics集合和普通数组?

假设类Dog扩展类Animal:为什么不允许这种多态语句: List myList = new ArrayList(); 但是,它允许使用普通数组: Animal[] x=new Dog[3];