集合是包含多个对象的简单对象,所包含的对象称为元素。
Set(集)中元素不允许重复。
List(列表)中元素允许重复,有下标,有序。
Map(映射)中每个元素包含一对,键不允许重复,值允许重复。
1、Collection接口
返回值 | 描述 |
boolean | add(E e)添加元素 addAll(Collection c)添加集合中所有元素 |
void | clear()清空所有元素 |
boolean | contains(E e)是否包含元素 containsAll(Collection c)是否包含集合中所有元素 |
boolean | equals(Object o)比较 注:当对象类型为自定义时,注意是否要重写equals方法。 |
int | hashCode()哈希值 |
Iterator | Iterator()迭代器,遍历集 |
boolean | remove(Object o)移除元素 removeAll(Collection c)移除交集元素 |
int | size()返回集合大小 |
boolean | tetainAll(Collection c)保留交集,其他移除 |
Objict[] | toArray()返回数组 |
1.1、列表(List)
返回值 | 描述 |
void | add(int index,E e)指定位置添加元素 |
E | get(int index)返回指定位置元素 |
int | indexOf(Object o)返回第一个相同元素的索引,无返回-1 |
boolean | isEmpty()是否为空 |
int | lastIndexOf(Object o)返回最后一个相同元素索引,无返回-1 |
E | remove(int index)移除指定位置的元素 |
E | set(int index,element)替换某位置的元素 |
List | subList(int fromindex , int toIndex)返回指定位置的元素列表 |
1.2、集(Set)
方法基本与Collection接口相同。
2、映射(Map)
返回值 | 描述 |
void | clear()清空 |
boolean | containsKey(Object o)判断是否包含对应内容的键 |
voolean | containsValue(Object o)判断是否包含对应内容的值 |
boolean | equals(Object o)比较对象与映射是否相等 |
int | hashCode()返回哈希值 |
boolean | isEmpty()是否为空 |
V | get(Object key)根据键获取对应的值,不包含返回null |
Set<K> | keySet()将Map中的所有键返回成一个集 |
V | put(K key,V value)将指定的键和指定的值关联 |
void | putAll(Map m)将m中的所有映射关系复制到此映射中 |
int | size()返回映射的长度 |
V | remove(Object key)移除对应的键值对 |
Collection | valudes()返回映射中值的Collection视图 |
3、List和Set接口的实现
3.1、ArrayList
ArrayList的底层是用数组实现的,相当于动态数组。是一种线性数据结构
容量默认是10。默认是空的Object[]。
数组的容量每次增长的长度为原来的0.5(oldCapacity>>1)。
注:动态数组的长度是随之变化的,当遍历时添加或者删除会影响modCount导致ConcurrentModificationException。
例:当表中的d移除时, 需要将地址为004的值改为005的值,将005的值改为006的值,添加和删除的操作对数组列表的影响较大,速度慢。
3.2、LinkedList
LinkedList是一个双向的链表结构,每个对象有三个元素(前一个对象的地址,当前对象的值,后一个对象的地址)。
例:点表中d对象需要移除时,将a对象和c对象的前后地址修改即可。故插入的速度和删除的速度很快。
3.3、HashSet
HashSet类是根据哈希算法来存取集合中的对象,具有很好的存取和查找功能。
3.4、TreeSet
TreeSet使用二叉树实现。
3.5、排序
主要针对TreeSet。通过调用compareTo方法()比较集合中对象的大小排序。
4、Map接口的实现
在HashMap中,每个(Node)节点都有他的hashCode值,Key(键),Value(值),next(指向下一个Node)。而TreeMap中则是将next升级为left、right、parent,满足数的结构。
5、泛型
Java1.5开始引入泛型。泛型提供了编译时的类型安全检查机制。
运用泛型编译器不建议使用原生类型,而是要指明具体类型(如:List<String>)以便编译器做参数检查。
在编一阶段会采取擦除机制,将泛型转换为原生类型List<String>,虚拟机中没有泛型,只有普通类和普通方法。
6、Collections工具类
public static void sort(List<T> list)升序排序
public static int binarySearch(List list,T key)二分法查找(注意升序)
public static T min(Collection<T> coll)最小元素
public static T max(Collection<T> coll)最大元素
public static boolean disjoint(Collection<?> coll1,Collection<?> coll2)无交集返回true
public static void reverse(List<?> list)反转集合
public static void shuffle(List<?> list)随机交换位置
public static void swap(List<?> list,int a,int b)交换指定位置元素
public static void rotate(List<?> list,int distance)轮转列表指定元素
public static void fill(List<T> list,T obj)列表元素全部替换为obj
public satic boolean replaceAll(List<T> list,T oldval,T newval)使某个值替换所有对应值。
public static void copy(List<T> desc,List<T> scr)将指定列表替换到目标列表
public static int frequency(Collection<?> c,Object o)统计o元素在c出现的次数