1.Collection下的方法
增:
boolean add(E e);添加一个数据到集合中
boolean addAll(Collection<? extends E> c);将一个集合数据添加到另一个集合中
删:
boolean remove(Object obj);删除指定的元素
boolean removeAll(Collection<? extends E > c);删除的是交集的元素
void clear();清空
查:
boolean isEmpty();判断集合是否为空
int size();查看集合中元素的个数
Object[] toArray();将集合转为Object类型的数组
boolean contains(Object obj);集合中是否包含这个元素,如果包含返回true
boolean containsAll(Collection<? extends E> c);一个集合是否是另一个集合的子集
2.遍历集合中的数据
2.1for循环遍历
package com.qfedu.b_Collection;
import java.util.ArrayList;
import java.util.Collection;
public class Demo02 {
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();
list.add("ad");
list.add("jka");
list.add("mu");
list.add("ju");
Object[] object = list.toArray();
for (int i = 0; i < list.size(); i++) {
System.out.println(object[i]);
}
}
}
2.2增强for循环(重点)
语法格式:
for(集合中元素的数据类型 临时变量 : 集合或者数组){ sout(临时变量); }
package com.qfedu.b_Collection;
import java.util.ArrayList;
import java.util.Collection;
public class Demo02 {
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();
list.add("ad");
list.add("jka");
list.add("mu");
list.add("ju");
for (String s : list) {
System.out.println(s);
}
// Object[] object = list.toArray();
// for (int i = 0; i < list.size(); i++) {
// System.out.println(object[i]);
// }
}
}
2.3迭代器
Iterator<String> iterator = list.iterator();
package com.qfedu.b_Collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Demo02 {
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();
list.add("ad");
list.add("jka");
list.add("mu");
list.add("ju");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
// for (String s : list) {
// System.out.println(s);
// }
// Object[] object = list.toArray();
// for (int i = 0; i < list.size(); i++) {
// System.out.println(object[i]);
// }
}
}
3.在集合中存的是自定义的对象
package com.qfedu.b_Collection;
import java.util.ArrayList;
import java.util.Collection;
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class Demo03 {
public static void main(String[] args) {
Person person1 = new Person("张三", 23);
Person person2 = new Person("李四", 23);
Person person3 = new Person("王五", 23);
Person person4 = new Person("周六", 23);
Collection<Person> list = new ArrayList<>();
list.add(person1);
list.add(person2);
list.add(person3);
list.add(person4);
System.out.println(list);
}
}
4.List接口
List下的方法
增:
void add(int index, E e);在指定的位置插入一个元素
void add(int indext, Collection<? extends E> c);将一个集合插入到另一个集合的指定位置
删:
E remove(int index);通过索引来删除指定的元素,返回的是被删除的元素
E set(int index, E e);通过指定的索引修改数据元素,返回值是被修改的原数据
E get(int index);通过索引去获取指定元素
int indexOf(Obiect obj);通过元素获取指定的下标
int lastIndex(Object obj);通过元素获取元素最后一次出现的索引下标
List<E> subList(int fromIndex, int toIndex);截取一部分返回一个集合;
5.遍历List集合中的数据
5.1for循环
for(int i = 0; i < list.size(); i++){
sout(list,get(i));
}
5.2增强for循环
for(数据类型 s:list){
sout(s);
}
5.3迭代器
顺序遍历:
package com.qfedu.b_Collection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Demo02 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("ad");
list.add("jka");
list.add("mu");
list.add("ju");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
//顺序遍历
System.out.println(iterator.next());
}
}
}
倒序遍历:
package com.qfedu.b_Collection;
import java.util.ArrayList;
import java.util.ListIterator;
import java.util.List;
public class Demo02 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("ad");
list.add("jka");
list.add("mu");
list.add("ju");
ListIterator<String> iterator = list.listIterator(4);
while (iterator.hasPrevious()){
//倒序遍历
System.out.println(iterator.previous());
}
}
}
6.集合中存对象
package com.qfedu.b_Collection;
import java.util.ArrayList;
import java.util.List;
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class Demo03 {
public static void main(String[] args) {
Person person1 = new Person("张三", 23);
Person person2 = new Person("李四", 23);
Person person3 = new Person("王五", 23);
Person person4 = new Person("周六", 23);
List<Person> list = new ArrayList<>();
list.add(person1);
list.add(person2);
list.add(person3);
list.add(person4);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
7.ArrayList
ArrayList底层是数组,可以扩容的,默认的容量是10,
超过容量以后会自动扩容,扩容1.5倍;
特征:查询快,增删慢
因为底层是数组,通过索引下标直接查询,时间复杂度o(1),因为增删涉及到扩容的问题,而每次扩容都会消耗时间和内存
8.LinkedList
底层是一个双向链表
特征:查询慢,增删块
9.ArrayList和LinkedList和Vector的区别
ArrayList和Vector的底层都是数组,而Vector主要涉及到线程安全的问题,效率低,所以开发中不用Vector;而LinkedList的底层是双向链表,它的特征是查询慢,增删快,因为它的数据都有前置结点和后继结点,增删的时候只需要找到对应的前置结点Note prev和后继结点Note next就可以直接增删,时间复杂度为o(1);查询的时候采用的是二分法查找,时间复杂度为log以二为底n的对数;而ArrayList的特征是查询快,增删慢,因为底层是数组,通过索引下标直接查询,时间复杂度o(1),因为增删涉及到扩容的问题,而每次扩容都会消耗时间和内存,时间复杂度o(n);