Java基础第二篇-集合
Java集合
1 集合概述
集合类主要由两个接口派生:Collection和Map
Set:无序集合,不可重复
Queue:队列
List:有序集合,可以重复
2.Collection和Iterator接口
Collection接口是List Set Queue接口的父接口,常用的有以下方法:
boolean add(Object o):添加元素
boolean addAll(Collection c):把集合中所有元素添加到指定集合中,集合对象被改变了,则返回true
void clear(): 清除集合所有元素
boolean contains(Object c):返回集合是否包含指定元素
boolean containsAll(Collection c):返回集合是否包含c中所有元素
boolean isEmpty():返回集合是否为空
boolean remove(Object c):删除指定元素
boolean removeAll(Collection c):从集合中删除集合c包含的所有元素
boolean retainAll(Collection c):从集合中删除集合c不包含的元素
int size():返回集合元素个数
Object[] toArray():把集合转换成数组
一个小例子:
1 | public class CollectionTest { |
3.Iterator
Iterator:迭代器,主要用于遍历集合中的元素
boolean hasNext()
Object next()
void remove()
例子:
1 | public class IteratorTest { |
注意:Iterator必须依附于Collection。
4.Set集合
Set集合不允许添加相同元素,判断方法是:equals,因此我们看看以下这个例子
1 | public class SetTest { |
打印结果为:
1 | false--->[aaa] |
因为这两个String不是同一个对象,==返回结果为false,但是Set中判断方式是equals,所以返回的是true,Set中最终只有一个aaa
HashSet类
通过hashCode()方法得到hashCode值,然后再决定存储位置。
HashSet判断两个元素相等标准是 equals()和hashCode()同时相同
特点:
> 不能保证元素的排列顺序,顺序可能会发生变化
> HashSet不是同步的
> 集合元素值可以是null
举个例子:
1 | public class HashSetTest { |
输出结果:
1 | [collection.A@5e2de80c, collection.B@1, collection.B@1, collection.C@2, collection.A@60e53b93] |
两个A对象,两个B对象,一个C对象
说明只有equals()或者hashCode()相等,还是HashSet仍然把他们当成两个对象
TreeSet类
特点:确保集合元素处于排序状态。
常见方法:
1 | public static void main(String[] args) { |
输出结果:
1 | [-2, 2, 5, 10] |
5 List集合
常见方法:
1 | public class ListTest { |
6.Queue集合
特点:Queue用于模拟队列这种数据结构,具有FIFO-先进先出的特点。
常见方法:
void add(Object c): 指定元素加入队列尾部
Object element(): 获取队列头部元素
boolean offer(Object c): 将指定元素加入队列尾部
Object peek(): 获取队列头部元素
Object poll(): 获取队列头部元素,并删除
Object remove():删除队列头部元素
7.Map
特点:用于保存具有映射关系的数据,通常以键值对的形式存在.
HashMap和Hashtable实现类
Hashtable是线程安全的,但是HashMap是线程不安全的。
Hashtable不允许使用null作为key和value,但是HashMap可以
注意:key是唯一不可重复的
8.操作集合的工具类:Collections
排序操作:
static void reverse(List list):反转
static void shuffle(List list):随机排序
static void sort(List list):升序排序
static void sort(List list, Comparator c):根据Comparator产生的顺序排序
static void swap(List list,int i,int j):将i和j元素交换
static void rotate(List list,int distance):将后distance元素往前移
查找、替换操作
static int binarySearch(List list,Object key):二分查找(必须保证有序)
static Object max(Collection coll):找出最大值
static Object min(Collection coll):找出最小值
static void fill(List list,Object obj):指定元素obj替换List所有元素
static int frequency(Collection c,Object c):返回指定元素出现次数
static int indexOfSubList(List source,List target):返回子List对象在父List第一次出现的位置
static int lastIndexOfSubList(List source,List target):返回子List对象在父List最后一次出现的位置
static boolean replaceAll(List list,Object oldVal,Object newVal):替换
同步控制
Collections提供了多个synchronizedXxx()方法,用于把集合包装成线程同步的集合,从而解决多线程并发访问的安全问题。
例子:
1 | public class SynchroinizedTest { |