1.集合的概念:
集合相当于一个容器,一个存储数据的容器,在未加泛型之前,里面存储的是Object类型的数据,在加入泛型之后,里面存储的数据就要按照参数化类型要求存储。
2.Collection集合常用方法
package com.atguigu.java;
import org.junit.Test;
import java.util.Collection;
import java.util.Iterator;
public class Test1 {
@Test
public void test(){
Collection<String> collection = new Collection<String>() {
@Override
public int size() {
return 0;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean contains(Object o) {
return false;
}
@Override
public Iterator<String> iterator() {
return null;
}
@Override
public Object[] toArray() {
return new Object[0];
}
@Override
public <T> T[] toArray(T[] a) {
return null;
}
@Override
public boolean add(String s) {
return false;
}
@Override
public boolean remove(Object o) {
return false;
}
@Override
public boolean containsAll(Collection<?> c) {
return false;
}
@Override
public boolean addAll(Collection<? extends String> c) {
return false;
}
@Override
public boolean removeAll(Collection<?> c) {
return false;
}
@Override
public boolean retainAll(Collection<?> c) {
return false;
}
@Override
public void clear() {
}
};
}
}
注意事项:往Collection集合中添加数据时,要注意该数据所属的类一定要重写equals()方法
2.Collection的子接口
2.1List接口
在List接口中存储的数据都是有序,可重复的。
2.1.1List接口主要的三个实现类:ArrayList(用的最多)、LinkedList、Vector(最古老的集合)
三者的异同:
1.同:三者存储的数据都是有序的,可重复的
2.异:ArrayList集合、LinkedList是线程不安全的,效率高,而Vector是线程安全的,效率低。ArrayList的底层是基于数组实现的,而LinkedList的底层是基于链表实现的,对于频繁的插入删除操作,LinkedList的效率比ArrayList的效率要高
package com.atguigu.java;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListTest {
@Test
public void test(){
List<String> list = new ArrayList<>();
list.add("黄劭鸿");
list.add("张三");
list.add("李四");
list.add("王五");
// 1.增
// System.out.println(list);
// list.add(1,"张三1");
// System.out.println(list);
// 2.删
// System.out.println(list);
// list.remove(0);
// System.out.println(list);
// 3.改
// System.out.println(list);
// list.add(0,"黄哥");
// System.out.println(list);
// 4.查
// String s = list.get(0);
// System.out.println(s);
// 5.遍历
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
String next = iterator.next();
System.out.println(next);
}
}
}
2.2 Set接口
2.2.1 在Set接口中存储的数据都是无序,不可重复的,注意往Set集合中添加数据时,该数据所属的类都要实现HashCode和equals方法
2.2.2 Set接口的实现类
HashSet、LinkedHashSet、TreeSet
3.迭代器方法的使用
迭代器用来遍历容器中的元素,其主要用到的方法有hasNext和next。其原理如下:
我们用得到的迭代器对象调用hasNext方法,此时该游标位于容器中第一个元素的上面一个位置,我们先判断该游标下面是否有元素,如果有元素则进入循环,然后调用next方法,调用next方法之后,游标下移,并且返回第一个容器对象。由此,第一次迭代完成,周而复始。迭代结束