Collection接口
1、 boolean add(Object e): 向集合中添加元素
2、 void clear() :清空集合中所有元素
3、 boolean contains(Object o) :判断集合中是否包含某个元素
4、 boolean isEmpty():判断集合中的元素是否为空
5、 boolean remove(Object o) :根据元素的内容来删除某个元素
6、 int size():获取集合的长度
7、 Object[] toArray():能够将集合转换成数组并把集合中的元素存储到数组中
public class CollectionDemo {
public static void main(String[] args) {
Collection c =new ArrayList<>();//Collection是接口,不能实例化,使用多态
c.add("zhangsan");//增加元素
c.add("lisi");
c.add("wangwu");
System.out.println(c);
System.out.println(c.contains("lisi"));//判断集合中是否包含指定元素
System.out.println(c.contains("zhaoliu"));
System.out.println(c.isEmpty());//集合是否为空
System.out.println(c.size());//集合的长度
System.out.println(c.remove("lisi"));//删除元素,成功返回true
Object[] obj = c.toArray();//将集合转换成一个Object数组,因为集合中可以存任何类型的对象
for(int i=0;i<obj.length;i++){
System.out.println(obj[i]);
}
c.clear();//清空集合
System.out.println(c);
}
}
输出结果:
[zhangsan, lisi, wangwu]
true
false
false
3
true
zhangsan
wangwu
[]
8、迭代器
Collection集合元素的通用获取方式:在取元素之前先判断集合中有没有元素,如果有,就把这个元素取出来,继续判断,如果还有就再取出来,一直把集合中的所有元素都取出。
- Iterator it =c.iterator()----获取迭代器对象
- E next() :返回下一个元素,用来返回迭代的下一个元素,并把指针向后移动一位。
- boolean hasNext() :判断是否有元素可以获取,判断集合中是否有元素可以迭代
public static void main(String[] args) {
Collection c =new ArrayList<>();
c.add("zhangsan");
c.add("lisi");
c.add("wangwu");
Iterator it =c.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
注意:
- 使用next方法获取下一个元素,如果没有元素可以获取,则出现NoSuchElementException异常,所以通常和hasNext()方法一块使用
- 集合的遍历方式:上面7和8 的方法(toArray()和Iterator()两个方法)
9、并发修改异常ConcurrentModificationException处理(使用迭代器才会出错):
当使用迭代器遍历集合时,使用集合中的增加和删除方法时,会出现并发修改异常,迭代器是依赖于集合的,相当于集合的一个副本,当迭代器在操作的时候,如果发现和集合不一样,则抛出异常。
使用迭代器的解决方法:需要使用Iterator的子接口ListIterator来实现向集合中添加
public static void main(String[] args) {
// Collection c =new ArrayList<>();//变成下面的
List c =new ArrayList<>();
c.add("zhangsan");
c.add("lisi");
c.add("wangwu");
// Iterator it =c.iterator();//变成下边的
ListIterator it =c.listIterator();
while(it.hasNext()){
String s =(String)it.next();
if(s.equals("lisi")){
c.remove("lisi");
}
}
System.out.println(c);
}
输出结果: [zhangsan, wangwu]
10、泛型
集合中是可以存放任意对象的,只要把对象存储集合后,这时他们就会被提升成Object类型,当取出对象进行相应的操作时,需要采用类型转换,可能在转换的时候出现类型转换异常。
泛型的好处:避免了类型转换问题,可以减少黄色警告线,可以简化代码的书写。
public static void main(String[] args) {
Collection<Student> c =new ArrayList<>();
Student s =new Student("zhangsan",18);
Student s1 = new Student("lisi",19);
c.add(s);
c.add(s1);
Iterator it =c.iterator();
while(it.hasNext()){
Student stu = (Student) it.next();
System.out.println(stu.name);
}
}
输出结果:
zhangsan
lisi
11、增强for循环是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合。内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。
public static void main(String[] args) {
Collection<Student> c =new ArrayList<>();
Student s =new Student("zhangsan",18);
Student s1 = new Student("lisi",19);
c.add(s);
c.add(s1);
for(Student stu :c){ //for(元素类型 变量:集合或者数组对象){}
System.out.println(stu.name);
}
}
List子体系
- List是在java.util包下的接口,需要导包,List是有序的(存储和读取的顺序是一致的),有整数索引,允许重复的。
- List的特有功能:
1、void add(int index, E element) :将元素添加到index索引位置上
2、 E get(int index) :根据index索引获取元素
3、E remove(int index) :根据index索引删除元素
4、 E set(int index, E element):将index索引位置的的元素设置为element
- 增删改查
public static void main(String[] args) {
List list =new ArrayList<>();
list.add(0, "hello");
list.add(1, "world");
System.out.println("list="+list);
list.add(0, "你好");
System.out.println("list=="+list);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
System.out.println("删除第一个是:"+list.remove(0));
System.out.println("修改第一个元素是"+list.set(0, "hi"));
System.out.println("list==="+list);
}
输出结果:
list=[hello, world]
list==[你好, hello, world]
你好
hello
world
删除第一个是:你好
修改第一个元素是hello
list===[hi, world]
注意:list的操作不可以越界,否则会报错。
- List常用子类:
1、 ArrayList:底层是数组结构,查询快,增删慢。
2、LinkedList:底层是链表,查询慢,增删快。
3、LinkedList的特有功能:
void addFirst(E e) :向链表的头部添加元素
void addLast(E e) :向链表的尾部添加元素
E getFirst() :E getFirst():获取链头的元素,不删除元素
E getLast() :获取链尾的元素,不删除元素
E removeFirst() :返回链头的元素并删除链头的元素
E removeLast() :返回链尾的元素并删除链尾的元素
public static void main(String[] args) {
LinkedList list =new LinkedList<>();
list.add("hello");
list.add("world");
list.addFirst("java");
list.addLast("c++");
System.out.println("list="+list);
System.out.println(list.getFirst());
System.out.println(list.getLast());
System.out.println(list.removeFirst());
System.out.println(list.removeLast());
System.out.println("list=="+list);
}
输出结果:
list=[java, hello, world, c++]
java
c++
java
c++
list==[hello, world]