一、常用接口
List( 列表)线性表:
- 和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。
Set(表)也是线性表
- 检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
Map(映射)
- Map(映射)用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以是任何引用类型的数据,但key不能重复。所以通过指定的key就可以取出对应的value。
- List,Set都是继承自Collection接口,Map则不是
二、增删查改
其实集合只是给我们提供了一个对数据进行更加方便的操作的接口而已
思考,其实我们能从几个接口源码中看明白集合到底是怎么进行增删改查的。
public interface List<E> extends Collection<E> {
// 当前List的大小
int size();
// 是否为空
boolean isEmpty();
// 是否包含某个元素
boolean contains(Object o);
// 迭代器
Iterator<E> iterator();
// 转为数组
<T> T[] toArray(T[] a);
// 添加元素
boolean add(E e);
// 删除元素
boolean remove(Object o);
// 是否包含某个集合
boolean containsAll(Collection<?> c);
// 添加某个集合,默认插入到队尾
boolean addAll(Collection<? extends E> c);
// 在某个位置添加某个集合
boolean addAll(int index, Collection<? extends E> c);
// 清空集合
boolean removeAll(Collection<?> c);
// 清空集合
void clear();
// 获取响应下表的元素
E get(int index);
// 设置响应下表的元素
E set(int index, E element);
// 在某下表添加元素
void add(int index, E element);
// 删除某个下标的元素
E remove(int index);
}
// 你会发现set天然没有修改的方法,而且方法与List很类似
public interface Set<E> extends Collection<E> {
int size();
boolean isEmpty();
boolean contains(Object o);
Iterator<E> iterator();
Object[] toArray();
<T> T[] toArray(T[] a);
boolean add(E e);
boolean remove(Object o);
boolean containsAll(Collection<?> c);
boolean addAll(Collection<? extends E> c);
boolean removeAll(Collection<?> c);
void clear();
}
public interface Map<K,V> {
int size();
boolean isEmpty();
boolean containsKey(Object key);
boolean containsValue(Object value);
V get(Object key);
V put(K key, V value);
V remove(Object key);
void putAll(Map<? extends K, ? extends V> m);
void clear();
Set<K> keySet();
Collection<V> values();
Set<Map.Entry<K, V>> entrySet();
}
三、Set和List的区别
List:可重复,有序,数组(ArrayList)或者链表(LinkedList)存储
Set:不可重复,无序,使用map存储,对的,map,Set在继承关系上继承自Iterable这个接口,但是实际上她的底层存储结构是map,这点我们在源码中可知。hashset内部维护了一个hashmap,hashset的构造器其实只是new了一个hashmap();
public HashSet() {
map = new HashMap<>();
}
我们在set中添加一个元素甚至是这个样子的
private static final Object PRESENT = new Object();
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}