Java 是否有解决此错误的方法…类型集合中的synchronizedSet(Set<;T>;,Object)方法不可见
我正在实现我在上找到的哈希表功能 我逐字逐句地输入了整个源代码。但是,Eclipse给了我三个错误:Java 是否有解决此错误的方法…类型集合中的synchronizedSet(Set<;T>;,Object)方法不可见,java,set,hashtable,Java,Set,Hashtable,我正在实现我在上找到的哈希表功能 我逐字逐句地输入了整个源代码。但是,Eclipse给了我三个错误: 类型集合中的synchronizedSet(Set,Object)方法不可见 来自类型集合的synchronizedCollection(集合,对象)方法不可见 再次调用synchronizedSet()时出现重复错误 以下是错误所在的代码: public Set<K> keySet(){ if (keySet == null) keySet = Colle
类型集合中的synchronizedSet(Set,Object)方法不可见
来自类型集合的synchronizedCollection(集合,对象)方法不可见
再次调用synchronizedSet()时出现重复错误
public Set<K> keySet(){
if (keySet == null)
keySet = Collections.synchronizedSet(new KeySet(), this);
return keySet;
}
private class KeySet extends AbstractSet<K> {
public Iterator<K> iterator(){
return getIterator(KEYS);
}
public int size(){
return count;
}
public boolean contains(Object o){
return containsKey(o);
}
public boolean remove(Object o){
return HashTable.this.remove(o) != null;
}
public void clear(){
HashTable.this.clear();
}
}
public Set<Map.Entry<K, V>> entrySet(){
if (entrySet == null)
entrySet = Collections.synchronizedSet(new EntrySet(), this);
return entrySet;
}
private class EntrySet extends AbstractSet<Map.Entry<K, V>> {
public Iterator<Map.Entry<K,V>> iterator(){
return getIterator(ENTRIES);
}
public boolean add(Map.Entry<K,V> o) {
return super.add(o);
}
public boolean contains(Object o){
if (!(o instanceof Map.Entry))
return false;
Map.Entry entry = (Map.Entry)o;
Object key = entry.getKey();
Entry[] tab = table;
int hash = key.hashCode();
int index = (hash & 0x7FFFFFF) % tab.length;
for (Entry e = tab[index]; e != null; e = e.next)
if (e.hash == hash && e.equals(entry))
return true;
return false;
}
public boolean remove(Object o){
if (!(o instanceof Map.Entry))
return false;
Map.Entry<K,V> entry = (Map.Entry<K,V>) o;
K key = entry.getKey();
Entry[] tab = table;
int hash = key.hashCode();
int index = (hash & 0x7FFFFFF) % tab.length;
for (Entry<K, V> e = tab[index], prev = null; e != null; prev = e, e = e.next){
if (e.hash == hash && e.equals(entry)){
modCount++;
if (prev != null)
prev.next = e.next;
else
tab[index] = e.next;
count--;
e.value = null;
return true;
}
}
return false;
}
public int size(){
return count;
}
public void clear(){
HashTable.this.clear();
}
}
public Collection<V> values(){
if (values == null)
values = Collections.synchronizedCollection(new ValueCollection(), this);
return values;
}
公共设置键集(){
如果(键集==null)
keySet=Collections.synchronizedSet(newkeyset(),this);
返回键集;
}
私有类键集扩展了抽象集{
公共迭代器迭代器(){
返回getIterator(键);
}
公共整数大小(){
返回计数;
}
公共布尔包含(对象o){
返回集装箱箱(o);
}
公共布尔删除(对象o){
返回哈希表。this.remove(o)!=null;
}
公共空间清除(){
HashTable.this.clear();
}
}
公共集入口集(){
if(entrySet==null)
entrySet=Collections.synchronizedSet(新entrySet(),this);
返回入口集;
}
私有类入口集扩展了抽象集{
公共迭代器迭代器(){
返回getIterator(条目);
}
公共布尔添加(Map.Entry o){
返回super.add(o);
}
公共布尔包含(对象o){
如果(!(映射项的实例))
返回false;
Map.Entry=(Map.Entry)o;
Object key=entry.getKey();
条目[]选项卡=表格;
int hash=key.hashCode();
int index=(散列&0x7FFFFFF)%tab.length;
for(条目e=tab[index];e!=null;e=e.next)
如果(e.hash==hash&&e.equals(条目))
返回true;
返回false;
}
公共布尔删除(对象o){
如果(!(映射项的实例))
返回false;
Map.Entry=(Map.Entry)o;
K key=entry.getKey();
条目[]选项卡=表格;
int hash=key.hashCode();
int index=(散列&0x7FFFFFF)%tab.length;
对于(条目e=tab[index],prev=null;e!=null;prev=e,e=e.next){
如果(e.hash==hash&&e.equals(条目)){
modCount++;
如果(上一个!=null)
prev.next=e.next;
其他的
tab[index]=e.next;
计数--;
e、 值=空;
返回true;
}
}
返回false;
}
公共整数大小(){
返回计数;
}
公共空间清除(){
HashTable.this.clear();
}
}
公共集合值(){
如果(值==null)
values=Collections.synchronizedCollection(newvalueCollection(),this);
返回值;
}
我已经研究了
集合
源代码以及集合
源代码,并且在我的一生中找到了解决方案 synchronizedCollection和synchronizedSet
的两个参数版本是包私有方法,只能从java.util
包中的类访问。您链接到的grepcode.com
源代码是Hashtable
的源代码,它是java.util
包的一部分,因此可以使用这些方法。但你不能
我唯一能建议的就是查看
集合
源代码,看看它们是如何实现的,然后尝试做类似的事情。两个参数版本的synchronizedCollection
和synchronizedSet
是包私有方法,只能从java.util
包中的类访问。您链接到的grepcode.com
源代码是Hashtable
的源代码,它是java.util
包的一部分,因此可以使用这些方法。但你不能
我唯一能建议的就是查看
集合
源代码,看看它们是如何实现的,然后尝试做类似的事情。两个参数版本的synchronizedCollection
和synchronizedSet
是包私有方法,只能从java.util
包中的类访问。您链接到的grepcode.com
源代码是Hashtable
的源代码,它是java.util
包的一部分,因此可以使用这些方法。但你不能
我唯一能建议的就是查看
集合
源代码,看看它们是如何实现的,然后尝试做类似的事情。两个参数版本的synchronizedCollection
和synchronizedSet
是包私有方法,只能从java.util
包中的类访问。您链接到的grepcode.com
源代码是Hashtable
的源代码,它是java.util
包的一部分,因此可以使用这些方法。但你不能
我唯一能建议的就是查看
集合
源代码,看看它们是如何实现的,并尝试做一些类似的事情。谢谢您为我指明了正确的方向。非常有帮助!我想如果你真的想的话,你可以用反思来调用它们。谢谢你为我指明了正确的方向。非常有帮助!我想如果你真的想的话,你可以用反思来调用它们。谢谢你为我指明了正确的方向。非常有帮助!我想如果你真的想的话,你可以用反思来调用它们。谢谢你为我指明了正确的方向。非常有帮助!我想如果你真的想的话,你可以用反射来调用它们。