面试题:总结Iterator,Collection,Set,Map和他们之间的关系
容器(Collection)是什么?
实现Iterable<T>接口
public class RandomStringGenerator<T> implements Iterable<T> {
private final List<T> list;
public RandomStringGenerator(List<T> list) {
this.list = list;
}
@Override
public Iterator<T> iterator() {
return new Iterator<T>() {
@Override
public boolean hasNext() {
return true;
}
@Override
public T next() {
return list.get((int) (list.size() * Math.random()));
}
};
}
public static void main(String[] argv) {
var list = Arrays.asList("List", "Tree", "Array");
var gen = new RandomStringGenerator<String>(list);
for(var s: gen) {
System.out.println(s);
}
}
}
容器(Collection)接口
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializ
public interface List<E> extends Collection<E>
集合(Set)
映射(Map)
Map是不是Entry的容器?
Map.Entry<K,V>接口
private static class Entry<K,V> implements Map.Entry<K,V> {
final int hash;
final K key;
V value;
Entry<K,V> next;
protected Entry(int hash, K key, V value, Entry<K,V> next) {
this.hash = hash;
this.key = key;
this.value = value;
this.next = next;
}
@SuppressWarnings("unchecked")
protected Object clone() {
return new Entry<>(hash, key, value,
(next==null ? null : (Entry<K,V>) next.clone()));
}
public K getKey() {
return key;
}
public V getValue() {
return value;
}
public V setValue(V value) {
if (value == null)
throw new NullPointerException();
V oldValue = this.value;
this.value = value;
return oldValue;
}
public boolean equals(Object o) {
if (!(o instanceof Map.Entry))
return false;
Map.Entry<?,?> e = (Map.Entry<?,?>)o;
return (key==null ? e.getKey()==null : key.equals(e.getKey())) &&
(value==null ? e.getValue()==null : value.equals(e.getValue()));
}
Map<K,V>的接口
Map的实现
- TreeMap是基于树的实现
- ConcurrentSkipListMap是基于跳表的实现
- EnumMap是基于位运算的实现
HashMap vs Hashtable
- HashMap允许null key/null value;
- Hashtable不允许null key/null value
总结
原文地址:https://blog.csdn.net/lichongxyz/article/details/135620850
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!