- 如果不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象————————可以使用java集合框架;
- java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中。
- List接口存储一组不唯一,有序(插入顺序)的对象
- Set接口存储一组唯一,无序的对象;
- Map接口存储一组键值对象,提供key到value的映射;
(1)ArrayList类:
ArrayList 不唯一 有序 遍历效率高
常用操作:
1. List lis = new ArrayList();//声明集合
2. lis.add(Object o);//添加操作
3. lis.add(int index,Object o);//指定位置添加
4. list.size();//返回列表中元素个数
5. for(Objuect o:lis){}//for_each遍历
6. lis.contains(Object o);//判断对象是否存在
7. lis.remove(Object o);//删除指定对象
8. lis.remove(int index);//删除指定位置的元素
常用操作测试:
//抽象父类
public abstract class Pet {
private String name;
private int health;
private int love;
public Pet() {
// TODO Auto-generated constructor stub
}
public Pet(String name, int health, int love) {
this.name = name;
this.love = love;
this.health = health;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
public int getLove() {
return love;
}
public void setLove(int love) {
this.love = love;
}
public abstract void print();
}
//子类继承父类
public class Dog extends Pet {
private String stain;
public String getStain() {
return stain;
}
public void setStain(String stain) {
this.stain = stain;
}
public Dog() {
}
public Dog(String name, int health, int love, String strain) {
super(name,health, love);
this.stain = strain;
}
@Override
public void print() {
System.out.println("昵称为:"+getName()+"\t健康值为:"+getHealth()+"\t亲密度为:"+getLove()+"\t品种:"+getStain());
}
}
import java.util.List;//List接口
import java.util.ArrayList;//
public class Test {
public static void main(String[] args) {
Dog dog1 = new Dog("花花", 100, 90, "拉布拉多");
Dog dog2 = new Dog("青青", 90, 70, "小哈吧");
Dog dog3 = new Dog("娜娜", 50, 40, "雪橇");
Dog dog4 = new Dog("妮妮", 40, 30, "松狮");
Dog dog5 = new Dog("晶晶", 40, 30, "松狮");
// 1.声明集合
List lis = new ArrayList();
// 2添加操作
lis.add(dog1);// 自动装箱Dog-->Object
lis.add(dog2);
lis.add(dog3);
lis.add(dog4);
lis.add(0, dog5);// 将dog5对象添加到了集合的索引号为0的位置
// 3 遍历方式①
for (int i = 0; i < lis.size(); i++) {
Dog d = (Dog) lis.get(i);// 拆箱
d.print();
}
// 5删除方式
lis.remove(0);// 删除索引号为0的对象
lis.remove(dog3);// 删除指定对象
// 4 遍历方式②for_each
System.out.println("******for_each遍历********");
for (Object obj : lis) {
((Dog) obj).print();
}
//5 contains判断对象是否存在
if (lis.contains(dog3)) {
System.out.println("娜娜对象存在");
} else {
System.out.println("娜娜对象不存在");
}
}
}
测试结果:
(2)LinkedList类
插入、删除操作频繁时,使用LinkedList提高效率。
LinkedList提供头尾删除和添加的操作。
常用操作:
import java.util.LinkedList;
import java.util.List;
public class TestLinkedList {
public static void main(String[] args) {
Dog dog1 = new Dog("花花", 100, 90, "拉布拉多");
Dog dog2 = new Dog("青青", 90, 70, "小哈吧");
Dog dog3 = new Dog("娜娜", 50, 40, "雪橇");
Dog dog4 = new Dog("妮妮", 40, 30, "松狮");
Dog dog5 = new Dog("晶晶", 40, 30, "金毛");
Dog dog6 = new Dog("um", 10, 66, "小可爱");
// 1.声明集合
LinkedList lis = new LinkedList();
// 2添加操作
lis.add(dog1);// 自动装箱Dog-->Object
lis.add(dog2);
lis.add(dog3);
lis.add(dog4);
lis.add(0, dog5);// 将dog5对象添加到了集合的索引号为0的位置
lis.addFirst(dog6);// 添加到第一个位置
lis.addLast(dog6);// 添加到最后一个位置
for (Object obj : lis) {
((Dog) obj).print();
}
lis.removeFirst();// 删除第一个对象
lis.removeLast();// 删除最后一个对象
System.out.println("获得第一个对象为:");
((Dog) lis.getFirst()).print();
System.out.println("获得最后一个对象为:");
((Dog) lis.getLast()).print();
}
}
测试结果: