集合和数组一样,都是用来存储数据的真实开发的时候咱们用集合,不用数组
数组存数据容量是固定数组封装的方法是比较少的,集合封装的方法是比较多的!!!
Java在集合中有一个叫Collection的接口
Collection下面又有两个重要的子接口 List 和 Set
List 接口:
Collection下面的子接口,存储数据特征: 有序的,可重复的
有两个比较重要的实现类:
ArrayList LinkedList
Set 接口:
Collection下面的子接口,存储数据特征: 无序的,不可重复的
有两个比较重要的实现类:
HashSet TreeSet
1.Collection接口下面的方法(子类或者子接口可以使用)
增:
boolean add(E e);添加一个数据到集合中
boolean addAll(Collection<? extends E> c); 将一个集合数据添加到另外一个集合中
Collection<? extends E>:元素 是E本类或者继承的E,才能添加到另外一个集合中
删:
boolean remove(Object obj);删除指定的元素
boolean removeAll(Collection<? extends E> c); 删除的是交集
[a,b,c] [b, c, d]
void clear();清空的
查:
int size(); 查看集合中元素的个数
Object[] toArray(); 将集合转为Object类型数组
boolean contains(Object obj); 集合中是否包含这个元素 如果包含返回true
boolean containsAll(Collection<? extends E> c);一个集合是否另外一个集合子集合
boolean isEmpty(); 判断集合是否为空
import java.util.ArrayList;
import java.util.Collection;
public class Demo1 {
public static void main(String[] args) {
Collection<String> list = new ArrayList<String>();//容器已经创建好了
list.add("张三");
list.add("李四");
list.add("王五");
System.out.println(list);
Collection<String> list1 = new ArrayList<String>();
list1.add("小明");
list1.add("小红");
list1.add("小蓝");
list.addAll(list1);
Collection<Integer> list2 = new ArrayList<Integer>();
list2.add(2);
list2.add(89);
//lst.addAll(list2);直接报错
System.out.println(list);//
//[张三, 李四, 王五, 小明, 小红, 小蓝]
//删除 李四
System.out.println(list.remove("李四"));//true
System.out.println(list);//李四是否还在list集合中
//[张三, 王五, 小明, 小红, 小蓝]
System.out.println(list.remove("李四"));//fasle 删除一个不存在的数据的时候就是false
Collection<String> list3 = new ArrayList<String>();
list3.add("小明");
list3.add("小红");
list3.add("小兰");
list.removeAll(list3);
System.out.println(list);//[张三, 王五, 小蓝]
list.clear();
System.out.println(list);//[]
list.add("张三");
list.add("李四");
list.add("王五");
//SIZE()
System.out.println(list.size());//3
//toArray();
Object[] objects = list.toArray();
System.out.println(objects);//地址
for (int i = 0; i < objects.length; i++) {
System.out.println(objects[i]);
}
System.out.println(list.contains("张三"));//true
System.out.println(list.contains("小明"));//false
System.out.println(list.isEmpty());//false
}
}
咱们现在已经往集合里面存数据了,接下来要取数据。
2.遍历集合中的数据
3种方法:
1.使用for循环
2.增强for循环
3.迭代器
2.1 for循环遍历
package com.qfedu.a_collection;
import java.util.ArrayList;
import java.util.Collection;
public class Demo2 {
public static void main(String[] args) {
Collection<Integer> list = new ArrayList<>();
list.add(250);
list.add(360);
list.add(470);
list.add(404);
list.add(500);
System.out.println(list);
//可以将集合转为数组,然后再for循环遍历
Object[] objects = list.toArray();
for (int i = 0; i < objects.length; i++) {
System.out.println(objects[i]);
}
}
}
2.2增强for循环【重点】
语法格式:
for (集合中元素的数据类型 临时变量 : 集合或者数组) {
sout(临时变量)
}
有快捷键 : iter
package com.qfedu.a_collection;
import java.util.ArrayList;
import java.util.Collection;
public class Demo3 {
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("赵六");
System.out.println(list);
//String s : list
//将list集合 进行迭代,每次取一个值然后赋值给 s
//将list集合中的数据挨个的赋值给s
for (String s : list) {
System.out.println(s);
}
}
}
2.3迭代器
也是对集合中数据进行遍历的
package com.qfedu.a_collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Demo4 {
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("赵六");
//接下来咱们是通过迭代器进行数据的遍历
//1.通过集合对象创建迭代器对象 cursor 光标 指针
Iterator<String> iterator = list.iterator();
//2第一个方法 hasNext(); 判断一个集合中是否有下一个元素
//System.out.println(iterator.hasNext());//true
//3.next() 一个方法干了两件事情,
//会返回当前光标下面的元素。并把光标挪到下一元素的位置
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
3.在集合中存的是自定义的对象【重点】
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;
}
//在一个类中重写toString方法
//将内存地址转为程序员能看懂的字符串
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class Demo5 {
public static void main(String[] args) {
Person person = new Person("张三", 28);
System.out.println(person);
// 之前打印的person对象是内存地址,现在在类中重写了toString方法
//以后,输出一个对象的话,就会打印出来一个字符串
//在集合中添加person对象
Collection<Person> list = new ArrayList<>();
list.add(person);
list.add(new Person("李四", 35));
list.add(new Person("王五", 28));
list.add(new Person("赵六", 25));
System.out.println(list);
Object[] objects = list.toArray();
Person person1 = (Person)objects[1];
System.out.println(person1.getName());
}
}