List和Collection都是接口,不能直接创建对象,只能通过实现该接口的子类来创建对象
java.util
集合:即一个储存或者获取数据的容器。一般分为:List,Set,Map三类,关系如图所示:
List接口是继承Collection接口,所以Collection集合中有的方法,List集合也继承过来。
Java的Collection集合的常用方法
方法名 | 说明 |
boolean add(E e) | 向集合添加元素e,若指定集合元素改变了则返回true |
boolean addAll(Collection<? extends E> c) | 把集合C中的元素全部添加到集合中 |
void clear()) | 清空所有集合元素 |
boolean contains(Object o) | 判断指定集合是否包含对象o |
boolean containsAll(Collection<?> c) | 判断指定集合是否包含集合c的所有元素 ,如果包含则返回true,否则返回false |
boolean isEmpty() | 检查Collection集合是否包含有元素,如果没有包含元素,则返回true,否则返回false,即判断指定集合的元素size是否为0 |
boolean remove(Object o) | 删除集合中的元素对象o,若集合有多个o元素,则只会删除第一个元素 |
boolean removeAll(Collection<?> c) | 删除指定集合包含集合c的元素 |
int size() | 集合的元素个数 |
T[] toArray(T[] a) | 将集合转换为T类型的数组 |
boolean equals(Object o) | 比较此collection集合与指定对象是否相等,是比较的是里面元素是否相等,而不是比较地址是否相等 |
int hashCode() | 返回此Collection集合的哈希码值。 |
Iterator iterator() | 返回在此collection集合的元素上进行迭代的迭代器 |
注:
1.isEmpty()与contains()的区别是,isEmpty()是判断集合是否包含有元素,就是说,如果一个元素都没有的话就返回true,如果有一个或者以上就返回false。
contains的方法是判断集合中是否包含特定的元素,如果包含特定的元素就返回true,如果没有包含特定元素就返回false。
2.在Object类中,equals()方法底层就是“==”,也就是说就是比较地址是否相等,但是继承后,大多数的类都重写了该方法
3.Collection<? extends E>解释:
1).实现了Collection接口
2).类型一定是E的子类
4.使用迭代器过程中不能用集合里的添加、删除等方法修改集合,不然会报错。如果想在迭代过程中还想操作集合,那么只能用迭代器类里面的方法。
创建:Collection<元素类型> c1 = new Vector();
主要方法演示:
package testC;
//Collection接口的几个基本函数
import java.util.*;
public class demo1 {
@SuppressWarnings("unchecked")
public static void main(String args[]) {
//1.创建对象,Collection是借口,只能通过实现它的子类来创建对象
Collection c1 = new Vector();
Collection c2 = new Vector();
c1.add("demo1");c1.add("demo2");
c2.addAll(c1);
System.out.println("c1执行两次add操作:"+c1);
System.out.println("c2执行addAll(c1)操作"+c2);
System.out.println("c1的元素个数为:"+c1.size()+" "+"c2的元素个数为:"+c2.size());
//集合操作
c1.add("demo3");
c2.add("demo4");
System.out.println("c1当前为:"+c1+"\n"+"c2当前为:"+c2);
//c1是否包含c2的
boolean b=c1.containsAll(c2);
System.out.println("c1包含c2:"+b );
//c1∩c2的交集
c1.retainAll(c2);
System.out.println("c1∩c2:"+c1 );
c1.add("demo3");//还原c1,为了执行下一个操作
//c1-c2(在c1里不在c2里)
c1.removeAll(c2);
System.out.println("c1-c2:"+c1 );
c1.add("demo1");c1.add("demo2");//还原c1,为了执行下一个操作
//c1∪c2
c1.addAll(c2);
//使用set不包含重复元素去重
Set s=new HashSet(c1);
System.out.println("c1∪c2:"+s );
//遍历集合 ,并删除指定元素
System.out.println("当前c1为:"+c1);
Iterator iterator = c1.iterator();
while(iterator.hasNext()) {
Object o=iterator.next();
if(o.equals("demo1"))
iterator.remove();
//System.out.print("当前元素为:"+o);
}
System.out.println("遍历后的c1为:"+c1);
//转换成字符串数组
Object[] o=c1.toArray();//toArray()返回的是Object[]类型
System.out.print("c1转成数组为:");
for(int i=0;i<o.length;i++)
System.out.print(o[i]+" ");
}
}
执行结果:
c1执行两次add操作:[demo1, demo2]
c2执行addAll(c1)操作[demo1, demo2]
c1的元素个数为:2 c2的元素个数为:2
c1当前为:[demo1, demo2, demo3]
c2当前为:[demo1, demo2, demo4]
c1包含c2:false
c1∩c2:[demo1, demo2]
c1-c2:[demo3]
c1∪c2:[demo3, demo4, demo1, demo2]
当前c1为:[demo3, demo1, demo2, demo1, demo2, demo4]
遍历后的c1为:[demo3, demo2, demo2, demo4]
c1转成数组为:demo3 demo2 demo2 demo4
Java中List集合的常用方法
创建 List list=new ArrayList();
方法名 | 说明 |
void add(int index, E element) | 在指定位置插入元素,后面的元素都往后移一个元素(即element出现在index位置) |
boolean addAll(int index, Collection<? extends E> c) | 在指定的位置中插入c集合全部的元素,如果集合发生改变,则返回true,否则返回false,即只要集合c不空均返回true |
E get(int index) | 返回list集合中指定索引位置的元素 |
int indexOf(Object o) | 返回list集合中第一次出现o对象的索引位置,如果list集合中没有o对象,那么就返回-1 |
ListIterator listIterator() | 返回此列表元素的列表迭代器(按适当顺序) |
ListIterator listIterator(int index) | 从指定位置开始,返回此列表元素的列表迭代器(按适当顺序) |
E remove(int index) | 删除指定索引的对象 |
E set(int index, E element) | 在索引为index位置的元素更改为element元素 |
List subList(int fromIndex, int toIndex) | 返回从索引fromIndex到toIndex的元素集合,包左不包右 |
注:listIterator和iterator的区别
当只需要遍历集合时,两个迭代器的功能都是一样。但是listIterator迭代器只能用于List和他的实现子类,iterator迭代器可以用于所有的集合使用。所不同的就是listIterator迭代器的功能会比iterator迭代器的功能要多。listIterator迭代器可以在遍历集合时添加、修改和删除,而iterator迭代器在遍历集合时只有删除。