一、AarrayList集合:
AarrayList<E>:存在多个同一类型的数据
ArrayList:底层是数组,封装了数组,提供了更多的功能(方法)。
ArrayList集合继承了AbstractList类,实现了List、RandomAccess、Cloneable和java.io.Serializable接口。
成员方法:
//返回值表示新增是否成功
boolean add(E e);//E表示什么类型:创建对象的时候,尖括号中写的是什么类型,E就是什么类型
E get(int index);E remove(int index);//根据索引值删除元素,返回被删除的元素
boolean remove(Object obj);//删除被参数元素,返回删除是否成功
int size();//获取元素的个数
//如果要找的元素不存在,则返回-1
int indexOf(Object obj);//获取元素第一次出现的索引值位置
int lastIndexOf(Object obj);//获取元素最后一次出现的索引值位置
E set(int index,E newElement);//把index位置的元素替换为newElement,返回被替换的元素
boolean contains(Object obj);//是否包含 参数元素,包含返回true,反之false
二、单列集合(Collection<E>接口):
Collection<E> 接口是单列集合的总接口:
Collection接口的实现子类可以存放多个元素,每个元素可以是Object
有些Collection接口的实现类,可以存放重复的元素,有些不可以
有些Collection接口的实现类,是有序的(List),有些不是有序的(Set)
Collection接口没有直接的实现子类,是通过它的子接口Set 和 List来实现的
Collection<E>接口中的方法:
boolean add(E e);//添加元素
boolean remove(Object obj);//删除元素
boolean contains(Object obj);//判断是否包含元素
boolean isEmpty();//是否有元素,有元素false,没有元素是true
int size(); //获取元素个数
void clear(); //清空所有元素
Object[] toArray();返回一个新的数组,该数组包含原容器的所有元素,并保证原来的 顺序,对返回的数组的任何修改不影响原容器
三、List,Set集合:
常用实现类:
List接口:有索引值、可以重复、有序
ArrayList:底层是数组,特点,查询快 增删慢
LinkedList:底层是链表,特点,查询慢 增删快
Vector(较少使用):和ArrayList类似。
Vector:线程安全,效率低。
ArrayList:线程不安全,效率高
常用实现类:
Set接口:没有索引值,不可以重复
HashSet(无序):底层是哈希表
LinkedHashSet(有序):底层是链表+哈希表
TreeSet(可排序):底层是红黑树
Hashtable:和HashSet类似。
Hashtable:线程安全,效率低。
HashSet:线程不安全,效率高
Set新增过程:
计算新增元素的哈希值(十进制的地址值),调用hashCode();//Object父类的方法
通过哈希值%数组长度,去确定元素新增的索引值位置
如果该位置没有元素:直接新增
如果该位置有元素:判断这两个元素是否相同
如果不相同:挂到最后一个元素下面
如果相同:不新增
判断是否相同的标准:
比较哈希值相同 && (地址值相同 || equals相同)
List<E>接口中的方法:
void add(int index,E e);//添加元素
E remove(int index);//删除元素
E get(int index);//获取指定位置的元素
E set(int index,E e);//替换元素
List<E> subList(int beginIndex,int endIndex);//截取元素
int indexOf(Object o);//返回此列表中指定元素最后一次出现的索引,如果此列表不包含 该元素,则返回 -1
int lastIndexOf(Object o);
LinkedList<E>独有的成员方法:
void addFirst(E e);//向链表的头添加新节点
void addLast(E e);//向链表的末尾添加新节点
String removeFirst();//删除第一个节点
String removeLast();//删除最后一个节点
String getFirst();//获取链表第一个节点中的对象
String getLast();获取链表最后一个节点中的对象
四、Map集合
Map集合石双列集合的总接口:
常用实现类:
HashMap:底层是哈希表。无序
LinkedHashMap:底层是链表+哈希表。有序
TreeMap:底层是红黑树。可排序
Hashtable:线程安全,效率低
HashMap:线程不安全,效率高
成员方法:
V put(K k,V v);//如果K存在,则新的V替换旧的V,返回被替换的V。
V remove(Object key);//删除元素,
V get(Object key);//根据key获取V,如果key不存在则返回null
boolean containsKey(Object key);//判断key是否存在
boolean containsValue(Object value);//判断V是否存在 Set<K> keySet();获取所有的K
Set<Entry<K,V>> entrySet();获取所有的entry
Collection<V> values();获取所有的V
boolean isEmpty();//判断集合是否为空
void clear();//清空元素
int size();//获取集合中元素的个数