1. 集合
1.1 集合 与 数组
数组和集合类都是容器
数组长度是固定的,集合长度是可变的。
数组中可以存储基本数据类型,集合只能存储对象
数组中存储数据类型是单一的,集合中可以存储任意类型的对象。
集合类的特点 : 用于存储对象,长度是可变的,可以存储不同类型的对象。
1.2 集合的分类
集合做什么: 将对象添加到集合、从集合中删除对象、从集合中查找一个对象、从集合中修改一个对象就是增删改查
注意:集合和数组中存放的都是对象的引用而非对象本身
。。。。
1.3 什么时候该使用什么样的集合
2. 集合类 (Collection)
Collection接口有两个子接口: List(链表|线性表),Set(集)
特点:Collection中描述的是集合共有的功能(CRUD)
List可存放重复元素,元素存取是有序的
Set不可以存放重复元素,元素存取是无序的
特点:Collection中描述的是集合共有的功能(CRUD)
List可存放重复元素,元素存取是有序的
Set不可以存放重复元素,元素存取是无序的
创建集合对象,使用Collection中的List的具体实现类ArrayList: Collection coll=new Arraylist();
实例:
创建集合对象,创建Person对象,集合中添加一些Perosn,删除指定Person, 删除所有 Person,判断容器中是否还有Person,判断容器中是否包含指定Person,获取容器中Person的个数,将容器变为数组,遍历除所有Person。class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int hashCode() {
return this.name.hashCode() + age;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Person)) {
return false;
}
Person p = (Person) obj;
return this.name.equals(p.name) && this.age == p.age;
}
@Override
public String toString() {
return "Person :name=" + name + ", age=" + age;
}
}
public static void main(String[] args) {
Person p1 = new Person("张三", 19);
Person p2 = new Person("李四", 20);
Person p3 = new Person("王五", 18);
Collection list = new ArrayList();
list.add(p1);
list.add(p2);
list.add(p3);
// isEmpty() 判断集合是否为空
boolean empty = list.isEmpty();
System.out.println(empty);
// 返回集合容器的大小
int size = list.size();
System.out.println(size);
// contains()判断集合何中是否包含指定对象
boolean contains = list.contains(p1);
System.out.println(contains);
// remove(); 将指定的对象从集合中删除
list.remove(p1);
// clear() 清空集合中的所有元素
list.clear();
System.out.println(list);
Object[] object1 = list.toArray();
// 把编号为20的信息输出
for(int i=0; i<object1.length; i++) {
// 从object数组中取出的元素只能使用object类型声明变量接收, 如果需要其他的类型需要进行强制类型转换
Persion p = (Persion)object1[i];
if(p.id==20) {
System.out.println(p);
} }
分析:
1:Person类
1:姓名和年龄
2:重写hashCode和equals方法
1:如果不重写,调用Object类的equals方法,判断内存地址,为false
1:如果是Person类对象,并且姓名和年龄相同就返回true
2:如果不重写,调用父类hashCode方法
1:如果equals方法相同,那么hashCode也要相同,需要重写hashCode方法
3:重写toString方法
1:不重写,直接调用Object类的toString方法,打印该对象的内存地址
3. List
创建对象: List list = new ArrayList();
3.1 List 特有的方法
。。。。
import java.util.ArrayList;
import java.util.List;
public class test_1{
public static void main(String args[]) {
List list = new ArrayList();
// 增加:add() 将指定对象存储到容器中
list.add("仙女");
list.add("付");
list.add("祖");
list.add("仙女");
list.add("贤");
/*// 删除0角标元素
Object remove = list.remove(0);
System.out.println(remove);*/
/*// 修改2角标位置的值,返回的原来2角标位置的值
Object set = list.set(2, "仙女");
System.out.println(set);*/
/*// get(int index) 注意角标越界 , get(list.size()),会出现IndexOutOfBoundsException
Object find = list.get(list.size() - 1);
System.out.println(find);*/
// indexOf(Object o) 返回第一次出现的指定元素的角标
int indexof = list.indexOf("仙女");
System.out.println(indexof);
// lastIndexOf 返回最后出现的指定元素的角标
int indexfod2 = list.lastIndexOf("仙女");
System.out.println(indexfod2);
System.out.println(list);
}
}