什么是集合
1、集合类存放于java.util包中。
2、集合类型主要有3种:set(集)、list(列表)和map(映射)。
3、集合存放的都是对象的引用,而非对象本身。所以我们称集合中的对象就是集合中对象的引用。
简单来讲:集合是一组复合元素的容器,用来存储,检索,控制聚合数据并提供它们之间的通信方法。
集合就是一个放数据的容器,准确的说是放数据对象引用的容器。
集合框架
核心集合接口封装了不同类型的集合,它们是java集合框架的基础,形成了下图所示的层级结构:
1、集合主要分为Collection和Map两个接口
2、Collection又分别被List和Set继承
3、List被AbstractList实现,然后分为3个子类,ArrayList,LinkList和Vector
4、Set被AbstractSet实现,又分为2个子类,HashSet和TreeSet
5、Map被AbstractMap实现,又分为2个子类,HashMap和TreeMap
6、Map被Hashtable实现
首先我们先来看下核心的集合接口,对他们有一个整体的认识:
Collection接口:集合框架的根接口。它是集合类框架中最具一般性的顶层接口。Java平台没有提供任何该接口的直接具体实现类,但是提供了具有各种不同特性的子接口
Set接口:不允许包含重复值的集合
**List接口:**可索引的集合,可以包含重复值。使用该接口时我们通过索引对元素进行精准的插入和查找
Map接口:提供了键值对(key/value)的映射关系的集合。关键字不能有重复值,每个关键字至多可映射一个值
集合的共用的一些方法:
int size()
获取元素个数
ArrayList<String> arrayList = new ArrayList<>()
arrayList.size()
boolean isEmpty()
集合是否为空
ArrayList<String> arrayList = new ArrayList<>()
arrayList.isEmpty() //返回的是布尔类型,如果返回true说明为空, flase说明不为空
boolean contains(Object element)
是否包含指定元素
ArrayList<String> arrayList = new ArrayList<>()
arrayList .contains("***") //**表示你要判断指定的元素是不是存在这个集合里面
boolean add(E element)
添加元素,成功时返回 true
ArrayList<String> arrayList = new ArrayList<>()
arrayList.add("添加数据")
boolean remove(Object element)
删除元素,成功时返回 true
ArrayList<String> arrayList = new ArrayList<>()
arrayList.remove(Object element)
Iterator iterator()
获取迭代器
ArrayList<String> arrayList = new ArrayList<>()
arrayList .iterator()
集合的特点:
- List:一组数据,不唯一,有序
- Set:多个数据,唯一,无序
- Map:key和value成对存在,key是唯一的,value可以重复
集合的遍历输出:
- ArrayList集合的遍历输出:
①: 增强for循环
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList<>();
//添加数据
for (int i=0;i<5;i++) {
arrayList.add("第"+(i+1)+"条数据");
}
for (String s : arrayList) {
System.out.println(s);
}
}
②迭代器
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList<>();
//添加数据
for (int i=0;i<5;i++) {
arrayList.add("第"+(i+1)+"条数据");
}
Iterator<String> iterator = arrayList.iterator();
while (iterator.hasNext()) {
String next = iterator.next();
System.out.println(next);
}
}
- HashSet集合的遍历输出: 和List集合是一样的操作
- HashMap集合的遍历输出: 这个集合遍历的重点掌握
//Map是接口,建立好一个数组.通过他的子类HashMap来建立
HashMap<Integer, String> has = new HashMap<>();
//添加一些数据
has.put(1, "第一名");
// has.put(1, "第一名"); 使用这个key相同value不同的时候会提示你key有相同的值不会保存进去但是不会报错
has.put(5, "第一名");
has.put(2, "第二名");
has.put(3, "第三名");
has.put(4, "第四名");
//第一种方法:把Map的所有key存储到Set集合里面,然后通过遍历set集合的值。去循环获取map与之对应的value
System.out.println("第二种方法:把Map的所有key存储到Set集合里面,然后通过遍历set集合的值。去循环获取map与之对应的value");
Set<Integer> set = has.keySet(); //把Map集合has通过keyset()的方式获取所有的key存在Set集合里面
Iterator<Integer> iterator = set.iterator(); //声明一个迭代器,用于遍历输出set集合
while (iterator.hasNext()) { //迭代器的循环,首先判断集合里面是不是包含有值
Integer haskey = iterator.next(); //如果有就把集合的值赋予haskey来接受。 这个时候的haskey就是has对应的key值
String s = has.get(haskey); //通过Map集合has 本身带有的get(K),这个方法获取k对应的value ,用s来接受
System.out.println("Map集合has的遍历输出key:" + haskey + "==Value:" + s);
}
/**
* 第二种方法:foreach
*/
System.out.println("第二种方法:foreach:普通形式");
for (Integer integer : set) {
String value = has.get(integer);
System.out.println("has集合的key是:" + integer + "Value:" + value);
}
//在这里另外中的复合形的方法
System.out.println("Foreach :复合型式");
for (Integer integer : has.keySet()) {
String value = has.get(integer);
System.out.println("has集合的key是:" + integer + "Value:" + value);
}
/**
*通过entymSet() 来获取
*/
//使用entrtSet() 把Entry对象取出来,然后存方法到Set集合
System.out.println("通过entymSet() 来获取");
Set<Map.Entry<Integer, String>> entries = has.entrySet();
//获取set集合的迭代器
Iterator<Map.Entry<Integer, String>> iterator1 = entries.iterator();
while (iterator1.hasNext()){
Map.Entry<Integer, String> next = iterator1.next();
//通过has.get()获取对应的value和key
System.out.println("has集合的key是:" + next.getKey() + "Value:" + next.getValue() );
}