1.集合大纲
集合类存放在java.util
包中,使用时需进行导包,主要有三种:set(集),list(列表)和map(映射)。
2.Collection
Collection集合概述
-
是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
-
JDK 不提供此接口的任何直接实现,它提供更具体的子接口(如Set和List)实现
常用方法:
-
方法名 说明 boolean add(E e) 添加元素 boolean remove(Object o) 从集合中移除指定的元素 void clear() 清空集合中的元素 boolean contains(Object o) 判断集合中是否存在指定的元素 boolean isEmpty() 判断集合是否为空 int size() 集合的长度,也就是集合中元素的个数
实例:
Collection<Integer> c = new ArrayList();//实现Collection接口
c.add(520); //添加元素
c.add(1314);
System.out.println(c);
int size = c.size(); //集合的长度,也就是集合中元素的个数
System.out.println(size);
boolean tf = c.contains(520); //判断集合中是否存在指定的元素
System.out.println(tf);
c.remove(1314); //从集合中移除指定的元素
System.out.println(c);
c.clear(); //清空集合中的元素
System.out.println(c);
System.out.println(c.isEmpty()); //判断集合是否为空
运行结果:
2.1 List
Collection的子接口
List集合概述
-
有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素
List集合特点
-
有索引
-
可以存储重复元素
-
元素存取有序
常用方法:
方法名 | 描述 |
---|---|
void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
E get(int index) | 返回指定索引处的元素 |
2.1.1 ArrayList(数组)
List接口的实现类之一
ArrayList内部是通过数组实现的,它允许对元素进行快速随机访问。
缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有数组的数据复制到新的存储空间中。当从 ArrayList 的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。
常用方法:
public boolean remove(Object o) | 删除指定的元素,返回删除是否成功 |
public E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
public E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
public E get(int index) | 返回指定索引处的元素 |
public int size() | 返回集合中的元素的个数 |
public boolean add(E e) | 将指定的元素追加到此集合的末尾 |
public void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
实例:
ArrayList<String> array = new ArrayList<String>();
//添加元素
array.add("hello");
array.add("world");
array.add("java");
//删除指定的元素,返回删除是否成功
System.out.println(array.remove("world"));
//删除指定索引处的元素,返回被删除的元素
System.out.println(array.remove(1));
//修改指定索引处的元素,返回被修改的元素
System.out.println(array.set(1,"javaee"));
//返回指定索引处的元素
System.out.println(array.get(0));
//返回集合中的元素的个数
System.out.println(array.size());
//输出集合
System.out.println("array:" + array);
运行结果:
2.1.2 LinkedList(链表)
List接口的实现类之一
LinkedList
是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,它还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。
特有方法:
方法名 | 说明 |
---|---|
public void addFirst(E e) | 在该列表开头插入指定的元素 |
public void addLast(E e) | 将指定的元素追加到此列表的末尾 |
public E getFirst() | 返回此列表中的第一个元素 |
public E getLast() | 返回此列表中的最后一个元素 |
public E removeFirst() | 从此列表中删除并返回第一个元素 |
public E removeLast() | 从此列表中删除并返回最后一个元素 |
实例:
LinkedList<Integer> ll = new LinkedList<>();
ll.add(101);
ll.addFirst(100);//在该列表开头插入指定的元素
ll.addLast(102); //将指定的元素追加到此列表的末尾
System.out.println(ll);
int first = ll.getFirst();
System.out.println(first);//返回此列表中的第一个元素
int last = ll.getLast();
System.out.println(last);//返回此列表中的最后一个元素
ll.removeFirst(); //从此列表中删除并返回第一个元素
ll.removeLast(); //从此列表中删除并返回最后一个元素
System.out.println(ll);
运行结果:
2.2 Set
Collection的子接口
Set集合的特点
-
元素存取无序
-
没有索引、只能通过迭代器或增强for循环遍历
-
不能存储重复元素
实例:
Set<String> set = new HashSet<String>();
//添加元素
set.add("hello");
set.add("world");
set.add("java");
//不包含重复元素的集合
set.add("world");
//遍历
for(String s : set) {
System.out.println(s);
}
运行结果:
2.2.1 HashSet
Set的实现类
-
HashSet集合的特点
-
底层数据结构是哈希表
-
对集合的迭代顺序不作任何保证,也就是说不保证存储和取出的元素顺序一致
-
没有带索引的方法,所以不能使用普通for循环遍历
-
由于是Set集合,所以是不包含重复元素的集合
-
实例:
HashSet<String> set = new HashSet<String>();
//添加元素
set.add("hello");
set.add("world");
set.add("java");
//不包含重复元素的集合
set.add("world");
//遍历
for(String s : set) {
System.out.println(s);
}
运行结果:
2.2.2 TreeSet
Set的实现类
TreeSet集合概述
-
元素有序,可以按照一定的规则进行排序,具体排序方式取决于构造方法
-
TreeSet():根据其元素的自然排序进行排序
-
TreeSet(Comparator comparator) :根据指定的比较器进行排序
-
-
没有带索引的方法,所以不能使用普通for循环遍历
-
由于是Set集合,所以不包含重复元素的集合
实例:
//创建集合对象
TreeSet<Integer> ts = new TreeSet<Integer>();
//添加元素
ts.add(10);
ts.add(40);
ts.add(30);
ts.add(50);
ts.add(20);
ts.add(30);
//遍历集合
for(Integer i : ts) {
System.out.println(i);
}
运行结果:
3.Map(双列)
-
Map集合概述
-
是单例集合的顶层接口,用于保存具有映射关系的数据,Map里保存着两组数据,key和value,他们都可使用任何引用数据类型,但key值不能重复。所以通过唯一的key可取出对应的value。
-
Map集合的特点
-
键值对映射关系
-
一个键对应一个值
-
键不能重复,值可以重复
-
元素存取无序
-
常用方法
方法名 | 说明 |
---|---|
V put(K key,V value) | 添加元素 |
V remove(Object key) | 根据键删除键值对元素 |
void clear() | 移除所有的键值对元素 |
boolean containsKey(Object key) | 判断集合是否包含指定的键 |
boolean containsValue(Object value) | 判断集合是否包含指定的值 |
boolean isEmpty() | 判断集合是否为空 |
int size() | 集合的长度,也就是集合中键值对的个数 |
实例:
Map<Integer,Integer> map = new HashMap<>();//创建集合对象
map.put(1,100);
map.put(2,200);
map.put(3,300);
map.put(4,400);
map.put(5,500); //添加元素
System.out.println(map);
map.remove(500); //根据键删除键值对元素
System.out.println(map);
System.out.println(map.containsKey(1)); //判断集合是否包含指定的键
System.out.println(map.containsValue(100));//判断集合是否包含指定的值
System.out.println(map.size());//集合的长度,也就是集合中键值对的个数
map.clear(); //移除所有的键值对元素
System.out.println(map);
System.out.println(map.isEmpty());//判断集合是否为空
运行结果: