集合
Java集合框架由两种类型构成,一个是Collection;另一个是Map。
集合对象可以上任意数据类型,并且长度可以发生变化。
集合是指集中存放一组对象的一个对象,相当于一个容器。
集合分类
Collection单列集合
Collection<E>接口是所有集合类型的根接口,继承了Iterable<E>接口。
(1)Collection集合有两个重要的子接口,分别是List和Set
(2)List集合的特点是元素有序、可重复。该接口的主要实现类有ArrayList和LinkedList
(3)Set集合的特点是元素无序并且不可重复。该接口的主要实现类有HashSet和TreeSet
Map双列集合
(1)双列集合根接口,用于存储具有键(key)、值(Value)映射关系的元素
(2)Map集合中每个元素都包含一对键值,并且Key唯一,在使用Map集合时通过指定的Key找到对应的Value
(3)Map接口的主要实现类有HashMap和TreeMap
List接口及实现类
List接口是Collection接口的子接口,实现一种线性表的数据结构。
ArrayList类
ArrayList是最常用的线性表实现类,通过数组实现的集合对象。
ArrayList构造和添加方法
方法名 | 说明 |
public ArrayList<E>() | 创建一个空集合 |
public boolean add(E e) | 将指定的参数元素追加到集合的 末尾 |
public void add (int index ,E e) | 在集合的指定位置添加指定的元素 (插入元素) |
public void addAll(E object) | 用于将指定集合所有元素添加 到当前集合中 |
下列代码创建一个ArrayList对象并向其中插入几个元素
List<String>bigCities=new ArrayList<String>();
bigcities.add("北京");
bigcities.add("上海");
bigcities.add (“「州");
System.out.println (bigcities.size())
bigcities.add (1,"伦敦");
bigcities.set (1, "各約");
System.out.println (bigcities.contains(”北京"));
System.out.print_n (bigCities) ;
System.out.printIn (bigcities.indexof(“巴黎"));
集合都是泛型类型,实例化泛型类对象使用new运算符,也可以使用菱形语法,如下所示:
LIst<String>bigCities=new ArrayList<>();
遍历集合元素
遍历集合中的元素有多种方法:
1、使用简单的for循环
使用简单的for循环可以遍历集合中的每个元素
for(int i=0;i<bigCities.size();i++){
System.out.print(bigCities.get(i)+" ");
}
2、使用增强的for循环
使用增强的for循环不但可以遍历数组的每个元素,还可以遍历集合中的每个元素。
下面的代码打印集合的每个元素
for(String city :bigCities)
System.out.println(city);
//这种方法只能按顺序访问集合中的元素,不能修改和删除元素
3、使用迭代器
迭代器是一个可以遍历集合中每个元素的对象。调用集合对象的iterator()方法可以得到Iterator对象,再调用Iterator对象的方法就可以遍历集合中的每个元素。
Iterator接口定义了3个方法:
方法 | 说明 |
boolean hasNext() | 返回迭代器是否还有对象 |
E next() | 返回迭代器的下一个对象 |
void remove() | 删除迭代器中的当前对象 |
下面程序演示ArrayList的使用
package com.demo;
import java.util.*;
public class ListDemo {
public static void main (String[1 args) {
List<String> myPets = new ArrayList<String> () ;
myPets.add ("cat");
myPets.add ("dog");
myPets.add ("horse");
for (String pet: myPets) (
System.out.print (pet + " ");
}
String[] bigPets = {"tiger", "lion");
Collection<String> coll = new ArrayList<> () ;
coll.add (bigPets [0]); coll.add (bigPets [1]); myPets. addAll (coll);
System.out.printin (myPets);
Iterator<String> iterator = myPets.iterator ();
while (iterator.hasNext () ) {
String pet = iterator.next () ;
System.out.println (pet);
}
}
}
程序输出结果为:
cat dog horse
[cat, dog, horse, tiger, lion] cat dog horse tiger lion]
cat
dog
horse
tiger
lion
数组转换为List对象
java.util.Arrays类提供了一个asList()方法,实现将数组转换为List对象的功能。
方法定义如下
public Static <T> LiSt<T> asList(T...a)
import java.util.Arrays;
import java.util.List;
public class ArraryToList{
public static void main(String[] args) {
// int-基本数据类型,不支持泛型,所以使用Integer
// int[] List = {11,22,33};
Integer[] List = {11,22,33};
List<Integer> Arrary = Arrays.asList(List);
System.out.println(Arrary);
}
}
输出结果:
[11,22,33]
注意:Array.asLIst()方法返回的List对象是不可变的。
Vector类和Stack类
Vector类表示向量,Stack类表示对象栈。
- 如果不需要线程安全的来源,建议使用ArrayList代替Vector。
Set接口及实现类
Set接口是Collection的子接口,其中不允许有重复的元素
HashSet类
HashSet类用散列方法存储元素。数据不能重复;不能保证顺序;可以存储null值。
Queue接口和实现类
Queen接口Collection的子接口,是以先进后出的方式排列其元素。
ArrayDeque(可变数组的实现)和LinkedList(线性链表的实现)是Deque的两个实现类。
Map接口及实现类
Map是用来存储“键/值”对的对象。在Map中存储的关键字和值都必须是对象,并要求关键字是唯一的,而值可以重复。
Map接口
方法 | 说明 |
public V put(K key,V value) | 向映射对象中添加一个键值对 |
public V get(Object key) | 返回指定键的值 |
public V remove(Object key) | 从映射中删除指定键的键值对 |
Map接口的实现类
1、HashMap类
2、TreeMap类
Collection类
主要包括排序、重排、查找、求极值以及一些常规操作等。