什么是集合
由若干元素构成的集合
学生构成了一个班级 若干个班级构成了年级
父母亲人构成了家庭 等等
数组和集合的区别
-
长度初始化后不可改变数组
-
只能按索引顺序存取数组
- 集合大小可以
任意改变
- 保证无重复元素的集合
- ...
Collection(除了Map之外的集合的老祖宗 是一个接口 在java.util包中)
java.util
包中提供了以下三种类型的集合
java.util
-
集合 一种有序列表的集合List
-
集合 一种保证没有重复元素的集合Set
-
集合 一种通过键值(key-value)查找的映射表集合Map
List示例
package com.collection;
import org.junit.Test;
import java.util.*;
public class Demo01 {
public static void main(String[] args) {
List list1 = new ArrayList<>();
// 集合是否为空
System.out.println(list1.isEmpty());
// 添加集合元素
list1.add("wwbao");
list1.add("yyll");
list1.add(20);
list1.add(false);
list1.add(new Person("yyll", 22));
list1.add(new String("1314"));
System.out.println("==============size==========");
int size = list1.size();
System.out.println("==>Get size:" + size);
System.out.println("============contains============");
// contains 当前集合是否包含某个对象
System.out.println(list1.contains(20)); // true
/*
* 当对比自定义类时 实际上contains 比较的是对象的equals方法
* 如果没有重写equals方法 则调用的是Object类的equals方法
* equals方法比较的是 值!!!
* */
System.out.println(list1.contains(new Person("yyll", 22))); // true
System.out.println(list1.contains(new String("1314"))); // true
System.out.println("============contailsAll==========");
List list = Arrays.asList("wwbao", "yyll");
// 判断list中所有元素是否存在于coll中
System.out.println(list1.containsAll(list));
System.out.println("=============遍历===========");
Iterator it = list.iterator();
// hasNext判断是否有下一个元素 有返回true 没有返回false
while (it.hasNext()) {
// next方法获取元素
Object result = it.next();
System.out.println("==>Get result:" + result);
}
System.out.println("=============indexOf===========");
/*
* 列表中指定元素的第一次出现的索引
*
* 列表不包含元素,则返回-1
* */
int index = list1.indexOf(111);
System.out.println("返回indexOf的位置是:" + index);
System.out.println("=============remove===========");
System.out.println("删除前的list:" + list1);
Object remove = list1.remove(3);
System.out.println(remove);
System.out.println("删除后的list:" + list1);
System.out.println("=============toArray() ===========");
Object[] arrays = list1.toArray();
System.out.println(Arrays.toString(arrays));
}
}
Person
package com.collection;
public 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 +
'}';
}
@Override
public boolean equals(Object o) {
System.out.println("person的equals方法");
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
if (age != person.age) return false;
return name != null ? name.equals(person.name) : person.name == null;
}
输出

集合交集
@Test
/**
* 集合交集
*/
public void test1() {
Collection coll = new ArrayList();
coll.add("wwbao");
coll.add("yyll");
coll.add(20);
coll.add(false);
coll.add(new String("1314"));
Collection coll1 = new ArrayList();
coll1.add("wwbao");
coll1.add("yyll");
coll1.add(20);
coll1.add(false);
coll1.add(new String("1314"));
// coll.retainAll(coll1);
// System.out.println(coll);
/*
* equals
* 如果结果为true
* 当前集合和形参必须数据完全一模一样
* ArrayList是一个有序集合!!!!!!!!!
* 顺序如果错了 数据相同 equals 判断也是false
* */
System.out.println(coll.equals(coll1));
}
输出
集合差集
@Test
/**
* 集合差集
*/
public void test() {
Collection coll = new ArrayList();
coll.add("wwbao");
coll.add("yyll");
coll.add(20);
coll.add(false);
coll.add(new String("1314"));
Collection coll1 = Arrays.asList(false, 20);
coll.removeAll(coll1);
System.out.println(coll);
}
输出
集合 数组互转
@Test
/**
* 集合转成数组
* 数组到集合
*/
public void test2() {
Collection coll = new ArrayList();
coll.add("wwbao");
coll.add("yyll");
coll.add(20);
coll.add(false);
coll.add(new String("1314"));
Object[] arrays = coll.toArray();
System.out.println("集合到数组:" + Arrays.toString(arrays));
List list = Arrays.asList("wwbao", "yyll", 20);
System.out.println("数组到集合:" + list);
List list1 = Arrays.asList(new int[]{123, 456});
System.out.println("new int:" + list1);
System.out.println("new int size:" + list1.size());
/*
* new int:[[I@4ee285c6]
* new int size:1
*
* int类型数组中有两个元素 但是转成集合后
* size 为 1
* */
List list2 = Arrays.asList(new Integer[]{123, 456});
System.out.println("new Integer:" + list2);
System.out.println("new Integer size:" + list2.size());
/*
* new Integer:[123, 456]
* new Integer size:2
* */
/*
* 以后使用Arrays.asList方法
* 如果使用基本类型为入参 则asList方法会将当成一个对象
* 不会得到预期的结果
* 要么使用基本类型对应的包装类
* 要么直接赋值 Arrays.asList(123,456) ...
* */
}
输出
迭代器
@Test
public void test1() {
Collection coll = new ArrayList();
coll.add("wwbao");
coll.add("yyll");
coll.add(20);
coll.add(false);
coll.add(new String("1314"));
Iterator it = coll.iterator();
while (it.hasNext()) {
// it.remove(); // java.lang.IllegalStateException
Object value = it.next();
if (value.equals(20)) {
it.remove();
}
// it.remove(); // java.lang.IllegalStateException
}
System.out.println(coll);
/*
* 输出结果
* [wwbao, yyll, false, 1314]
* 1.在next方法没有调用之前 不能调用remove方法 否则
* 报异常 java.lang.IllegalStateException
*
* 2.在next方法调用之后 只能调用一次remove方法
* 还是会报异常 java.lang.IllegalStateException
* */
}
小结
- 集合类定义在
包中 有List Map Set三种集合类 使用java.util
进行遍历Iterator
-
不要用基本类型传参Arrays.asList
-
方法实际使用的是对象的equals方法contains
- 如果List集合中包含了
类 则该类必须重写equals方法 以保证数据的一致性自定义
即使再小的帆也能远航