Collection是集合的顶级父类:是一个接口
其下有两个子类:List和Set
List:元素可重复。 List都是有序的
Set:元素不可重复。 Set大部分是无序的
List中存放的数据equals为true的,可以都存放
Set中存放的数据equals都为false
List:可重复集的父接口
其有两个常用的子类实现:
ArrayList和LinkedList。
package day02;
import java.awt.List;
import java.util.ArrayList;
/**
* List(线性表)
* List本身不能实例化!我们可以使用其几个子类实现
* @author Administrator
*
*/
public class DemoList {
public static void main(String[] args) {
/**
* 创建一个ArrayList实例
* List和ArrayList均处于java.util包下
* 使用List我们不需要在创建的时候考虑容量。
* 集合的容量是根据其所保存的元素决定的。
* 换句话说,集合的容量是可以自动扩充的。
*/
ArrayList list = new ArrayList();
/**
* add方法,向集合末尾追加一个新元素
* add(Object obj).
* 从该方法的参数定义不难看出,集合可以存放任意类型的元素
* 但在实际编程中我们发现,几乎不会向集合中存放一种以上不同类型的元素。
*/
list.add("One");//向集合中添加一个字符串。
list.add("Two");
list.add("Three");
//不建议这样的操作!尽量不在同一个集合中存放不同类型元素
// list.add(1);
System.out.println("集合中的元素数量:"+list.size());
/**
* ArrayList同样重写了toString()方法。
* 返回的字符串是每个元素的toString()返回值的序列
*/
System.out.println(list.toString());//list
//清空集合
list.clear();
System.out.println("清空后集合元素数量:"+list.size());
System.out.println("集合是空的吗?"+list.isEmpty());
}
}
package day02;
public class Point {
private int x;
private int y;
public Point(int x,int y){
this.x = x;
this.y = y;
}
public String toString(){
/*
* 重写toString方法,返回的字符串用于描述当前对象
* 这个对象保存的 是一个点的信息,所有告知外接x,y的坐标
*/
return "x="+x+",y="+y;
}
/*
* 重写Object继承过来的该方法,用于定义对象内容比较规则
*/
public boolean equals(Object obj){
/*
* 若给定的对象obj的地址和当前对象地址一致,那么他们是
* 同一个对象,equals肯定要返回true!自己一定像自己!
* 当我们在equals方法中有大量的内容比较逻辑时,加上这个判断
* 会节省性能的开销!
*
*/
/*
* equals比较前要进行安全验证,确保给定的对象不是null!
* obj若是null,说明该引用变量没有指向任何对象。那么就不能
* 引用obj所指向的对象(因为对象不存在)的属性或方法!
* 若这么做就会引发NullPointerException,空指针异常!
*/
if(obj==null){
return false;
}
/*
* 直接将Object转为子类是存在风险的!
* 我们不能保证Object和我们要比较的对象是同一个类型的
* 这会引发ClassCastException!我们称为类造型异常
*/
//重写equals时第一件要做的事情就是判断给定的对象是否和当前
//对象为同一个类型。不是同类型直接返回false,不具备可比性。
if(!(obj instanceof Point)){//不是这个类型的实例
return false;
}
Point p = (Point)obj;
/*
* 内容比较逻辑定义。
*/
return this.x==p.x && this.y == p.y;
}
public static void main(String[] args) {
/*
* main方法是静态方法
* 不能直接使用toString()方法,因为该方法不是静态的
* java语法规定:
* 静态方法中不能直接引用非静态的属性和方法!
* 非静态方法中可以直接引用静态属性和方法
*/
// System.out.println(toString);//不行!编译错误!
Point p = new Point(6,6);
System.out.println(p);//输出p对象的toString方法返回值
}
}
package day02;
import java.util.ArrayList;
import java.util.List;
/**
* 测试ArrayList
* @author Administrator
*
*/
public class DemoList2 {
public static void main(String[] args) {
//多态的写法
List list = new ArrayList();
//正常的写法
// ArrayList arrayList = new ArrayList();
//存放三个Point实例到集合中
list.add(new Point(1,2));
list.add(new Point(3,4));
list.add(new Point(5,6));
System.out.println(list);
//创建一个Point对象
Point p = new Point(1,2);
/**
* contains(Object obj)方法检查给定对象是否被包含在集合中
* 检查规则是将obj对象与集合中每个元素进
* 行equals比较
* 若equals返回true,则该方法返回true。
* 若比对了所以元素均没有equals为true的则返回false
*/
System.out.println("p在集合中存在吗?"+list.contains(p));
/**
* 被存放的元素的equals方法在集合中决定的事情还很多!
* 是否重写元素的equals方法对集合的操作结果有很大的效果不同
*/
/**
* 删除一个元素
*/
System.out.println("删除前元素数:"+list.size());//3
list.remove(p);//将p对象删除
System.out.println("删除后元素数:"+list.size());//2
System.out.println(list);
}
}
package day02;
import java.util.ArrayList;
import java.util.List;
/**
* ArrayList测试
* @author Administrator
*
*/
public class DemoList3 {
public static void main(String[] args) {
List list1 = new ArrayList();
List list2 = new ArrayList();
List list3 = new ArrayList();
//为第一个集合添加元素
list1.add("One");
list1.add("Two");
list1.add("Three");
//为第二个集合添加元素
list2.add("four");
list2.add("five");
//为第三个集合添加元素
list3.add("One");
list3.add("Two");
/**
* 将集合2的元素存放到集合1中
* 集合的addAll(Collection c)
* 该方法允许将c对应的集合中的所有元素存入该集合
* 注意,这里的参数为Collection,所有换句话说,任何集合类型都
* 可以将其元素存入其他集合中!
*/
list1.addAll(list2);//[One,Two,Three,Four,five]
//从list1中删除list3中相同(equals为true的)元素
list1.removeAll(list3);;//[Three,four,five]
//保留list1中与list3中相同(equals为True的)元素
list1.retainAll(list2);//[four,five]
}
}
package day02;
import java.util.ArrayList;
import java.util.List;
/**
* List元素的修改与查询
* @author Administrator
*
*/
public class DemoList4 {
public static void main(String[] args) {
/**
* 想获取集合中的元素我们可以使用get()方法
* Object get(int index);
* 根据元素下标获取对应位置的元素并返回
* 这里元素下标和数组相似。
*/
List list = new ArrayList();
list.add("One");
list.add("Two");
list.add("Three");
//因为get方法是以Object类型返回的元素,所以需要造型
String element = (String)list.get(2);//获取第三个元素
System.out.println(element);
//遍历集合
for(int i=0;i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?