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); } }