集合类
一、集合概述
-
可以储存任意类型的对象,并且长度可变的类统称为集合
-
集合分为两大类:
①单列集合类Collection,储存一系列符合某种规则的元素。有两个子接口分别是list和set
- list:元素有序,可重复,子接口有ArrayList和LinkedList
- set:元素无序,不可重复,子接口有HashSet和TreeSet
②双列集合Map,用于储存具有键(Key)、值(Value)映射关系的元素,每个元素都要包含一对键值,根据键可以找到值,主要实现类有HashMap和TreeMap
二、Collection接口
方法声明 | 功能描述 |
---|---|
boolean add(E e) | 向集合中添加一个元素 |
boolean addAll(Collection c) | 将指定集合中的所有元素添加到此集合中 |
void clear() | 清空掉集合中的所有元素 |
boolean remove(Object o) | 删除集合中的指定的元素。如果存在NULL,也删除 |
boolean removeAll(Collection c) | 删除当前集合中所有等于指定集合中的元素。 |
boolean isEmpty() | 如果集合中没有元素返回true |
boolean contains(Object o) | 如果集合中包含指定元素那么返回true |
boolean containsAll(Collection c) | 如果该集合中包含指定集合中的所有元素的时候返回true |
Iterator iterator() | 返回在该集合的元素上进行迭代的迭代器,用于遍历该集合的所有元素 |
int size() | 返回该集合中元素的个数。 |
三、List接口
- 元素有序,元素存入的顺序和取出的顺序一直
方法声明 | 功能描述 |
---|---|
void add (int index, Object element) | 在指定位置插入元素,以前元素通通后移一位 |
boolean addAll(int index,Collection c) | 将集合c所包含的所有元素插入到List集合的index处 |
Object get (int index) | 返回指定位置的元素 |
Object remove (int index) | 删除指定位置的元素,后面元素通通前移一位 |
Object set (int index,Object element) | 修改指定位置的元素 |
int indexOf (Object o) | 返回第一个匹配元素的索引。如果没有该元素,返回-1 |
int lastIndexOf (Object o) | 返回最后一个匹配元素的索引。如果没有该元素,返回-1 |
List subList(int fromIndex, int toIndex) | 返回从索引fromIndex(包括)到toIndex(不包括)处所有元素集合组成的子集合 |
ArrayList
- 长度可变的数组
- 数组具有查找元素效率高的特点
import java.util.ArrayList;
public class Demo1 {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<>();
list.add("stu1");
list.add("stu2");
System.out.println("集合长度"+list.size());
System.out.println("第二个元素"+list.get(1));
}
}
LinkedList
-
该集合内部维护了一个双向循环的链表,链表中的每个元素都使用引用的方式来记住它的前一个元素和后一个元素,从而可以将所有元素彼此连接起来。
-
插入或删除元素时,修改这种关系即可
-
链表具有增删元素效率高的特点
方法声明 功能描述 public void add(int index, E element) 向指定位置插入元素 public void addFirst(E e) 元素添加到头部 public void addLast(E e) 元素添加到尾部 public E getFirst() 返回第一个元素 public E getLast() 返回最后一个元素 public E removeFirst() 删除并返回第一个元素 public E removeLast() 删除并返回最后一个元素 import java.util.LinkedList; public class Demo2 { public static void main(String[] args) { LinkedList<String> link=new LinkedList(); link.add("stu1"); link.add("stu2"); link.add("stu3"); System.out.println(link.toString());//取出并打印队列的所有元素 link.add(3,"Student");//向指定位置插入元素 link.addFirst("First"); //向该集合第一个位置插入元素 System.out.println(link); System.out.println(link.getFirst()); link.remove(3); link.removeFirst(); System.out.println(link); } }
Iterator接口
-
用于迭代访问Collection中的元素
import java.util.ArrayList; import java.util.Iterator; public class Demo3 { public static void main(String[] args) { ArrayList<String> list=new ArrayList<String>(); list.add("1"); list.add("2"); list.add("3"); Iterator it=list.iterator();//获取Iterator对象 while(it.hasNext()){ //判断ArrayList中是否存在下一个元素 Object obj=it.next(); //取出ArrayList集合中的元素 System.out.println(obj); } } }
foreach循环
- 使用foreach遍历集合和数组时,只能访问集合中的元素,不能对其中进行修改
public class Demo3 {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
for (Object obj : list) {
System.out.println(obj);
}
}
}
四、Set接口
-
Set接口中元素无序,并且都会以某种规则保证存入的元素不出现重复
-
两个实现类
-
HashSet:根据对象的哈希值来确定元素在集合中储存的位置,具有良好的存取和查找性能
import java.util.HashSet; public class Demo4 { public static void main(String[] args) { HashSet<String> names =new HashSet<String>(); names.add("Jack1"); names.add("Jack2"); names.add("Jack3"); names.add("Jack4"); for(Object i:names) { System.out.println(i); } } }
-
TreeSet:以二叉树的方式来存储元素,可以实现对集合中元素的排序
-
五、Map接口
-
Map接口是一种双列集合,它的每个元素都包含一个键对象Key和值对象Value,键和值对象之间存在一种对应关系,称为映射。访问元素时,只需要找到Key就能找到对应的Value
-
Map集合常用方法表
方法声明 功能描述 void put(Object key , Object value) 将指定的值与此映射中的值指定关联 Object get(Object key) 返回指定键所映射的值,如果不包含映射关系则返回null boolean containKey(Object key) 如果包含指定键的映射关系,则返回true boolean containValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回true Set KeySet() 返回此映射中包含的键的Set视图 Collection values() 返回此映射中包含的值的Collection视图 Set<Map.Entry<K,V>>entrySet 返回此映射中包含的映射关系的Set视图
HashMap集合
-
haspMap集合是Map接口的一个实现类,它用于存储键值映射关系,但必须保证不出现重复的键。
-
键必须是唯一的,如果存储了相同的键,后来存储的键可以覆盖原来的键
import java.util.*; public class Demo4 { public static void main(String[] args) { Map names =new HashMap(); names.put("1","Jack1"); names.put("2","Jack2"); names.put("3","Jack3"); names.put("4","Jack4"); for(Object entry:names.entrySet()) { System.out.println(entry); } } }
六、泛型
public class Demo3 {
public static void main(String[] args) {
//使用泛型<String>规定只能传string类型
ArrayList<String> list=new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
for (Object obj : list) {
System.out.println(obj);
}
}
}