什么是集合,集合就是一个所有元素在一起的整体,我们把他叫做一个集合,是不是听起来很像数组,是的,在集合的底层,其实就是由数组来实现的。
Collection是一个接口,他没有实现类,他的子接口有Set和List,Set又叫做无序集合,里面的元素不可以重复。List叫做有序集合,里面的元素可以重复。
Set集合主要的实现类有:HashSet,TreeSet,LinkHashSet。List里主要的实现类有ArrayList,Vector,LinkedList。
我们主要调几个常用的实现类来讲。
ArrayList
ArrayList底层有一个Object对象来进行存储,默认的长度是10,当长度不够时,他会自动进行扩容1.5倍,所以ArrayList可以根据索引来得到值。
ArrayList有哪些常用方法呢?
add:用于向集合中添加元素。
remove:用于从集合中删除元素。
size:用于从集合中获取元素的个数,相当于数组的索引。
clear:清空集合中所有元素。
isEmpty:判断集合是否为空集合。
contains:判断集合中是否包含这个对象。
我们来试着使用这些集合中的方法
public class Test05 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Collection<Integer> a = new ArrayList<Integer>();
a.add(1);
a.add(2);
a.add(3);
//添加元素
boolean remove = a.remove(1);
//删除元素
System.out.println(remove);
//判断删除是否成功
boolean empty = a.isEmpty();
//判断是否为空
System.out.println(empty);
a.clear();
//清空元素
empty = a.isEmpty();
//判断是否为空
System.out.println(empty);
}
}
<>是泛型,这个里面呢,代表的是限定集合里的元素的类型,里面只能是引用类型,那么基本数据类型怎么办呢?JAVA提供了基本数据类型的包装类,比如Int的包装类就是Integer,char的包装类是Character。
迭代器
我们怎么遍历集合呢?难道利用索引挨着挨着遍历么?当然这样是可行的。但是在我们集合中提供了一个迭代器接口来让我们能够遍历集合,那么怎么使用它呢?
语法如下:
Iterator<类型> iterator集合名.Iterator();
Iterator接口提供了两个方法:
hasNext:判断集合中时候还有下一个元素。
next:取出集合中的下一个元素。
所以通过迭代器,我们可以实现对集合的遍历
接着我们演示一遍
public class Test05 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Collection<Integer> a = new ArrayList<Integer>();
a.add(1);
a.add(2);
a.add(3);
Iterator<Integer> iterator = a.iterator();
while(iterator.hasNext()//判断是否还有下一个元素,如果有返回True,没有返回Flase) {
int b = iterator.next();
//取出元素
System.out.println(b);
}
}
}
这样我们就实现了对集合的遍历。
HashSet
HashSet是Set接口的实现类,他的底层是以哈希码为值存储的数组,所以他是无序的,没有索引。并且,HashSet里的元素不能够重复,因为相同的值,他们的哈希值相同,那么他们存储的位置也相同,那么他们就会进行覆盖,所以HashSet里的元素不能重复
除了不能根据索引访问对象,其他的方法都与ArrayList大同小异,所以我们就不一一演示了。
TreeSet
TreeSet也是Set接口的实现类,他和HashSet的区别就是TreeSet是有序的,那么它是如何来排序的呢?TreeSet重写了一个叫做comparable的接口,能够根据comparable来进行排序,所以他们的区别就是TreeSet有序,HashSet无序,但是我们说Set是无序的啊,这里TreeSet怎么就变成有序的了呢?我们注意,我们通常指的有序,是指的元素存放的顺序,第一个存入的元素,对应的索引是0。而我们这里说的有序,是元素按照一定的规律进行排序,而不是我们通常所值的存取顺序。
Map
Map集合是一个双列集合,他有两个元素,一个键一个值,我们通常按照键的值去找到值的值。我们怎样定义一个Map呢?
Map<String, Integer> map = new HashMap<String, Integer>();
这个HashMap就是Map接口的实现类,我们来介绍几个Map的方法:
put:添加元素。
value get(key):根据键获取值。
size:获取集合中键值对的个数。
我们同样可以使用迭代器来遍历集合:
public static void main(String[] args) {
HashMap<Integer, String> hashMap = new HashMap<>();
hashMap.put("1","周芷若");
hashMap.put("2", "黄蓉");
hashMap.put("3", "小龙女");
Iterator<String>iterator=hashMap.keySet().iterator();
//迭代器
while(iterator.hasNext()//获取键的值) {
String s = iterator.next();
System.out.println(s+" "+hashMap.get(s)//根据键获取值);
}
}