Arrsys:是数组的工具类,提供了对数组操作的工具方法。
Collections:是集合对象的工具类,提供了操作集合的工具方法。
其中Arrays和Collections中所有的方法都为静态的,不需要创建对象,直接使用类名调用即可。
java中的Collection框架表示的是集合,需要管理多个对象时可以使用Collection中的类,框架分为3层:
1. 接口 2. 抽象类 3. 实际使用中的类
java集合有6大接口
1. 最基本的是Collection接口
2. 然后是Set,List,SortedSet接口,继承于Collection接口
3. 两外的Map和SortedMap接口,其实准确而言是映射,而不是集合
Collections是集合类的一个工具类,或者说是帮助类,不能实例化,封装了一系列的static方法,可以直接拿来调用,还可以控制线程安全等操作。
List:链表,元素是有序排列的
Collection(接口)——List(接口,可以直接拿来使用)——Vector——Stack(栈,常用的数据结构)
Collection(接口)——List(接口,可以直接拿来使用)——ArrayList(其实就是一个动态的数组,可以方便查找)
Collection(接口)——List(接口,可以直接拿来使用)——LinkedList(是一个双向的链表)
Stack<Integer> st = new Stack<Integer>();
st.push(int);
st.pop(); //返回栈顶并删除元素
st.peak(); //返回栈顶元素,但是不删除
st.isEmpty(); //判断栈是否为空
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(int);
list.get(index); //返回某个index对应的值
list.size(); //返回链表的长度
Queue<Integer> q = new LinkedList<Integer>(); //java中queue是一个接口,因此需要其他实现接口的类来代替
q.offer(int); //近队列
q.poll(); //出队列
q.peek(); //队列头部数据
q.isEmpty(); //判断队列是否为空
Set:集合中的元素不允许重复,方法与Collection完全相同,接口基本一致
Collection(接口)——Set(接口)——HashSet(类)
Collection(接口)——Set(接口)——HashSet(类)——LinkedHashSet(类)
Collection(接口)——Set(接口)——SortedSet(接口)——TreeSet(排序类)
Set的实现其实基础是Map(HashMap),元素不能重复,重复的话会自动覆盖前面的对象
Map:每个元素包含两个部分,键(Key)和值(Value),同一个Map中不允许使用相同的键,但可以只用相同的值
Map(接口)——HashMap(最常用,key值不允许重复,否则会被覆盖。非synchronized的,随着时间推移,元素次序可能会变,允许null键和null值)
Map(接口)——HashTable(比较过时,同步的)
Map(接口)——WeakHashMap
HashMap hm = new HashMap();
hm.containsKey(key);
hm.put(key,value);
Collections提供以下方法对List进行排序操作
//排序操作
void reverse(List list):反转
void shuffle(List list),随机排序
void sort(List list),按自然排序的升序排序
void sort(List list, Comparator c);定制排序,由Comparator控制排序逻辑
void swap(List list, int i , int j),交换两个索引位置的元素
void rotate(List list, int distance),旋转。当distance为正数时,将list后distance个元素整体移到前面。当distance为负数时,将 list的前distance个元素整体移到后面。
//查找,替换操作
int binarySearch(List list, Object key), 对List进行二分查找,返回索引,注意List必须是有序的
int max(Collection coll),根据元素的自然顺序,返回最大的元素。 类比int min(Collection coll)
int max(Collection coll, Comparator c),根据定制排序,返回最大元素,排序规则由Comparatator类控制。类比int min(Collection coll, Comparator c)
void fill(List list, Object obj),用元素obj填充list中所有元素
int frequency(Collection c, Object o),统计元素出现次数
int indexOfSubList(List list, List target), 统计targe在list中第一次出现的索引,找不到则返回-1,类比int lastIndexOfSubList(List source, list target).
boolean replaceAll(List list, Object oldVal, Object newVal), 用新元素替换旧元素。
//同步控制:
Collections中几乎对每个集合都定义了同步控制方法,例如 SynchronizedList(), SynchronizedSet()等方法,来将集合包装成线程安全的集合。
下面是Collections将普通集合包装成线程安全集合的用法:
Collection c = Collections.synchronizedCollection(new ArrayList());
List list = Collections.synchronizedList(new ArrayList());
Set s = Collections.synchronizedSet(new HashSet());
Map m = Collections.synchronizedMap(new HashMap());
Collection接口
Collection接口,定义所有单例集合共性的方法,下面有两个子接口,一个是List接口,一个是Set接口。
List接口
List接口,其下面主要实现类有Vector集合,ArrayList集合,LinkedList集合,底层实现方式有数组,也有链表,它有如下特点:
(1)有序的集合,即存储和取出元素的顺序相同
(2)允许存储重复的元素
(3)有索引,可以使用普通的for循环遍历
Set接口
Set接口,其下面主要的实现类有TreeSet集合,HashSet集合,还有LinkedHashSet集合,前两者是无序的集合,最后一个是有序的集合,它有如下特点:
(1)不允许存储重复的元素
(2)没有索引,不能使用普通的for循环遍历
Collection接口中常用方法
collection集合中共性的方法,可以在java.util.Collection中查看,一共有如下7个,针对不同的实现类,都可以使用这7个方法。
1 public boolean add(E e):添加一个元素
2 public void clear():清空集合中所有的元素
3 public boolean remove(E e):移除集合中指定的元素
4 public boolean contains(E e):检查集合中是否包含指定的对象
5 public boolean isEmpty():判断集合是否为空
6 public void size():判断集合中元素的个数
7 public Object[] toArray():把集合元素存储到数组中