之前我们了解过数组,数组是用来存放数据的。可是还有一个可以用来存放数据的容器,我们称作集合。既然两者都是用来存放数据的容器,那么他们有什么区别呢:
1. 数组的长度是固定的。
集合的长度是可变的。
2.集合只能存放引用类型的元素。
说到这里,下面让我们全面了解下集合。
在集合中,Collection接口是集合中的顶层接口。用图来表示就是
ArrayList
通俗点说Collection是List的父亲,而List又是Array的父亲。所以按照集继承体系来说,Colletion有的方法,ArrayList也有。
比如说常用的:
clear():清除元素
contains(Object o) :如果此 collection 包含指定的元素,则返回 true。
iterator() :返回在此 collection 的元素上进行迭代的迭代器。
代码:
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList< String> arrayList = new ArrayList<String>();
//添加元素
arrayList.add("张三");
arrayList.add("李四");
arrayList.add("王五");
Iterator<String> it = arrayList.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
运行结果:
张三
李四
王五
ArrayList 可变数组的实现,集合数据存储的结构是数组结构,元素增删慢,查找快。
在业务需求中,如果用到查找多一些就用ArrayList;如果是增删多一些,就用LinkedList。这个我们接下来就会介绍。
LinkedList
同ArrayList,LinkedList也是从Collection继承下来的,但是它也有自己特殊之处。
上面已经说到了,LinkedList增删快,查找慢。因为它是单链表,如果要查找的话,就要一个一个地去遍历。
但是它提供了大量的首尾操作,有自己单独的方法。
比如:addFirst();在集合头部添加元素 addLast();在集合尾部添加元素
代码:
package lesson06;
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
LinkedList<String> link = new LinkedList<String>();
link.addFirst("张三"); //在头部添加
link.addFirst("李四");
link.addFirst("王五");
link.addLast("赵六"); //在尾部添加
System.out.println(link);
}
}
运行结果:
[王五, 李四, 张三, 赵六]
迭代器:Java中提供了多个集合,他在存储元素时,采用的存储方式不同,我们要取出这些集合中的元素,课通过一种通用的获取方式来完成。
Collection集合元素通用获取方式:在取元素之前要先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就在取出来。一直把集合的所有全部取出。这种取出专业术语称为迭代
Set
ArrayList中可以添加重复的元素,那么有没有不能重复添加的呢?
Set中存放的元素不会重复,而且它是无序存放的。
Set集合取出元素的方式可以采用迭代器因为set是没有索引的
代码:
package lesson06;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class SetDemo {
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
set.add("老大");
set.add("老二");
set.add("老三");
set.add("老四");
Iterator<String> it = set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
运行结果:
老三
老四
老大
老二
Map
Map接口与collection是同一级别的顶层容器。只不过collection中的元素是单独存放的,而map中的元素是成对存放的。里面涉及到键,通过键来寻找值。
需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值
Map中常用的集合为HashMap集合,LinkedMap集合。
代码:
package lesson06;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class MapDemo {
public static void main(String[] args) {
HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
hashMap.put(1, "张三");
hashMap.put(2, "李四");
hashMap.put(3, "王五");
// 获取HashMap的set集合
Set<Integer> keyset = hashMap.keySet();
// 获取set的迭代器
Iterator<Integer> it = keyset.iterator();
while(it.hasNext()){
int key = it.next();
System.out.println(hashMap.get(key));
}
}
}
运行结果:
张三
李四
王五